クラスタを組んでみます。
ノードは3つで、それぞれをmaster-eligable、data、Ingestの役割を割り当ててみます。
Node | Elasticsearch Guide [7.16] | Elastic
環境はdocker-composeを使いました。
$ docker-compose --version docker-compose version 1.29.2, build 5becea4c
以下、 docker-compose.yml
です。
version: '2.2' services: es01: image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 ports: - 9200:9200 environment: - node.name=es01 - cluster.name=es-docker-cluster - discovery.seed_hosts=es02,es03 - cluster.initial_master_nodes=es01,es02,es03 networks: - elastic es02: image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 environment: - node.name=es02 - cluster.name=es-docker-cluster - discovery.seed_hosts=es01,es03 - cluster.initial_master_nodes=es01,es02,es03 networks: - elastic es03: image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 environment: - node.name=es03 - cluster.name=es-docker-cluster - discovery.seed_hosts=es01,es02 - cluster.initial_master_nodes=es01,es02,es03 networks: - elastic networks: elastic: driver: bridge
それぞれのコンテナの環境変数で定義している、 discovery.seed_hosts
がクラスタを構成する時に相手を探しに行く先になります。ホスト名、またはIPアドレスを指定します。ポートを省略すると、9300と解釈されます。
https://www.elastic.co/guide/en/elasticsearch/reference/7.16/important-settings.html#unicast.hosts
cluster.initial_master_nodes
はクラスタを初期構築する際に、 master を決める投票に参加するノードを指定します。
docker-compose up
で起動させ、動作確認してみます。
$ curl -XGET http://localhost:9200/_cluster/health?pretty { "cluster_name" : "es-docker-cluster", "status" : "green", "timed_out" : false, "number_of_nodes" : 3, "number_of_data_nodes" : 3, "active_primary_shards" : 0, "active_shards" : 0, "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 }
"status" : "green"
となっているので、正しく起動できたようです。