Press ESC to close

ELASTICSEARCH CLUSTER INSTALLATION AND CONFIGURATION

Elasticsearch yapısı ve kavramları ile iligli daha önce bir yazı yazmış, sonrasında single instance bir Elasticsearch kurulumu yapmıştık aşağıda bu yazıların linkleri bulunmakta.

ELASTICSEARCH ARCHITECTURE

Elasticsearch Installation on RHEL8

 

Burada ise 4 nodlu bir cluster kurulumu yapacağız. Öncelikle Cluster içinde bulunan makinelerin arasında 22, 9200, 9300, 5601 portları ile iletişim açık olmalıdır.

  • İlk olarak aşağıda bulunan komutla Linux için max_map_count parametresi kontrol edilir bu

değer (262144) değerine eşit olmalıdır. Bu dosya, bir sürecin eşlenebileceği (mapped) maksimum bellek alanı sayısını belirler. 262144 değeri elasticsearch tarafından önerilen minimum değerdir. Sunucu speclerine göre uygun değer verilmelidir. Aşağıdaki link üzerinden detaylı bilgiye ulaşılabilir.

https://www.elastic.co/guide/en/elasticsearch/reference/current/vm-max-map-count.html

cat /proc/sys/vm/max_map_count

Eğer değer farklıysa aşağıdaki dosya içerisine

vi /etc/sysctl.conf

Şu değer eklenir.

vm.max_map_count=262144
Ardından sysctl -p komutuyla değişikliklerin onaylanması sağlanır.

Elasticsearch uygulamasının sorunsuz bir şekilde çalışabilmesi için memory ve file sınırlarının düzenlemesi gerekir

  • nofile: Açılabilecek maksimum dosya sayısı.
  • nproc: Oluşturulabilecek maksimum işlem sayısı.
  • memlock: Bellek kilitleme sınırı (RAM kilitleme sınırı).

Soft ve hard sınırlar, sırasıyla yumuşak ve sert sınırları belirler. Yumuşak sınırlar kullanıcı tarafından değiştirilebilirken, sert sınırlar kök (root) kullanıcı tarafından belirlenir ve kullanıcılar tarafından değiştirilemez.

vi /etc/security/limits.conf
elasticsearch soft nofile 65536
elasticsearch hard nofile 65536
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited

Memory bittiği zaman sunucuda bulunan data diskini memory gibi kullanmaması için aşağıdaki ayarların girilmesi gerekmektedir. Performasın olumsuz etkilenmemesi için Swap alanını devre dışı bırakılır.

swapon --show
swapoff -a

Ayrıca Swap diskinin başlangıçta mount etmesini engellemeliyiz. fstab dosyasında swap.img satırını commentliyoruz.

vi /etc/fstab
# /dev/mapper/vgroot-lvswap none

Elasticsearch çalışması için JAVA kurulumu yapılır. Eğer redhat reposu bağlıysa aşağıdaki komut çalıştırılabilir.

# yum install java-17-openjdk.x86_64

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, 

# dnf install --enablerepo=elasticsearch elasticsearch

Kurulum tamamlandıktan sonra vi /etc/elasticsearch/jvm.options ile java virtual machine ayarlarına gidilir ve Xms ile Xmx değerleri ayarlanır ayarlama kriterleri aşağıda detaylandırıldığı gibidir:

  1. Toplam Sistem Belleği:
  • Genel kural, toplam sistem belleğinin %50’sini aşmayacak şekilde ayarlanmalıdır. Yüksek değerli Memory bulunuyorsa 32G ye kadar verilmelidir. 32G üzeri verilecekse bu değer 64G olarak ayarlanmalıdır. JVM heap belleği olarak ayırmaktır. Daha fazla bilgi için aşağıdaki referans dokümanı incelenebilir.

https://www.elastic.co/guide/en/elasticsearch/reference/8.17/heap-size.html

Örnek olarak şuan kurulan sistemimizde 16G memory olduğu için 8G lik heap alanı verilmiştir.

-Xms8g

-Xmx8g

  • Bu, ElasticSearch’ün iyi performans göstermesi için önemli olan işletim sistemi ve dosya sisteminin yeterli belleğe sahip olmasını sağlar.
  1. Minimum Bellek (-Xms) ve Maksimum Bellek (-Xmx) Aynı Olmalıdır:
  • ElasticSearch için genellikle -Xms ve -Xmx değerlerinin aynı olması önerilir. Bu, JVM’in bellek büyüklüğünü dinamik olarak değiştirmek zorunda kalmamasını sağlar ve böylece bellek parçalanmasını önler.
  1. Bellek Tahsisi:
  • Küçük kurulumlar veya geliştirme ortamları için, genellikle 1-2 GB yeterli olabilir.
  • Üretim ortamlarında, toplam belleğin %50’sini aşmayacak şekilde bellek tahsisi yapılmalıdır.
 
Elastic servislerimiz alabileceği ram, cpu vb hatalardan durabilir. Bu duran servislerimiz elasticsearch clusterımızı “yellow“a düşürebilir. Bu yüzden elasticsearch durduğunda otomatik yeniden başlatması için bu ayarı giriyoruz.
 
vi /usr/lib/systemd/system/elasticsearch.service

Aşağıdaki parametreler eklenir.

  • LimitMEMLOCK=infinity
  • Restart=always
  • RestartSec=30s

[Service] LimitMEMLOCK=infinity ifadesinin eklenmesi, Elasticsearch hizmetinin kullandığı bellek sayfalarının kilitlenmesini sağlar. Bu ayar, bellekteki verilerin disk belleği (swap) alanına taşınmasını engeller. Bu, özellikle performans ve gecikme süresinin kritik olduğu durumlarda önemlidir.

Yapılan değişikliklerin sunucu seviyesinde etkinleşmesi için deamon servisi restart edilir.

# systemctl daemon-reload

Elasticsearch güvenlik sistemleri çalışması için bir adet key bir adet de sertifikaya ihtiyaç duyar. Bunların create edilebilmesi için sunucuda openssl bulunması gerekmektedir. Aşağıdaki komut kullanılarak bu dosyalar create edilebilir.  (Aşağıdaki komut sırasında verilen Common Name (cn) tüm sunucularda aynı verilmesi gerekmektedir.)

 

# openssl req -newkey rsa:2048 -nodes -keyout elk_arge_key.key -x509 -days 365 -out elk_crt.crt

yml dosyası sistemi ayağa kaldıracak şekilde düzenlenir. Standart kurulumlarda dosya /etc/elasticsearch klasörü altında bulunur.

Aşağıdaki örnekten standart kurulum parametrelerini görebilirsiniz.

 

cluster.name: arge_cluster (cluster adını temsil eder.)

node.name: elasticnode01 (kurulum yapılan node ismi verilir.)

path.data: /data01/elkdata (datanın tutulacağı dizini gösterir.)

path.logs: /data01/elklogs (Logların bulunacağı dizini gösterir.)

network.host: 10.102.73.11 (Sunucunun IP bilgisi verilir.)

http.port: 9200 (Elastic API’ının çalışacağı Port bilgisidir)

discovery.seed_hosts: [“150.10.73.7”, “150.10.73.8”, “150.10.73.9”, “150.10.73.10”, “150.10.73.11”] (Cluster içerisinde bulunacak hostların IP bilgisini gösterir)

cluster.initial_master_nodes: [“150.102.73.7”, “150.10.73.8”, “150.10.73.9”, “150.10.73.10”, “150.10.73.11”] (Başlangıçta master olabilecek node’ların bilgisini verir. Sadece cluster ilk kurulduğunda gereklidir. Sonrasında güvenlik amacıyla kaldırılması gerekir.)

xpack.security.enabled: true (Elasticsearch’te güvenlik özelliklerinin aktif olduğunu belirtir.)

xpack.security.transport.ssl.enabled: true: (Transport katmanında SSL/TLS şifrelemesinin etkin olduğunu belirtir.)

xpack.security.transport.ssl.key: /etc/elasticsearch/elk_arge_key.key (SSL şifrelemesi için kullanılan özel anahtarın dosya yolunu belirtir.)

xpack.security.transport.ssl.certificate: /etc/elasticsearch/elk_crt.crt  (SSL şifrelemesi için kullanılan sertifikanın dosya yolunu belirtir.)

xpack.security.transport.ssl.certificate_authorities: /etc/elasticsearch/elk_crt.crt (SSL bağlantıları için geçerli olan sertifika otoritesinin dosya yolunu belirtir.)

xpack.security.transport.ssl.verification_mode: certificate: (SSL bağlantısı için sertifika doğrulama modunu belirtir (bu durumda sertifika doğrulaması yapılır).)

xpack.security.http.ssl.enabled: false (HTTP katmanında SSL/TLS şifrelemesinin devre dışı olduğunu belirtir.)

s3.client.default.endpoint: “s3endpoint.turkcell.com.tr” (S3 backup için gerekli endpoint bilgisini verir)

Elasticsearch parametrelerini ayarlarken yazılan data ve log alanları permissionları kontrol edilir. Eğer üst dizinlerinde permission sıkıntısı varsa giderilir ya da dizinler el ile create edilir.

mkdir elkdata elklogs
chown elasticsearch:elasticsearch elk*
chmod 755 elk*

Elasticsearch servisleri enable yapılır, sonrasında çalışıtırılarak durumu kontrol edilir.

# systemctl enable --now elasticsearch
# systemctl start elasticsearch
# systemctl status elasticsearch

Sistem başarılı bir şekilde ayaklandıysa erişim yapılabilmesi elastic kullanıcısının şifresine ihtiyaç var ilk rpm kurulumunda ekranda yazan bir şifreydi eğer not etmediysek veya dikkat etmediysek tekrar oluşturmamız gerekir. Şifre resetlemesi makine üzerinde root kullanıcısıyla aşağıdaki komut çalıştırılarak elasticsearch teknolojisinin kendi betiğiyle yapılabilir. İşlem sonucunda elasticsearch verilen kullanıcı için yeniden şifre ataması yaparak user ve şifre kaydını elasticsearch sistemi üzerine yapar.

# /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

Son olarak sunucu üzerinden curl komutuyla tüm node’ların cluster’a bağlandığı ve cluster health status’un green olduğu kontrol edilir. Aşağıdaki komutlarla bu kontroller yapılabilir.

curl -k http://<sunucu_ip>:9200/_cat/nodes -u <elastic_user>:<password> 
curl -k http://<sunucu_ip>:9200/_cluster/health -u <elastic_user>:<password>

Elasticsearch Cluster için kurulum dökümanı yukarıdaki adımları içermektedir. Bu dökümanı hazırlayan Turkcell de çalışma arkadaşım Salih COŞKUN a teşekkür ederim. 

Bir yanıt yazın

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