私は公式の 7.2. Dockerイメージを使用して、3つの個別のホストでテストElastic Searchクラスターをセットアップしようとしています
各コンテナーは、次のようなelasticsearch.ymlで構成されています
cluster.name: mytest
network.Host: "0.0.0.0"
node.name: mytest-10.131.105.90
discovery.seed_hosts:
- "10.131.128.252:9300"
- "10.131.129.28:9300"
- "10.131.105.90:9300"
cluster.initial_master_nodes:
- mytest-10.131.128.252
- mytest-10.131.129.28
- mytest-10.131.105.90
各ノードが起動すると、他のノードを検出できなくなり、これを報告します
{
"type": "server",
"timestamp": "2019-07-04T18:42:18,751+0000",
"level": "WARN",
"component": "o.e.c.c.ClusterFormationFailureHelper",
"cluster.name": "mytest",
"node.name": "mytest-10.131.105.90",
"message": "master not discovered yet, this node has not previously joined a bootstrapped (v7+) cluster, and this node must discover master-eligible nodes [mytest-10.131.128.252, mytest-10.131.129.28, mytest-10.131.105.90] to bootstrap a cluster: have discovered []; discovery will continue using [10.131.128.252:9300, 10.131.129.28:9300, 10.131.105.90:9300] from hosts providers and [{mytest-10.131.105.90}{qZqV5-4RSduwKNYIOWVB9A}{_nCNwrToRoeNAiWBO1DbGg}{134.209.178.145}{134.209.178.145:9300}{ml.machine_memory=2090500096, xpack.installed=true, ml.max_open_jobs=20}] from last-known cluster state; node term 0, last-accepted version 0 in term 0"
}
Wordの折り返しでその長いエラーを繰り返すだけです...
マスターはまだ検出されていません。このノードは以前にブートストラップ(v7 +)クラスターに参加していないため、このノードはマスター適格ノード[mytest-10.131.128.252、mytest-10.131.129.28、mytest-10.131.105.90]をbootstrapクラスター:[]を検出しました;検出は、ホストプロバイダーからの[10.131.128.252:9300、10.131.129.28:9300、10.131.105.90:9300]と[{mytest-10.131.105.90} {qZqV5-4RSduwKNYIOWVB9A} {_ nCNwrToRoeNAiWBO1DbGg} {134.209.178.145} {145.145} {134。 .178.145:9300} {ml.machine_memory = 2090500096、xpack.installed = true、ml.max_open_jobs = 20}]最後の既知のクラスター状態から。ノード用語0、用語0の最後に受け入れられたバージョン0
ネットワークの問題ではないようです。コンテナー内から、curlを使用して他のノードのポート9200および9300へのアクセスを確認できます。
それがノード名について微妙なものであると思われ、この質問を書いているときに答えに出くわしたいと思っていました。ああ、そうではない。
私のdocker run
はこのようになり、少し簡略化されています(${IP}
はホストマシンのIPアドレスです)。
docker run --rm --name elasticsearch \
-p ${IP}:9200:9200 -p ${IP}:9300:9300 \
--network Host \
my-elasticsearch:7.2.0 \
/usr/local/bin/start-clustered-es.sh
各コンテナは別々のマシンで実行されています。 start-clustered-es.sh
は、上記のようにelasticsearch.yml
ファイルを書き込むだけなので、各ノードは同じ構成で開始されます。ファイルが書き込まれると、exec /usr/local/bin/docker-entrypoint.sh eswrapper
を使用して基本コンテナの起動スクリプトを呼び出します
設定ではホストマシンのIPを使用しているため、--network Host
を試しました。コンテナーの内側から、他のマシンのポート9200/9300に到達できるので、ネットワークの問題であると見えません。
どんなポインタでも大歓迎です...
1つのアイデアは、transport.profiles.default.port
またはtransport.port
を制限するか、Dockerの実行時に-p
を9300-9400
の完全なデフォルト範囲に設定することです。
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.htmltransport.profiles.default.port
のドキュメントによると、デフォルトは9300-9400
です。
さらにdiscovery.seed_hosts
は、そのポートがtransport.profiles.default.port
に関連していることを示しています。 https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html
この提案が役に立てば幸いです。バージョン6.xを使用して最後のクラスターを形成したときに、Dockerでいくつかのdiscovery.zen
値が必要になったためです。