Elasticsearch6.xで設定していたdiscovery.zen.ping.unicast.hostsは7.xだとdeprecationなのでdiscovery.seed_hostsとcluster.initial_master_nodesを設定する
Elasticsearchの勉強のために以下の書籍を読んで、ローカルでDockerを使ってElasticsearchを複数ノード起動して遊んでいました。この書籍ではElasticsearchは6.x系が前提です。
6.x系でノードをクラスターに参加させる設定については、以下の記事を読んでdiscovery.zen.ping.unicast.hosts
にマスターノードを設定していました。
今まで6.x系しか触っていなかったため、最新のElasticsearch(7.6.2)のDockerイメージで遊んでみようと思ってElasticsearch6.x系のdocker-compose.ymlを流用して起動してみたところ、discovery.zen.ping.unicast.hosts
はdeprecation warningが出ていました。
{ "type": "deprecation", "timestamp": "2020-05-12T14:05:43,936Z", "level": "WARN", "component": "o.e.d.c.s.Settings", "cluster.name": "play-cluster", "node.name": "es_1", "message": "[discovery.zen.ping.unicast.hosts] setting was deprecated in Elasticsearch and will be removed in a future release! See the breaking changes documentation for the next major version." }
最新版(7.x系から?)はdiscovery.zen.ping.unicast.hosts
ではない設定値でクラスター参加(ディスカバリー)設定をする必要があるようです。
色々調べてみると、以下の「Elasticsearchの重要な構成」という公式のセットアップガイドが参考になりそうです。
discovery.seed_hosts
とcluster.initial_master_nodes
の内容をしっかりとは理解していませんが、とりあえず以下ののdocker-compose.ymlで起動しました。ベースイメージはdocker build -t es_7_6_2 .
でビルドしておきます。
# Dockerfile FROM docker.elastic.co/elasticsearch/elasticsearch:7.6.2 RUN bin/elasticsearch-plugin install analysis-kuromoji
# docker-compose.yml version: '3.7' services: es_1: image: es_7_6_2 container_name: es_1 environment: - node.name=es_1 - cluster.name=play-cluster - discovery.seed_hosts=es_1 # 重要 - cluster.initial_master_nodes=es_1 # 重要 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 ports: - "9200:9200" volumes: - ./es_data_1:/usr/share/elasticsearch/data networks: - es_net es_2: image: es_7_6_2 container_name: es_2 environment: - node.name=es_2 - cluster.name=play-cluster - discovery.seed_hosts=es_1 # 重要 - cluster.initial_master_nodes=es_1 # 重要 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - ./es_data_2:/usr/share/elasticsearch/data networks: - es_net es_3: image: es_7_6_2 container_name: es_3 environment: - node.name=es_3 - cluster.name=play-cluster - discovery.seed_hosts=es_1 # 重要 - cluster.initial_master_nodes=es_1 # 重要 - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - ./es_data_3:/usr/share/elasticsearch/data networks: - es_net kibana: image: docker.elastic.co/kibana/kibana:7.6.2 container_name: kibana environment: SERVER_NAME: localhost:5601 ELASTICSEARCH_HOSTS: http://es_1:9200 # 重要 ports: - "5601:5601" depends_on: - es_1 networks: - es_net networks: es_net:
ちなみに、KibanaのELASTICSEARCH_HOST
という環境変数は、6.x系ではELASTICSEARCH_URL
でしたが・・・これも変わったみたいです。
KibanaのDevToolでGET /_cat/nodes?v
を実行すると、以下のように3ノード表示されました。意図通りes_1
がマスターノードとなっています。
※ローカルで確認するためだけが目的なのでマスターノードは1台だけにしています。
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name 192.168.0.4 33 71 5 2.84 2.15 1.72 dilm - es_2 192.168.0.3 32 71 5 2.84 2.15 1.72 dilm - es_3 192.168.0.2 28 71 5 2.84 2.15 1.72 dilm * es_1
・・・と思ったら、docker-compose down
・docker-composeup
で起動して直してみたところ、今度はes_3
がマスターノードになっていました。
やはり、ちゃんと設定値を理解しないと意図した通りに動かないので、discovery.seed_hosts
とcluster.initial_master_nodes
については今後のもっと詳しく調査しようと思います。
今回はとりあえず最新バージョンで起動できたのでOK・・・
Elasticsearchはバージョンが変わると結構仕様が変わっていますが、web上の記事は古い情報が混ざっていて混乱する時があります。
困った時は公式ドキュメントにあたるのが良いですね、全て英語ですが・・・・。
※本記事で使用しているDockerfile/docker-compose.ymlは以下のリポジトリにあります。