附录 - docker run

附录 - docker run

我正在尝试在 3 个独立的主机上设置测试 Elastic Search 集群,使用官方7.2.0docker 镜像

每个容器都配置有一个 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"
}

只需重复该长错误并进行自动换行......

主节点尚未发现,此节点先前未加入引导 (v7+) 集群,并且此节点必须发现符合主节点条件的节点 [mytest-10.131.128.252、mytest-10.131.129.28、mytest-10.131.105.90] 来引导集群:已发现 [];发现将继续使用主机提供商的 [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}{134.209.178.145:9300}{ml.machine_memory=2090500096, xpack.installed=true, ml.max_open_jobs=20}];节点术语 0,术语 0 中最后接受的版本 0

这似乎不是网络问题。从容器内部,我可以使用 curl 来验证对其他节点上端口 9200 和 9300 的访问。

我怀疑这是关于节点名称的一些微妙之处,我希望在写这个问题时能找到答案。可惜没有。

附录 - docker run

我的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

我尝试过--network host,因为配置使用主机的 IP。从容器内部,我可以访问其他机器的端口 9200/9300,所以它不会似乎这是网络问题。

欢迎任何指点...

答案1

一个想法是将transport.profiles.default.portakatransport.port-pdocker run 上的设置限制为 的完整默认范围9300-9400

根据文档https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-transport.html transport.profiles.default.port默认为9300-9400

进一步discovery.seed_hosts列出与该端口相关的内容transport.profiles.default.porthttps://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html

希望这个建议有所帮助,因为已经有一段时间了,当我使用版本 6.x 组建最后一个集群时,需要一些discovery.zen带有 docker 的值。

相关内容