このチュートリアルに従って、マルチノードElasticsearch8.xクラスターをセットアップする方法を学びます。 この記事の執筆時点では、ElasticStack8.3が現在のリリースです。 この意味は Elasticsearch 8.3、Elastics Stackの主要コンポーネントの1つは、この記事の執筆時点での現在のリリースバージョンでもあります。
マルチノードElasticsearch8.xクラスターのセットアップ
前のチュートリアルでは、3ノードのElasticsearch7.xクラスターをセットアップする方法を学びました。
このチュートリアルでは、3ノードのElasticsearch8.xクラスターも構成します。
私の環境:
- ノード1:es-node01.kifarunix-demo.com
- ノード2:es-node02.kifarunix-demo.com
- ノード3:es-node03.kifarunix-demo.com
ホスト名が各ノードで解決可能であることを確認してください。 DNSサーバーがない場合は、hostsファイルを使用できます。
192.168.56.125 es-node01.kifarunix-demo.com es-node01
192.168.56.138 es-node02.kifarunix-demo.com es-node02
192.168.56.139 es-node03.kifarunix-demo.com es-node03
Elastic 8.xのリリースに伴い、Elasticsearchのセットアップ手順にいくつかの変更があります。
では、マルチノードElasticsearch 8.xクラスターをどのようにセットアップできますか?
すべてのクラスターノードにElasticsearch8.xをインストールします
すべてのクラスターノードに同じバージョンのElasticsearch8.xをインストールする必要があります。
このチュートリアルでは、Ubuntu22.04システムを使用します。
したがって、UbuntuにElasticsearch 8.xをインストールするには、次のようにElasticAPTリポジトリをインストールする必要があります。
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch |
gpg --dearmor > /etc/apt/trusted.gpg.d/elastic.gpg
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" >
/etc/apt/sources.list.d/elastic-8.x.list
システムアップデートを実行します。
apt update
リポジトリが配置されたら、以下のコマンドを使用して、すべてのクラスターノードにElasticsearch8.xをインストールします。
apt install elasticsearch
インストール中、セキュリティ機能はデフォルトで有効になります。
- 認証と承認が有効になります。
- トランスポート層とHTTP層のTLSが有効になり、構成されます。 自己署名SSL証明書が生成され、使用されます。
- Elasticスーパーユーザーアカウント(elastic)とそのパスワードが作成されます。
- Elasticsearchはシングルノードクラスターとして構成されています。
サンプルインストール出力。
Reading package lists... Done Building dependency tree... Done Reading state information... Done The following NEW packages will be installed: elasticsearch 0 upgraded, 1 newly installed, 0 to remove and 26 not upgraded. Need to get 539 MB of archives. After this operation, 1,139 MB of additional disk space will be used. Get:1 https://artifacts.elastic.co/packages/8.x/apt stable/main amd64 elasticsearch amd64 8.3.0 [539 MB] Fetched 539 MB in 3min 51s (2,333 kB/s) Selecting previously unselected package elasticsearch. (Reading database ... 108617 files and directories currently installed.) Preparing to unpack .../elasticsearch_8.3.0_amd64.deb ... Creating elasticsearch group... OK Creating elasticsearch user... OK Unpacking elasticsearch (8.3.0) ... Setting up elasticsearch (8.3.0) ... --------------------------- 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 : GWucOHqyGX1V5JiL6kC* If this node should join an existing cluster, you can reconfigure this with '/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token' 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
Elasticsearchサービスはまだ開始しないでください。
ノード01でElasticsearch8.xを設定します
ノード01で編集するためにElasticsearch構成ファイルを開きます。
vim /etc/elasticsearch/elasticsearch.yml
クラスターの名前を設定する
クラスターの名前を設定します。
# ---------------------------------- Cluster ----------------------------------- # # Use a descriptive name for your cluster: # cluster.name: kifarunix-demo ...
各ノードの名前を設定します。
# ------------------------------------ Node ------------------------------------ # # Use a descriptive name for the node: # node.name: es-node01 ...
必要に応じて、他のカスタム属性を追加できます。
Elasticsearchノードの役割を定義する
上記のように、各ノードにそれぞれの役割を割り当てることができます。 主人、データノード、取り込みノード、調整ノード..このセットアップでは、3つのノードすべてが両方として機能するように構成します。 master
と data
ノードを使用して、単一ノードの損失に対してクラスターを回復力のあるものにします。
... # ------------------------------------ Node ------------------------------------ # # Use a descriptive name for the node: # node.name: es-node01 node.roles: [ master, data ] ...
メモリロックを有効にする
Elasticsearchの良好なパフォーマンスを確保するには、次のことを行う必要があります メモリスワッピングを無効にする メモリロックを有効にすることです。 したがって、行のコメントを解除します bootstrap.memory_lock:true。 これは、swappinessを無効にする多くの方法の1つです。
... # ----------------------------------- Memory ----------------------------------- # # Lock the memory on startup: # bootstrap.memory_lock: true ...
Elasticsearchを非ループバックアドレスにバインドする
Elasticsearchはデフォルトでループバックアドレスにバインドします。 ノードがクラスターを形成するには、ノードを非ループバックアドレスにバインドする必要があります。 これは、ノードのIPアドレスをの値として設定することで実行できます。 network.host。
ノード01
network.host: 192.168.56.125
ElasticsearchはデフォルトでTCPポート9200を使用してRESTAPIを公開します。 TCPポート9300-9400はノード通信に使用されます
The http.host
デフォルトでは0.0.0.0に設定されています。 ESをインターフェイスIPにバインドしましたが、この場合は静的であると想定しているため、この行をコメントアウトします。
# Allow HTTP API connections from anywhere
# Connections are encrypted and require user authentication
#http.host: 0.0.0.0
検出とクラスター形成の設定
クラスター内のノードが相互に検出してマスターノードを選択できるように、本番環境に移行する前に構成する必要がある2つの重要な検出とクラスター形成の設定があります。
Discovery.seed_hosts 設定クラスター内のマスター適格ノードのリストを提供します。 各値の形式は host:port
また host
、 どこ port
デフォルト設定 transport.profiles.default.port
。 この設定は、以前は Discovery.zen.ping.unicast.hosts。
すべてのノードでこの設定を構成します。
でも、インストール中のElasticsearchの自動構成により、クラスターに参加する前に、各ノードでElasticsearchサービスを開始できる必要があります。
そのため、ここではこの設定の構成をスキップします。
- cluster.initial_master_nodes
cluster.initial_master_nodes 設定は、マスター適格ノードの初期セットを定義します。 これは、Elasticsearchクラスターを初めて起動するときに重要です。 クラスタが形成されたら、この設定を各ノードの構成から削除します。 この設定の値 しなければならない の値と一致する node.name
。
インストール中に、Elasticsearchはシングルノードクラスターとして自動構成されることに注意してください。 たとえば、Node01で。
... # Create a new cluster with the current node only # Additional nodes can still join the cluster later cluster.initial_master_nodes: ["es-node01.kifarunix-demo.com"] ...
ノードの名前がの値と一致するようにこの行を更新します node.name。
たとえば、セットアップでは、この行は次のようになります。
cluster.initial_master_nodes: ["es-node01"]
ElasticsearchクラスターのHTTPS接続
デフォルトでは、Elasticsearch 8.xは、トランスポート(ノード間の接続)とHTTP(Kibana、Logstash、エージェントなどのHTTP APIクライアント接続)の両方に対して自己署名SSL証明書を使用して自動構成されます。
後でクラスターに他のノードを追加すると、クラスターに追加されているノードのすべてのセキュリティ自動構成が削除されます。
ノード間の通信については、次のような構成を確認する必要があります。 elasticsearch.yml
。
# Enable encryption and mutual authentication between cluster nodes xpack.security.transport.ssl: enabled: true verification_mode: certificate keystore.path: certs/transport.p12 truststore.path: certs/transport.p12
Kibana、Logstash、AgentsなどのHTTPAPIクライアント接続の場合。
xpack.security.http.ssl:
enabled: true
keystore.path: certs/http.p12
行った変更を保存してファイルを終了します。
その他の重要なシステム設定を構成する
メモリスワッピングを無効にする
上記のようにメモリロックを有効にすることは、swappinessを無効にする方法です。 したがって、Elasticsearchサービスレベルでメモリロックが有効になっていることを確認する必要があります。 これは次のように実行できます。
[[ -d /etc/systemd/system/elasticsearch.service.d ]] || mkdir /etc/systemd/system/elasticsearch.service.d
echo -e '[Service]nLimitMEMLOCK=infinity' >
/etc/systemd/system/elasticsearch.service.d/override.conf
systemdサービスが変更されるたびに、systemd構成をリロードする必要があります。
systemctl daemon-reload
サーバーで実行されているサービスがElasticsearchのみである場合、スワッピングを無効にするための推奨される方法の1つは、スワップを完全に無効にすることです。
swapoff -a
編集します /etc/fstab
単語を含む行をファイルしてコメントアウトする swap
;
sed -i.bak '/swap/s/^/#/' /etc/fstab
それ以外の場合は、カーネル構成でswappinessを無効にします。
echo 'vm.swappiness=1' >> /etc/sysctl.conf
sysctl -p
JVMヒープサイズの設定
Elasticsearchはデフォルトでヒープサイズを1GBに設定します。 強打の原則として、 Xmx
物理RAMの50%以下、32GB以下。 カスタムJVM設定はすべて下に配置する必要があります /etc/elasticsearch/jvm.options.d
。
echo -e "-Xms1gn-Xmx1g" > /etc/elasticsearch/jvm.options.d/jvm.options
最大オープンファイル記述子を設定する
の開いているファイルの最大数を設定します elasticsearch
65,536へのユーザー。 これは、デフォルトですでに設定されています。 /usr/lib/systemd/system/elasticsearch.service
。
...
# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65535
...
また、プロセスの最大数を設定する必要があります。
...
# Specifies the maximum number of processes
LimitNPROC=4096
仮想メモリ設定
Elasticsearchは mmapfs
デフォルトでは、そのインデックスを格納するディレクトリ。 仮想メモリが不足しないようにするには、 /etc/sysctl.conf の値を更新します vm.max_map_count 以下に示すように。
vm.max_map_count=262144
以下のコマンドを実行するだけで、仮想メモリ設定を構成できます。
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
変更を適用するには;
sysctl -p
これまでのところ、以下は各ノードの構成ファイルです。
grep -Ev '^#|^$' /etc/elasticsearch/elasticsearch.yml
ノード01;
cluster.name: kifarunix-demo node.name: es-node01 node.roles: [ master, data ] path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch bootstrap.memory_lock: true network.host: 192.168.56.125 http.port: 9200 xpack.security.enabled: true xpack.security.enrollment.enabled: true xpack.security.http.ssl: enabled: true keystore.path: certs/http.p12 xpack.security.transport.ssl: enabled: true verification_mode: certificate keystore.path: certs/transport.p12 truststore.path: certs/transport.p12 cluster.initial_master_nodes: ["es-node01"]
ノード01でElasticsearchサービスを開始して有効にする
次に、Elasticsearchサービスを開始して有効にし、ノード01のシステムブートで実行します。
systemctl enable --now elasticsearch
Elasticsearchが実行されていることを確認します。
systemctl status elasticsearch
パスワードはインストール出力に含まれていました。
● elasticsearch.service - Elasticsearch Loaded: loaded (/lib/systemd/system/elasticsearch.service; enabled; vendor preset: enabled) Drop-In: /etc/systemd/system/elasticsearch.service.d └─override.conf Active: active (running) since Wed 2022-06-29 17:15:44 UTC; 1min 57s ago Docs: https://www.elastic.co Main PID: 2660 (java) Tasks: 83 (limit: 3447) Memory: 877.7M CPU: 33.848s CGroup: /system.slice/elasticsearch.service ├─2660 /usr/share/elasticsearch/jdk/bin/java -Xms4m -Xmx64m -XX:+UseSerialGC -Dcli.name=server -Dcli.script=/usr/share/elasticsearch/bin/elasticsearch -Dcli.l> ├─2720 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -Djava.security.manager=allow -XX:+Alw> └─2744 /usr/share/elasticsearch/modules/x-pack-ml/platform/linux-x86_64/bin/controller Jun 29 17:15:00 es-node01.kifarunix-demo.com systemd[1]: Starting Elasticsearch... Jun 29 17:15:44 es-node01.kifarunix-demo.com systemd[1]: Started Elasticsearch.
ポートが開いていることを確認します。
ss -altnp | grep -iE '92|93'
LISTEN 0 4096 [::ffff:192.168.56.125]:9200 *:* users:(("java",pid=2720,fd=370)) LISTEN 0 4096 [::ffff:192.168.56.125]:9300 *:* users:(("java",pid=2720,fd=368))
curl -k -u elastic https://es-node01:9200
Enter host password for user 'elastic': { "name" : "es-node01", "cluster_name" : "kifarunix-demo", "cluster_uuid" : "vsBAmUoETA2TfnOgQ4c8dg", "version" : { "number" : "8.3.0", "build_type" : "deb", "build_hash" : "5b8b981647acdf1ba1d88751646b49d1b461b4cc", "build_date" : "2022-06-23T22:48:49.607492124Z", "build_snapshot" : false, "lucene_version" : "9.2.0", "minimum_wire_compatibility_version" : "7.17.0", "minimum_index_compatibility_version" : "7.0.0" }, "tagline" : "You Know, for Search" }
他のノードをElasticsearchクラスターに登録する
この時点で、Elasticsearchはノード01でのみ実行されています。
Elasticsearchクラスター登録トークンを生成する
次に、Elasticsearchクラスター登録トークンを生成する必要があります。 これは単一ノードでのみ実行してください ESが開始される場所。
このセットアップでは、このノードでElasticsearchサービスを開始したため、ESNode01でのみElasticsearchクラスター登録トークンを生成します。
/usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s node
サンプルトークン;
eyJ2ZXIiOiI4LjMuMCIsImFkciI6WyIxOTIuMTY4LjU2LjEyNTo5MjAwIl0sImZnciI6ImRjZjU3
Y2RlYTVkZmI5ZDRkZWFlODA0MDdmODBlNDU2NzA3ZGE2MWZiMmFiNDUwODViMjhlZjJ
hZGYzMzNhNmMiLCJrZXkiOiJKRmd5c1lFQjR1cUFpSnc2MmdQVDpIRTdTVkg2YlRxYUprb0hCUDBFdUp3In0=
トークンを取得したら、他のノードを登録します。
ElasticsearchNode02を登録します。
/usr/share/elasticsearch/bin/elasticsearch-reconfigure-node --enrollment-token eyJ2ZXIiOiI4LjMuMCIsImFkciI6WyIxOTIuMTY4LjU2LjEyNTo5MjAwIl0sImZnciI6ImRjZjU3
Y2RlYTVkZmI5ZDRkZWFlODA0MDdmODBlNDU2NzA3ZGE2MWZiMmFiNDUwODViMjhlZjJh
ZGYzMzNhNmMiLCJrZXkiOiJKRmd5c1lFQjR1cUFpSnc2MmdQVDpIRTdTVkg2YlRxYUprb0hCUDBFdUp3In0=
This node will be reconfigured to join an existing cluster, using the enrollment token that you provided. This operation will overwrite the existing configuration. Specifically: - Security auto configuration will be removed from elasticsearch.yml - The [certs] config directory will be removed - Security auto configuration related secure settings will be removed from the elasticsearch.keystore Do you want to continue with the reconfiguration process [y/N]y
同様に、他のノードでも同じ登録コマンドを実行します。
登録が完了したら、ノードでElasticsearchサービスを開始します。
systemctl enable --now elasticsearch
検出とクラスター形成の設定
お気づきの方もいらっしゃると思いますが、enrollmentコマンドはクラスターの初期ノード設定を置き換えます。
cluster.initial_master_nodes
と discovery.seed_hosts:
最初のノードのアドレスを含む設定。
ここで、Node01で行ったように、このセットアップで新しいノードNode02とNode03を構成する必要があります。
ノード01で行う必要がある唯一の変更は、クラスターノードのリストを定義することです。
vim /etc/elasticsearch/elasticsearch.yml
基本的に、クラスターメンバーとマスター適格ノードの初期セットのリストを定義する必要があります。
# --------------------------------- Discovery ---------------------------------- # # Pass an initial list of hosts to perform discovery when this node is started: # The default list of hosts is ["127.0.0.1", "[::1]"] # discovery.seed_hosts: ["es-node01", "es-node02", "es-node03"] # # Bootstrap the cluster using an initial set of master-eligible nodes: # cluster.initial_master_nodes: ["es-node01", "es-node02", "es-node03"]
次に、自動構成中に設定された初期マスター構成にコメントを付けます。
... # Create a new cluster with the current node only # Additional nodes can still join the cluster later #cluster.initial_master_nodes: ["es-node01"]
ノード01のサンプル構成。
cluster.name: kifarunix-demo node.name: es-node01 node.roles: [ master, data ] path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch bootstrap.memory_lock: true network.host: 192.168.56.125 http.port: 9200 discovery.seed_hosts: ["es-node01", "es-node02", "es-node03"] cluster.initial_master_nodes: ["es-node01", "es-node02", "es-node03"] xpack.security.enabled: true xpack.security.enrollment.enabled: true xpack.security.http.ssl: enabled: true keystore.path: certs/http.p12 xpack.security.transport.ssl: enabled: true verification_mode: certificate keystore.path: certs/transport.p12 truststore.path: certs/transport.p12
ElasticsearchServiceを再起動します。
systemctl restart elasticsearch
ノード01の構成と同じように、ノード02を構成します。 以下は、ノード02の構成例です。
cluster.name: kifarunix-demo node.name: es-node02 node.roles: [ master, data ] path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch bootstrap.memory_lock: true network.host: 192.168.56.138 http.port: 9200 discovery.seed_hosts: ["es-node01", "es-node02", "es-node03"] cluster.initial_master_nodes: ["es-node01", "es-node02", "es-node03"] xpack.security.enabled: true xpack.security.enrollment.enabled: true xpack.security.http.ssl: enabled: true keystore.path: certs/http.p12 xpack.security.transport.ssl: enabled: true verification_mode: certificate keystore.path: certs/transport.p12 truststore.path: certs/transport.p12
ElasticsearchServiceを再起動します。
systemctl restart elasticsearch
ノード03も構成します。 以下は、ノード03の構成例です。
cluster.name: kifarunix-demo node.name: es-node03 node.roles: [ master, data ] path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch bootstrap.memory_lock: true network.host: 192.168.56.139 http.port: 9200 discovery.seed_hosts: ["es-node01", "es-node02", "es-node03"] cluster.initial_master_nodes: ["es-node01", "es-node02", "es-node03"] xpack.security.enabled: true xpack.security.enrollment.enabled: true xpack.security.http.ssl: enabled: true keystore.path: certs/http.p12 xpack.security.transport.ssl: enabled: true verification_mode: certificate keystore.path: certs/transport.p12 truststore.path: certs/transport.p12
ElasticsearchServiceを再起動します。
systemctl restart elasticsearch
クラスタノードを確認してください
curl -k -XGET "https://es-node01:9200/_cat/nodes?v" -u elastic
Enter host password for user 'elastic': ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name 192.168.56.139 34 97 2 0.66 0.38 0.22 dm - es-node03 192.168.56.138 41 97 5 0.72 0.47 0.30 dm - es-node02 192.168.56.125 22 97 1 0.37 0.20 0.13 dm * es-node01
そして、あなたは行きます。 これでElasticsearch8.xクラスターができました。
クラスタのヘルスステータスを確認します。
curl -k -XGET "https://es-node01:9200/_cat/health?v" -u elastic
Enter host password for user 'elastic': epoch timestamp cluster status node.total node.data shards pri relo init unassign pending_tasks max_task_wait_time active_shards_percent 1656539772 21:56:12 kifarunix-demo green 3 3 4 2 0 0 0 0 - 100.0%
確認 クラスターの形成を可能にするために、クラスタートランスポートポート(9300 / tcp)が各ノードのファイアウォールで開かれていること。
上記のようにクラスターが形成されたら、すべてのノードで次の行を削除またはコメントします。
cluster.initial_master_nodes: ["es-node01", "es-node02", "es-node03"]
次のように削除できます。
sed -i.bak '/cluster.initial_master_nodes/s/^/#/' /etc/elasticsearch/elasticsearch.yml
これが、マルチノードElasticsearch8.xクラスターを簡単にセットアップする方法です。
その他のチュートリアル
DockerコンテナにシングルノードElasticStackClusterをデプロイする
マルチノードElasticsearchクラスターのセットアップ
The post マルチノードElasticsearch8.xクラスターのセットアップ appeared first on Gamingsym Japan.