Press ESC to close

Elasticsearch Installation on RHEL8

Elasticsearch, büyük miktarda yapılandırılmamış veriyi hızlı bir şekilde aramak ve analiz etmek için kullanılan açık kaynak kodlu bir arama ve analiz motorudur. RESTful bir yapıya sahiptir ve özellikle log, işlem ve metin bazlı veri analitiği için idealdir. Elasticsearch, ölçeklenebilirliği sayesinde verileri indeksleyerek hızlı aramalar sağlar ve gerçek zamanlı analizlerle işletmelerin verilerini daha etkili kullanmalarına yardımcı olur. Büyük veri çözümlerinde yaygın olarak tercih edilen Elasticsearch, esneklik ve hız özellikleriyle öne çıkar.

Elasticsearch,  ELK yığınının (Elastic, Logstash, Beats ve Kibana) bir parçası olarak çalışır. Ayrıca Grafana veya Knowi gibi diğer harici görselleştirme araçlarıyla da kullanılabilir. 

İlk olarak Single Instance (tek node) bir Elasticsearch kurulum ve konfigürasyonu ardındanda 3 nodlu bir cluster kurulumu ile kurulumları inceliyor olacağız.

Bu yazıda single instance kurulum yapacağız, bir sonraki cluster kurulumunda master, ingest, data ve coordinator gibi node rollerini cluster kurulumunda detaylı açılıyor olacağız burada tek node bütün bu rollere sahip olacak.

Elasticsearch, çok yönlü ve güçlü özellikleriyle farklı alanlarda yaygın olarak kullanılmaktadır;

1. Log Analizi ve İzleme: Sistem loglarını hızlıca analiz etmek için kullanılır. Örneğin, Elastic Stack (ELK) ile sistemlerin log verilerini toplayıp gerçek zamanlı izlemeyi sağlar.

2. E-Ticaret: Arama motoru olarak kullanılarak ürün filtreleme, öneri ve kişiselleştirilmiş sonuçlar sunar.

3. Finansal Veriler: Hisse senedi fiyatları, işlem hacmi gibi büyük miktarda finansal veriyi analiz etmek için kullanılır.

4. Dokuman Aramaları:  Döküman içerikleri indexlenerek dbüyük boyutlu döümanlar içerisinde istenen kelimlerin hızlıca araması işlerinde

Elasticsearch te bazı kavramlar RDBMS deki kavramlardan farklıdır bu kavramları o kavramlara dayandırarak karşılaştırmalı açıklamaya çalışırsak;

1. Tablo (RDBMS) – İndeks (Elasticsearch): RDBMS’de veriler tablolar halinde saklanırken Elasticsearch’te “indeks”ler veriyi saklar. İndeksler, veritabanındaki tablo benzeri yapılardır.

2. Satır (RDBMS) – Belge (Elasticsearch): RDBMS’deki her satır bir veri kaydıdır; Elasticsearch’te ise her veri kaydı “belge” olarak tanımlanır.

3. Sütun (RDBMS) – Alan (Elasticsearch): RDBMS’de sütunlar veritabanında bir alanı ifade ederken Elasticsearch’te “alan” olarak geçer ve belge içindeki bilgiyi temsil eder.

4. Primary Key (RDBMS) – _id (Elasticsearch): RDBMS’de “primary key” benzersiz bir kimliktir; Elasticsearch’te ise bu, _id alanıyla sağlanır ve her belgeyi benzersiz olarak tanımlar.

5. İlişki (Join): RDBMS’lerde tablolar arasında ilişkiler kurmak mümkündür (foreign key); Elasticsearch’te ise ilişkiler tam olarak desteklenmez ve genelde nested ya da parent-child belgeleriyle çözülür.

Elasticsearch, özellikle metin ve analiz gerektiren veriler için daha uygun ve esnektir, RDBMS ise katı veri bütünlüğü gerektiren yapılar için tercih edilir. 

Temel kavramlardan bahsettikten sonra kuruluma başlayalım; kurulum ile ilgili olarak en güncel versiyon ve kurulum bilgileri oficial oılarak aşağıdaki linkten takip edilebilir;

https://www.elastic.co/guide/en/elasticsearch/reference/8.15/rpm.html#rpm-repo

Öncelikle repo dsoyamızı oluşturalım, sign GPG-KEY key indirelim

rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

Repo dosyamızı oluşturalım /etc/yum.repos.d/ dizini altında elasticsearch.repo dosyamızı oluşturalım ve içeriğini aşapıdaki gibi yapılandıralım;

[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

Şimdi elasticsearch indirebiliriz, ancak öncelikle jdk yüklümü kontrol edelim yoka yükleyelim, aslında elastic içerisinde bir open jdk içermekte ve ve bu jdk yı yüklemesekte çalışacaktır, ancak biz yinede makinede bir jdk yükü olmasını sağlayacağız.

# dnf install java-11-openjdk

# java -version
openjdk version "11.0.25" 2024-10-15 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.25.0.9-1) (build 11.0.25+9-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.25.0.9-1) (build 11.0.25+9-LTS, mixed mode, sharing)
# dnf install --enablerepo=elasticsearch elasticsearch
DigitalOcean Droplet Agent                                                                                57 kB/s | 3.3 kB     00:00
Elasticsearch repository for 8.x packages                                                                 88 MB/s |  74 MB     00:00
Dependencies resolved.
=========================================================================================================================================
 Package                            Architecture                Version                         Repository                          Size
=========================================================================================================================================
Installing:
 elasticsearch                      x86_64                      8.15.3-1                        elasticsearch                      581 M

Transaction Summary
=========================================================================================================================================
Install  1 Package

Total download size: 581 M
Installed size: 1.1 G
Is this ok [y/N]: y
Downloading Packages:
elasticsearch-8.15.3-x86_64.rpm                                                                          8.5 MB/s | 581 MB     01:08
-----------------------------------------------------------------------------------------------------------------------------------------
Total                                                                                                    8.5 MB/s | 581 MB     01:08
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                                                                                 1/1
  Running scriptlet: elasticsearch-8.15.3-1.x86_64                                                                                   1/1
Creating elasticsearch group... OK
Creating elasticsearch user... OK

  Installing       : elasticsearch-8.15.3-1.x86_64                                                                                   1/1
  Running scriptlet: elasticsearch-8.15.3-1.x86_64                                                                                   1/1
--------------------------- Security autoconfiguration information ------------------------------

Authentication and authorization are enabled.
TLS for the transport and HTTP layers is enabled and configured.

The generated password for the elastic built-in superuser is : lo9RA4-bq7HGPXX+jxRl

If this node should join an existing cluster, you can reconfigure this with
'/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token <token-here>'
after creating an enrollment token on your existing cluster.

You can complete the following actions at any time:

Reset the password of the elastic built-in superuser with
'/usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic'.

Generate an enrollment token for Kibana instances with
 '/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana'.

Generate an enrollment token for Elasticsearch nodes with
'/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node'.

-------------------------------------------------------------------------------------------------
### NOT starting on installation, please execute the following statements to configure elasticsearch service to start automatically using systemd
 sudo systemctl daemon-reload
 sudo systemctl enable elasticsearch.service
### You can start elasticsearch service by executing
 sudo systemctl start elasticsearch.service

[/usr/lib/tmpfiles.d/elasticsearch.conf:1] Line references path below legacy directory /var/run/, updating /var/run/elasticsearch → /run/elasticsearch; please update the tmpfiles.d/ drop-in file accordingly.

  Verifying        : elasticsearch-8.15.3-1.x86_64                                                                                   1/1

Installed:
  elasticsearch-8.15.3-1.x86_64

Complete!

RPM i manuel indirmek için;

# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.3-x86_64.rpm

Elastic kurulumunda yukarıdaki kurulum outputunda bazı yönergeler görünmektedir , bir clustera dahil olma vs, komutları biz burada single instance kurulum yaptığımız için elasticsearch super user password değişikliği ile servislerin enable ve start işlemleri yapılacak, ssl, tsl ve bazı güvenlik işlemleri otomatik yapılandırılmış olarak bize gelmektedir.

# sudo systemctl daemon-reload
# sudo systemctl enable elasticsearch.service
# sudo systemctl start elasticsearch.service

Elsaticsearch password değişimi için, default olarak elastic adında bir super user yapılandırılmış olarak gelir, daha sonra farklı user ve yetkiler tanımlayabilirsiniz,  farklı bir super user tanımlayıp kullanabilirsinizde. elastic superuser şifresini saklamalıyız unutursak aşağıdaki gibi değiştirebiliriz

# /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
This tool will reset the password of the [elastic] user to an autogenerated value.
The password will be printed in the console.
Please confirm that you would like to continue [y/N]y


Password for the [elastic] user successfully reset.
New value: -XXXXXXXXXXXXXXXX-

Elasticsearch durumunu gözlemek için aşağıdaki gibi kontrol edilebilir;

# export ELASTIC_PASSWORD="XXXXXXXXXXX"

# curl --cacert /etc/elasticsearch/certs/http_ca.crt -u elastic:$ELASTIC_PASSWORD https://localhost:9200
{
  "name" : "elastcidb01",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "OuFO3bINR0GQfbeynt6_Uw",
  "version" : {
    "number" : "8.15.3",
    "build_flavor" : "default",
    "build_type" : "rpm",
    "build_hash" : "f97532e680b555c3a05e73a74c28afb666923018",
    "build_date" : "2024-10-09T22:08:00.328917561Z",
    "build_snapshot" : false,
    "lucene_version" : "9.11.1",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}
# curl -X GET "https://localhost:9200/_cluster/health?wait_for_status=yellow&timeout=50s&pretty" --key certificates/elasticsearch-ca.pem  -k -u elastic
Enter host password for user 'elastic':
{
  "cluster_name" : "elasticsearch",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 1,
  "active_shards" : 1,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

Tek node olduğu için index create drop işleminden sonra clsuter status u yellow  a düşebilir, aşağıdaki komut ile nerede problem olduğunu tespit edebilirsiniz, aşağıda UNASSIGNED olan işler var bu cluster durumunu yellow yapar

curl -u elastic:$ELASTIC_PASSWORD --cacert /etc/elasticsearch/certs/http_ca.crt -X GET "https://localhost:9200/_cat/shards?v"  index                                                              shard prirep state      docs   store dataset ip        node
.slo-observability.sli-v3.3                                        0     p      STARTED       0    249b    249b 127.0.0.1 elastcidb01
.internal.alerts-observability.threshold.alerts-default-000001     0     p      STARTED       0    249b    249b 127.0.0.1 elastcidb01
.internal.alerts-observability.uptime.alerts-default-000001        0     p      STARTED       0    249b    249b 127.0.0.1 elastcidb01
.ds-.kibana-event-log-ds-2024.10.30-000001                         0     p      STARTED       2  12.5kb  12.5kb 127.0.0.1 elastcidb01
.kibana_8.15.3_001                                                 0     p      STARTED     248  81.6kb  81.6kb 127.0.0.1 elastcidb01
.metrics-endpoint.metadata_united_default                          0     p      STARTED       0    249b    249b 127.0.0.1 elastcidb01
.kibana_task_manager_8.15.3_001                                    0     p      STARTED      29 107.6kb 107.6kb 127.0.0.1 elastcidb01
.internal.alerts-ml.anomaly-detection-health.alerts-default-000001 0     p      STARTED       0    249b    249b 127.0.0.1 elastcidb01
.internal.alerts-security.alerts-default-000001                    0     p      STARTED       0    249b    249b 127.0.0.1 elastcidb01
.internal.alerts-observability.logs.alerts-default-000001          0     p      STARTED       0    249b    249b 127.0.0.1 elastcidb01
.security-7                                                        0     p      STARTED     151 392.9kb 392.9kb 127.0.0.1 elastcidb01
.slo-observability.summary-v3.3                                    0     p      STARTED       0    249b    249b 127.0.0.1 elastcidb01
.apm-custom-link                                                   0     p      STARTED       0    249b    249b 127.0.0.1 elastcidb01
.geoip_databases                                                   0     p      STARTED      38  36.5mb  36.5mb 127.0.0.1 elastcidb01
.kibana_ingest_8.15.3_001                                          0     p      STARTED    1727     5mb     5mb 127.0.0.1 elastcidb01
.transform-internal-007                                            0     p      STARTED       6  61.5kb  61.5kb 127.0.0.1 elastcidb01
.ds-.items-default-2024.10.30-000001                               0     p      STARTED       0    249b    249b 127.0.0.1 elastcidb01
.ds-.items-default-2024.10.30-000001                               0     r      UNASSIGNED
.transform-notifications-000002                                    0     p      STARTED      12  16.2kb  16.2kb 127.0.0.1 elastcidb01

Cluster durumu yellow , bunu n nedeni bir index in replika sayısı 0 değil ancak. bizim cluster tek node o yüzden bu hata laınıyor aşağıdaki gibi bir ayar ile bu durum düzelecektir. Tüm index replika countları 0 a çekilir.

curl -X PUT "https://localhost:9200/_settings" -u elastic:$ELASTIC_PASSWORD --cacert /etc/elasticsearch/certs/http_ca.crt -H 'Content-Type: application/json' -d'
{
  "index" : {
    "number_of_replicas" : 0
  }
}
'

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir