我正在尝试在 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.port
akatransport.port
或-p
docker 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.port
。
https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html
希望这个建议有所帮助,因为已经有一段时间了,当我使用版本 6.x 组建最后一个集群时,需要一些discovery.zen
带有 docker 的值。