
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:
- 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.
- 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.
- 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.
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