CentOS 8’de Elasticsearch Nasıl Kurulur ve Yapılandırılır

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

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 ziptar.gzdeb, veya rpmpaketler. CentOS için, rpmElasticsearch’ü ç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/elasticsearchve 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/elasticsearchdizinde 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.nameve cluster.nameiçinde elasticsearch.yml. Bunu şimdi yapalım.

Adlarından da anlaşılacağı gibi, node.namesunucunun (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.nameOtomatik olarak varsayılan küme adının ayarlanacaktır.

cluster.nameDeğ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.ymlyapılandırma dosyasını düzenlemeye başlayalım .

Kullanarak nanoveya tercih ettiğiniz metin düzenleyiciyi açın:

sudo nano /etc/elasticsearch/elasticsearch.yml

Kaldır #için hatların başında karakterini node.nameve cluster.nameonlara yorumsuz ve sonra onların değerlerini değiştirin. /etc/elasticsearch/elasticsearch.ymlDosyadaki 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.rolesmülktür. Bunu master-eligible(sadece masterkonfigürasyonda) dataveya olarak ayarlayabilirsiniz ingest.

master-eligibleRol kümenin sağlığı ve istikrar sorumludur. Çok sayıda küme düğümüne sahip büyük dağıtımlarda, masteryalnızca bir role sahip birden fazla adanmış düğüme sahip olunması önerilir . Tipik olarak, adanmış bir masterdüğü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.

dataRol 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 ingestrol, bir düğümün veri akışlarını kabul etmesine ve işlemesine izin verir. Daha büyük kurulumlarda, ve düğümlerinde ingestolası aşırı yüklenmeyi önlemek için özel düğümler bulunmalıdır .masterdata

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 masteristiyorsanı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.datakaldırarak path.datave 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 Xmsve Xmxminimum (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 Xmsve Xmxkarşı 512MBbö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 Xmsve Xmxaynı 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 Xmsve Xmxdeğ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_shardsve 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.hostkaldı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.ymldosyanı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, curlistemci 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 curlbir HTTP POSTisteğ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.

POSTBağı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 GETisteğ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 PUTgibi 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 , prettyargü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!"
  }
}

Kaynak