Giriş
Elasticsearch , verilerin gerçek zamanlı olarak dağıtılmış aranması ve analizi için bir platformdur. Popülerliği, kullanım kolaylığı, güçlü özellikleri ve ölçeklenebilirliğinden kaynaklanmaktadır.
Elasticsearch, RESTful işlemlerini destekler. HTTP yöntemleri (kullanabileceği Bu araçlar GET
, POST
, PUT
, DELETE
veri işlemek için bir HTTP URI (/ toplama / girişi) ile kombinasyon halinde, vs.). Sezgisel RESTful yaklaşımı hem geliştirici hem de kullanıcı dostudur, bu da Elasticsearch’ün popülerliğinin nedenlerinden biridir.
Elasticsearch, arkasında sağlam bir şirket olan Elastic’in olduğu ücretsiz ve açık kaynaklı bir yazılımdır. Bu kombinasyon onu kişisel testlerden kurumsal entegrasyona kadar birçok kullanım durumu için uygun hale getirir.
Bu makale sizi Elasticsearch ile tanıştıracak ve onu nasıl kuracağınızı, yapılandıracağınızı ve kullanmaya başlayacağınızı gösterecektir.
Önkoşullar
Bu öğreticiyi takip etmek için aşağıdakilere ihtiyacınız olacak:
- En az 1 GB bellek ve root olmayan bir sudo kullanıcısı ile CentOS 8 çalıştıran bir sunucu. Ayrıntılı talimatlar için CentOS 8 için İlk Sunucu Kurulum Kılavuzumuza bakın.
wget
sunucunuza yüklendi
Adım 1 – CentOS 8’de Java Kurulumu
Elasticsearch, Java programlama dilinde yazılmıştır. O halde ilk göreviniz, sunucunuza bir Java Runtime Environment (JRE) kurmaktır. JRE için yerel CentOS OpenJDK paketini kullanacaksınız. Bu JRE ücretsizdir, iyi desteklenir ve CentOS Yum kurulum yöneticisi aracılığıyla otomatik olarak yönetilir .
OpenJDK 8’in en son sürümünü yükleyin:
sudo dnf install java-1.8.0-openjdk.x86_64 -y
Şimdi kurulumunuzu doğrulayın:
java -version
Komut şu şekilde bir çıktı oluşturacaktır:
Outputopenjdk version "1.8.0_262"
OpenJDK Runtime Environment (build 1.8.0_262-b10)
OpenJDK 64-Bit Server VM (build 25.262-b10, mixed mode)
Elasticsearch’ü kullanarak ilerlediğinizde ve daha iyi Java performansı ve uyumluluğu aramaya başladığınızda, Oracle’ın tescilli Java’sını (Oracle JDK 8) yüklemeyi tercih edebilirsiniz. Daha fazla bilgi için, CentOS ve Fedora’ya Java Nasıl Yüklenir hakkındaki makalemize bakın .
Adım 2 – Elasticsearch’ü CentOS 8’e İndirmek ve Kurmak
Sen doğrudan Elasticsearch indirebilirsiniz elastic.co içinde zip
, tar.gz
, deb
, veya rpm
paketler. CentOS için, rpm
Elasticsearch’ü çalıştırmak için ihtiyacınız olan her şeyi yükleyecek olan yerel paketi kullanmak en iyisidir .
Bu yazının yazıldığı sırada, en son Elasticsearch sürümü 7.9.2’dir.
Bir çalışma dizininden programı indirin:
sudo rpm -ivh https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.2-x86_64.rpm
Elasticsearch /usr/share/elasticsearch/
, yapılandırma dosyaları yerleştirilmiş /etc/elasticsearch
ve ilk komut dosyası eklenmiş olarak yüklenecektir /etc/init.d/elasticsearch
.
Elasticsearch’ün sunucuyla otomatik olarak başlayıp durduğundan emin olmak için, başlangıç komut dosyasını varsayılan çalışma seviyelerine ekleyin:
sudo systemctl daemon-reload && sudo systemctl enable elasticsearch.service
Elasticsearch kuruluyken, şimdi birkaç önemli ayarı yapılandıracaksınız.
Adım 3 – CentOS 8’de Elasticsearch’ün Yapılandırılması
Artık Elasticsearch’ü ve Java bağımlılığını yüklediğinize göre, Elasticsearch’ü yapılandırma zamanı.
Elasticsearch yapılandırma dosyaları /etc/elasticsearch
dizinde bulunur. İnceleyeceğimiz ve düzenleyeceğimizler şunlardır:
elasticsearch.yml
– Elasticsearch sunucu ayarlarını yapılandırır. Çoğu seçeneğin depolandığı yer burasıdır, bu yüzden çoğunlukla bu dosyayla ilgileniyoruz.jvm.options
– Bellek ayarları gibi JVM için yapılandırma sağlar.
Herhangi Elasticsearch sunucuda özelleştirmek ilk değişkenlerdir node.name
ve cluster.name
içinde elasticsearch.yml
. Bunu şimdi yapalım.
Adlarından da anlaşılacağı gibi, node.name
sunucunun (düğüm) adını ve ikincisinin ilişkili olduğu kümeyi belirtir. Bu değişkenleri özelleştirmezseniz node.name
, sunucu ana bilgisayar adına göre otomatik olarak a atanacaktır. cluster.name
Otomatik olarak varsayılan küme adının ayarlanacaktır.
cluster.name
Değeri otomatik olarak Elasticsearch otomatik bulma özelliği tarafından kullanılan bilgiye ve yardımcı Elasticsearch bir kümeye düğümlerin edilir. Bu nedenle, varsayılan değeri değiştirmezseniz, kümenizde aynı ağda bulunan istenmeyen düğümleriniz olabilir.
Ana elasticsearch.yml
yapılandırma dosyasını düzenlemeye başlayalım .
Kullanarak nano
veya tercih ettiğiniz metin düzenleyiciyi açın:
sudo nano /etc/elasticsearch/elasticsearch.yml
Kaldır #
için hatların başında karakterini node.name
ve cluster.name
onlara yorumsuz ve sonra onların değerlerini değiştirin. /etc/elasticsearch/elasticsearch.yml
Dosyadaki ilk yapılandırma değişiklikleriniz şöyle görünecektir:/etc/elasticsearch/elasticsearch.yml
...
node.name: "My First Node"
cluster.name: mycluster1
...
Ağ ayarları da bulunur elasticsearch.yml
. Varsayılan olarak, Elasticsearch, yalnızca aynı sunucudaki istemcilerin bağlanabilmesi için 9200 numaralı bağlantı noktasındaki localhost’u dinleyecektir. Elasticsearch’ün açık kaynak ve ücretsiz sürümü kimlik doğrulama özellikleri sunmadığından, bu ayarları güvenlik açısından değiştirmeden bırakmalısınız.
Bir diğer önemli ayar da node.roles
mülktür. Bunu master-eligible
(sadece master
konfigürasyonda) data
veya olarak ayarlayabilirsiniz ingest
.
master-eligible
Rol kümenin sağlığı ve istikrar sorumludur. Çok sayıda küme düğümüne sahip büyük dağıtımlarda, master
yalnızca bir role sahip birden fazla adanmış düğüme sahip olunması önerilir . Tipik olarak, adanmış bir master
düğüm ne verileri depolayacak ne de indeksler oluşturacaktır. Böylece, küme sağlığının tehlikeye atılabileceği aşırı yükleme şansı olmayacaktır.
data
Rol verileri depolayacak düğümleri tanımlar. Bir veri düğümü aşırı yüklenmiş olsa bile, ek yükü alacak başka düğümler olması koşuluyla, küme sağlığı ciddi şekilde etkilenmemelidir.
Son olarak ingest
rol, bir düğümün veri akışlarını kabul etmesine ve işlemesine izin verir. Daha büyük kurulumlarda, ve düğümlerinde ingest
olası aşırı yüklenmeyi önlemek için özel düğümler bulunmalıdır .master
data
Not: bir düğüm, Elasticsearch kurulumunun ölçeklenebilirliğine, yedekliliğine ve yüksek kullanılabilirliğine izin veren bir veya daha fazla role sahip olabilir. Varsayılan olarak, bu rollerin tümü düğüme atanır. Bu, bu makalede açıklanan örnek senaryoda olduğu gibi, tek düğümlü Elasticsearch için uygundur. Bu nedenle, rolü değiştirmeniz gerekmez. Yine de, bir düğümü a olarak atamak gibi rolü değiştirmek master
istiyorsanız, bunu şu şekilde değiştirerek yapabilirsiniz /etc/elasticsearch/elasticsearch.yml
:/etc/elasticsearch/elasticsearch.yml
...
node.roles: [ master ]
...
Değiştirmeyi düşünmeniz gereken başka bir ayar da path.data
. Bu, verilerin depolandığı yolu ve varsayılan yolu belirler /var/lib/elasticsearch
. Bir üretim ortamında, Elasticsearch verilerini depolamak için özel bir bölüm ve bağlama noktası kullanmanız önerilir. En iyi durumda, bu ayrılmış bölüm, daha iyi performans ve veri yalıtımı sağlayacak ayrı bir depolama ortamı olacaktır. Çizginin açıklamasını path.data
kaldırarak path.data
ve değerini şu şekilde değiştirerek farklı bir yol belirtebilirsiniz :/etc/elasticsearch/elasticsearch.yml
...
path.data: /media/different_media
...
Artık tüm değişikliklerinizi yaptınız, kaydedin ve kapatın elasticsearch.yml
.
Konfigürasyonlarınızı da içinde düzenlemelisiniz jvm.options
.
Elasticsearch’ün bir JVM tarafından çalıştırıldığını, yani aslında bir Java uygulaması olduğunu hatırlayın. Yani herhangi bir Java uygulamasında olduğu gibi, dosyada yapılandırılabilen JVM ayarlarına sahiptir /etc/elasticsearch/jvm.options
. Özellikle performans açısından en önemli iki ayar, olan Xms
ve Xmx
minimum (tanımlayan, Xms
) ve maksimum ( Xmx
) bellek ayırma.
Varsayılan olarak, her ikisi de şeklinde ayarlanmıştır 1GB
, ancak bu neredeyse hiçbir zaman optimal değildir. Sadece bu değil, sunucunuzda yalnızca 1 GB RAM varsa, Elasticsearch’ü varsayılan ayarlarla başlatamazsınız. Bunun nedeni, işletim sisteminin en az 100 MB almasıdır, bu nedenle 1 GB’ı Elasticsearch’e ayırmak mümkün olmayacaktır.
Ne yazık ki, bellek ayarlarını hesaplamak için evrensel bir formül yok. Doğal olarak, ne kadar çok bellek ayırırsanız, performansınız o kadar iyi olur, ancak sunucuda kalan işlemler için yeterli bellek olduğundan emin olun. Makineniz 1GB RAM varsa Örneğin, hem ayarlayabilirsiniz Xms
ve Xmx
karşı 512MB
böylece süreçlerin kalanı için başka 512MB izin. JVM çöp toplama işleminin performans kaybını önlemek için genellikle her ikisinin Xms
ve Xmx
aynı değere ayarlandığını unutmayın .
Sunucunuzda yalnızca 1 GB RAM varsa, bu ayarı düzenlemelisiniz.
Açık jvm.options
:
sudo nano /etc/elasticsearch/jvm.options
Şimdi Xms
ve Xmx
değerlerini şu şekilde değiştirin 512MB
:/etc/elasticsearch/jvm.options
...
-Xms512m
-Xmx512m
...
Dosyayı kaydedin ve çıkın.
Şimdi Elasticsearch’ü ilk kez başlatın:
sudo systemctl start elasticsearch.service
Kullanmayı denemeden önce Elasticsearch’ün başlaması için en az 10 saniye bekleyin. Aksi takdirde bir bağlantı hatası alabilirsiniz.
Not: Tüm Elasticsearch ayarlarının yapılandırılmadığını ve yapılandırma dosyalarında tutulmadığını bilmelisiniz. Bunun yerine, bazı ayarlar onun gibi API aracılığıyla ayarlanır index.number_of_shards
ve index.number_of_replicas
. İlki, dizinin kaç parçaya (parça) bölüneceğini belirler. İkincisi, küme boyunca dağıtılacak kopyaların sayısını tanımlar. Daha fazla parçaya sahip olmak dizinleme performansını iyileştirirken, daha fazla kopyaya sahip olmak aramayı daha hızlı hale getirir.
Halen Elasticsearch’ü tek bir düğümde araştırdığınızı ve test ettiğinizi varsayarsak, bu ayarlarla oynayabilir ve aşağıdaki curl komutunu uygulayarak bunları değiştirebilirsiniz:
curl -XPUT -H 'Content-Type: application/json' 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{
"index.number_of_replicas" : "0",
"index.number_of_shards" : "1"
}'
Elasticsearch kurulup yapılandırıldığında, artık sunucuyu güvenli hale getirecek ve test edeceksiniz.
Adım 4 – (İsteğe Bağlı) CentOS 8’de Elasticsearch’ün Güvenli Hale Getirilmesi
Elasticsearch’ün yerleşik güvenliği yoktur ve HTTP API’ye erişebilen herkes onu kontrol edebilir. Bu bölüm, Elasticsearch’ün güvenliğini sağlamaya yönelik kapsamlı bir kılavuz değildir. Ona ve üzerinde çalıştığı sunucuya / sanal makineye yetkisiz erişimi önlemek için gereken her türlü önlemi alın.
Varsayılan olarak, Elasticsearch yalnızca localhost ağ arayüzünde dinleyecek şekilde yapılandırılmıştır, yani uzak bağlantılar mümkün değildir. Aşağıdaki önlemlerden birini veya her ikisini birden almadığınız sürece bu ayarı değiştirmeden bırakmalısınız:
- 9200 numaralı TCP bağlantı noktasına erişimi yalnızca iptables içeren güvenilir ana bilgisayarlarla sınırladınız .
- Güvenilir ana bilgisayarlarınız arasında bir vpn oluşturdunuz ve Elasticsearch’ü vpn’nin sanal arayüzlerinden birinde ifşa edeceksiniz.
Yalnızca yukarıdakileri yaptıktan sonra, Elasticseach’in localhost dışında diğer ağ arayüzlerini dinlemesine izin vermeyi düşünmelisiniz. Örneğin, başka bir ana bilgisayardan Elasticsearch’e bağlanmanız gerektiğinde böyle bir değişiklik düşünülebilir.
Ağ maruziyetini değiştirmek için dosyayı açın elasticsearch.yml
:
sudo nano /etc/elasticsearch/elasticsearch.yml
Bu dosyada, içeren satırı bulun, satırın başındaki karakteri network.host
kaldırarak açıklamayı kaldırın #
ve ardından değeri güvenli ağ arabiriminin IP adresine değiştirin. Satır şunun gibi görünecek:/etc/elasticsearch/elasticsearch.yml
...
network.host: 10.0.0.1
...
Uyarı: Elasticsearch’ün yerleşik güvenliği olmadığı için, bunu kontrol etmediğiniz veya güvenmediğiniz herhangi bir sunucu tarafından erişilebilen herhangi bir IP adresine ayarlamamanız çok önemlidir. Elasticsearch’ü genel veya paylaşılan bir özel ağ IP adresine bağlamayın .
Ayrıca, ek güvenlik için özel ifadeleri değerlendirmek için kullanılan komut dosyalarını devre dışı bırakabilirsiniz. Özel bir kötü niyetli ifade oluşturarak, bir saldırgan ortamınızı tehlikeye atabilir.
Özel ifadeleri devre dışı bırakmak için /etc/elasticsearch/elasticsearch.yml
dosyanın sonuna aşağıdaki satırı ekleyin :/etc/elasticsearch/elasticsearch.yml
...
script.allowed_types: none
...
Yukarıdaki değişikliklerin etkili olması için Elasticsearch’ü yeniden başlatmanız gerekecek.
Elasticsearch’ü şimdi yeniden başlatın:
sudo service elasticsearch restart
Bu adımda Elasticsearch sunucunuzun güvenliğini sağlamak için bazı önlemler aldınız. Artık uygulamayı test etmeye hazırsınız.
Adım 5 – Elasticsearch’ün CentOS 8’de Test Edilmesi
Şimdiye kadar Elasticsearch, 9200 numaralı bağlantı noktasında çalışıyor olmalıdır. Bunu, curl
istemci tarafı URL aktarımları için komut satırı aracını kullanarak test edebilirsiniz .
Hizmeti test etmek için GET
şuna benzer bir istekte bulunun:
curl -X GET 'http://localhost:9200'
Aşağıdaki yanıtı göreceksiniz:
Output{
"name" : "My First Node",
"cluster_name" : "mycluster1",
"cluster_uuid" : "R23U2F87Q_CdkEI2zGhLGw",
"version" : {
"number" : "7.9.2",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "d34da0ea4a966c4e49417f2da2f244e3e97b4e6e",
"build_date" : "2020-09-23T00:45:33.626720Z",
"build_snapshot" : false,
"lucene_version" : "8.6.2",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
Benzer bir yanıt görürseniz, Elasticsearch düzgün çalışıyor demektir. Değilse, kurulum talimatlarını tekrar kontrol edin ve Elasticsearch’ün tamamen başlaması için biraz zaman bekleyin.
Elasticsearch sunucunuz artık çalışır durumda. Bir sonraki adımda, uygulamadan bazı verileri ekleyecek ve alacaksınız.
Adım 6 – CentOS 8’de Elasticsearch Kullanımı
Bu adımda Elasticsearch’e bazı veriler ekleyecek ve ardından bazı manuel sorgular yapacaksınız.
curl
İlk girişinizi eklemek için kullanın :
curl -H 'Content-Type: application/json' -X POST 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
Aşağıdaki çıktıyı göreceksiniz:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":2,"_primary_term":4
Kullanarak Elasticseach sunucusuna curl
bir HTTP POST
isteği gönderdiniz . İsteğin URI’si idi /tutorial/helloworld/1
. Bu parametrelere daha yakından bakalım:
tutorial
Elasticsearch’teki verilerin indeksidir.helloworld
tiptir.1
yukarıdaki indeks ve tipin altındaki girdimizin id’sidir.
POST
Bağımsız değişkenle tüm isteklerin içerik türünün JSON olarak ayarlanması gerektiğini unutmayın -H 'Content-Type: application/json'
. Bunu yapmazsanız, Elasticsearch talebinizi reddedecektir.
Şimdi bir HTTP GET
isteği kullanarak ilk girişinizi alın :
curl -X GET 'http://localhost:9200/tutorial/helloworld/1'
Sonuç şöyle görünecek:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":3,"_seq_no":2,"_primary_term":4,"found":true,"_source":{ "message": "Hello World!" }}
Mevcut bir girişi değiştirmek için aşağıdaki PUT
gibi bir HTTP isteği kullanabilirsiniz :
curl -H 'Content-Type: application/json' -X PUT 'localhost:9200/tutorial/helloworld/1?pretty' -d '
{
"message": "Hello People!"
}'
Elasticsearch, aşağıdaki gibi başarılı bir değişikliği kabul edecektir:
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 1,
"_primary_term" : 1
}
Yukarıdaki örnekte message
, ilk girişi olarak değiştirdiniz "Hello People!"
. Bununla birlikte sürüm numarası arttı 2
.
GET
İşlemlerinizin çıktısını daha okunaklı hale getirmek için , pretty
argümanı ekleyerek sonuçlarınızı “güzelleştirebilirsiniz” :
curl -X GET 'http://localhost:9200/tutorial/helloworld/1?pretty'
Şimdi yanıt daha okunabilir bir biçimde çıkacaktır:
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"_seq_no" : 1,
"_primary_term" : 1,
"found" : true,
"_source" : {
"message" : "Hello People!"
}
}