もっと詳しく

このチュートリアルに従って、マルチノード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つのノードすべてが両方として機能するように構成します。 masterdata ノードを使用して、単一ノードの損失に対してクラスターを回復力のあるものにします。

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