9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Elasticsearchクラスタ環境を構築する

Last updated at Posted at 2020-09-13

はじめに

Elasticsearchクラスタ環境(3台)を構築します。
各サーバーはMasterノード、Dataノード、Ingestノードの役割を設定しますが、今回は3台と少ないので全てのサーバーで全ての役割を持たせます。

環境

使用した環境は以下のとおり。

  • CentOS 7.5
  • Elasticsearch 7.8.0
  • Kibana 7.8.0

3台のサーバーはIPアドレスとホスト名は以下のとおりとします。

  • elasticserver1(192.168.10.161)
  • elasticserver2(192.168.10.162)
  • elasticserver3(192.168.10.163)

OpenJDKのインストール

まず、OpenJDK 8をインストールします。

# yum install -y java-1.8.0-openjdk-devel

# java -version
openjdk 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)

JAVA_HOMEを設定し、PATHにJavaのパスを追加しています。
※今回はJAVA_HOMEがなくても良いのですがお約束で設定。

# echo "export JAVA_HOME=$(readlink -e $(which java)|sed 's:/bin/java::')" > /etc/profile.d/java.sh
# echo "PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile.d/java.sh
# source /etc/profile

Elasticsearchのインストール

以下の公式サイトのドキュメントを参照しインストールを実施していきます。

以下のコマンドでElasticsearchをインストールします。

# curl -L -O https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-x86_64.rpm
# rpm -ivh elasticsearch-7.8.0-x86_64.rpm

Elasticsearchを外部からアクセスできるように設定します。

# vi /etc/elasticsearch/elasticsearch.yml
#network.host: 192.168.0.1
network.host: 0.0.0.0

クラスタ環境向けに以下の設定を追加で実施します。
以下はelasticserver1の場合で、他のサーバーの場合は最後の数値をインクリメントします。

cluster.name: mycluster
node.name: elasticserver1
transport.host: elasticserver1
discovery.seed_hosts:
  - "192.168.10.161"
  - "192.168.10.162"
  - "192.168.10.163"
cluster.initial_master_nodes:
  - "192.168.10.161"
  - "192.168.10.162"
  - "192.168.10.163"

自動起動するように設定し、起動まで実行します。

# systemctl enable elasticsearch
# systemctl start elasticsearch

最後に動作確認。

クラスターの状態を確認すると、以下のようになります。
number_of_nodesでノードが3つで、statusがgreenと表示されており正常に稼働していることが分かります。

# curl http://localhost:9200/_cluster/health?pretty
{
  "cluster_name" : "mycluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "active_primary_shards" : 10,
  "active_shards" : 23,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

また、次のコマンドでも確認できます。

# curl http://localhost:9200/_cat/nodes?v
ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.10.161           35          66   3    0.03    0.33     0.28 dilmrt    *      elasticserver1
192.168.10.162           47          45   1    0.00    0.19     0.17 dilmrt    -      elasticserver2
192.168.10.163           23          45   1    0.13    0.27     0.18 dilmrt    -      elasticserver3

ログと設定ファイルは以下のディレクトリになります。

  • /var/log/elasticsearch/
  • /etc/elasticsearch/

Kibanaのインストール

Elasticsearchのインストールが終わったら、次はKibanaをインストールします。

# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.8.0-x86_64.rpm
# rpm -ivh kibana-7.8.0-x86_64.rpm

Kibanaを外部から接続できるように設定します。

# vi /etc/kibana/kibana.yml

#server.host: "localhost"
server.host: "0.0.0.0"

クラスター環境向けの設定では以下のようにElasticserverのアドレスを3台分設定します。

elasticsearch.hosts:
  - "http://elasticserver1:9200"
  - "http://elasticserver2:9200"
  - "http://elasticserver3:9200"

自動起動するように設定し、起動まで実行します。

# systemctl enable kibana
# systemctl start kibana

最後に動作確認。以下のURLをブラウザから開いて、Kibanaの画面が表示されることを確認します。

  • http://[KibanaサーバーのIPアドレス]:5601

動作確認

シャード数が3、レプリケーションが2でインデックスを作成します。

curl -H "Content-Type: application/json" -XPUT http://localhost:9200/hoge_index?pretty -d '
{
    "settings": {
        "number_of_shards": 3,
        "index.number_of_replicas" : 2
    }
}'

次にドキュメントを5つほど登録してみます。

curl -H "Content-Type: application/json" -XPUT http://localhost:9200/hoge_index/_doc/1?pretty -d '{"id": 1, "hoge_field": "hoge1", "hoge_keyword" : "hoge_test"}'
curl -H "Content-Type: application/json" -XPUT http://localhost:9200/hoge_index/_doc/2?pretty -d '{"id": 2, "hoge_field": "hoge2", "hoge_keyword" : "hoge_test"}'
curl -H "Content-Type: application/json" -XPUT http://localhost:9200/hoge_index/_doc/3?pretty -d '{"id": 3, "hoge_field": "hoge3", "hoge_keyword" : "hoge_test"}'
curl -H "Content-Type: application/json" -XPUT http://localhost:9200/hoge_index/_doc/4?pretty -d '{"id": 4, "hoge_field": "hoge4", "hoge_keyword" : "hoge_test"}'
curl -H "Content-Type: application/json" -XPUT http://localhost:9200/hoge_index/_doc/5?pretty -d '{"id": 5, "hoge_field": "hoge5", "hoge_keyword" : "hoge_test"}'

cat shardsコマンドでインデックスのシャード・ドキュメント数などの情報を取得します。
サーバー(node)毎にシャードが3つあり、ドキュメントが登録されていることが確認できます。

# curl http://localhost:9200/_cat/shards/hoge_index?v
index      shard prirep state   docs store ip             node
hoge_index 1     p      STARTED    0  208b 192.168.10.161 elasticserver1
hoge_index 1     r      STARTED    3 4.4kb 192.168.10.162 elasticserver2
hoge_index 1     r      STARTED    3 4.4kb 192.168.10.163 elasticserver3
hoge_index 2     r      STARTED    1 4.3kb 192.168.10.161 elasticserver1
hoge_index 2     p      STARTED    0  208b 192.168.10.162 elasticserver2
hoge_index 2     r      STARTED    1 4.3kb 192.168.10.163 elasticserver3
hoge_index 0     r      STARTED    1 4.3kb 192.168.10.161 elasticserver1
hoge_index 0     r      STARTED    1 4.3kb 192.168.10.162 elasticserver2
hoge_index 0     p      STARTED    0  208b 192.168.10.163 elasticserver3

この状態でelasticserver3のプロセスをkillすると以下のようになります。
elasticserver3が表示されず、UNASSIGNEDになりました。

# curl http://localhost:9200/_cat/shards/hoge_index?v
index      shard prirep state      docs store ip             node
hoge_index 1     p      STARTED       0  208b 192.168.10.161 elasticserver1
hoge_index 1     r      STARTED       3 4.4kb 192.168.10.162 elasticserver2
hoge_index 1     r      UNASSIGNED                           
hoge_index 2     r      STARTED       1 4.3kb 192.168.10.161 elasticserver1
hoge_index 2     p      STARTED       0  208b 192.168.10.162 elasticserver2
hoge_index 2     r      UNASSIGNED                           
hoge_index 0     p      STARTED       1 9.9kb 192.168.10.161 elasticserver1
hoge_index 0     r      STARTED       1 4.3kb 192.168.10.162 elasticserver2
hoge_index 0     r      UNASSIGNED 

cat nodesコマンドを実行すると以下のように表示されます。

# curl http://localhost:9200/_cat/nodes?v
ip             heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
192.168.10.161           62          67   2    0.00    0.02     0.11 dilmrt    *      elasticserver1
192.168.10.162           52          45   2    0.00    0.01     0.07 dilmrt    -      elasticserver2

この状態でelasticserver2のプロセスをkillすると、1台だけとなり"master_not_discovered_exception"と表示されコマンドの実行に失敗するようになりました。

elasticserver3を起動すると以下のように結果が返ってきました。
全てのドキュメントがelasticserver2とelasticserver3に2つずつ登録されているようです。

# curl http://localhost:9200/_cat/shards/hoge_index?v
index      shard prirep state      docs  store ip             node
hoge_index 1     p      STARTED       3  6.1kb 192.168.10.161 elasticserver1
hoge_index 1     r      STARTED       3  6.1kb 192.168.10.163 elasticserver3
hoge_index 1     r      UNASSIGNED                            
hoge_index 2     p      STARTED       1 11.9kb 192.168.10.161 elasticserver1
hoge_index 2     r      STARTED       1  6.2kb 192.168.10.163 elasticserver3
hoge_index 2     r      UNASSIGNED                            
hoge_index 0     p      STARTED       1 10.1kb 192.168.10.161 elasticserver1
hoge_index 0     r      STARTED       1  5.9kb 192.168.10.163 elasticserver3
hoge_index 0     r      UNASSIGNED 

参考

9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?