docker - 如何在单个 AWS EC2 实例上设置 3 节点 Elasticsearch 集群?
问题描述
我目前正在尝试使用 docker-compose 文件在单个EC2 实例(即仅使用一个实例)上部署一个 3 节点 Elasticsearch 集群。问题是我无法让 3 个节点相互通信以形成集群。
在我的 Windows 10 机器上,我使用了官方 Elasticsearch:6.4.3 映像,而对于 AWS EC2,我使用了自定义 Elasticsearch:6.4.3 映像,并安装了ec2-discovery 插件,我使用“ docker build -t mdasri/ eswithec2disc . " 命令。请参阅下面的 dockerfile。
码头工人文件:
FROM docker.elastic.co/elasticsearch/elasticsearch:6.4.3
RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch discovery-ec2
我成功地在我的 Windows 10 机器上使用 docker-compose 在本地设置了 3 节点 Elasticsearch 集群。在我的 docker-compose 文件中,我有 3 个不同的 Elasticsearch 服务来组成 3 个节点:es01、es02、es03。我希望使用相同的 docker-compose 文件在 AWS EC2 实例上设置集群,但我遇到了错误。
我正在使用“ ecs-cli compose -f docker-compose.yml up ”命令部署到 AWS EC2。ecs-cli compose 的状态是:“已启动容器...”。
因此,为了检查集群状态,我输入了xxxx/_cluster/health?pretty,但遇到了这个错误:
{
"error" : {
"root_cause" : [
{
"type" : "master_not_discovered_exception",
"reason" : null
}
],
"type" : "master_not_discovered_exception",
"reason" : null
},
"status" : 503
}
当我在 ssh 进入后评估 EC2 实例中的每个 docker 容器日志时,这是我在所有3 个容器中面临的错误:
[2019-06-24T06:19:43,880][WARN][oedzUnicastZenPing][es01] 无法解析主机 [es02]
这是我用于各自 AWS EC2 服务的 docker-compose 文件:
version: '2'
services:
es01:
image: mdasri/eswithec2disc
container_name: es01
cpu_shares: 100
mem_limit: 2147482548
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
ports:
- "9200:9200"
- "9300:9300"
environment:
- "cluster.name=aws-cluster"
- "node.name=es01"
- "node.master=true"
- "node.data=false"
- "discovery.zen.hosts_provider=ec2"
- "discovery.zen.ping.unicast.hosts=es01, es02"
- "discovery.zen.minimum_master_nodes=2"
- "ES_JAVA_OPTS= -Xmx256m -Xms256m"
- "bootstrap.memory_lock=true"
volumes:
- /usr/share/elasticsearch/data
networks:
- esnet
es02:
image: mdasri/eswithec2disc
container_name: es02
cpu_shares: 100
mem_limit: 2147482548
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
environment:
- "cluster.name=aws-cluster"
- "node.name=es02"
- "node.master=true"
- "node.data=false"
- "discovery.zen.hosts_provider=ec2"
- "discovery.zen.ping.unicast.hosts=es01, es02"
- "ES_JAVA_OPTS= -Xmx256m -Xms256m"
- "bootstrap.memory_lock=true"
volumes:
- /usr/share/elasticsearch/data
networks:
- esnet
es03:
image: mdasri/eswithec2disc
container_name: es03
cpu_shares: 100
mem_limit: 2147482548
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
environment:
- "cluster.name=aws-cluster"
- "node.name=es03"
- "node.master=false"
- "node.data=true"
- "discovery.zen.hosts_provider=ec2"
- "discovery.zen.ping.unicast.hosts=es01,es02"
- "ES_JAVA_OPTS= -Xmx256m -Xms256m"
- "bootstrap.memory_lock=true"
volumes:
- /usr/share/elasticsearch/data
networks:
- esnet
networks:
esnet:
请帮助我,因为过去 1-2 周我一直在解决这个问题。PS:请让我知道你们还需要什么其他信息。谢谢!
解决方案
您需要links
在您的配置中docker-compose
才能解决:
来自 docker-compose 文档:
链接到另一个服务中的容器。要么指定服务名称和链接别名 (SERVICE:ALIAS),要么只指定服务名称。
web:
links:
- db
- db:database
- redis
并查看@Mishi.Srivastava 的评论
推荐阅读
- spring - Spring Boot 框架需要 Spring 安全管理控制台
- java - Java file.createNewFile() 虽然创建了文件但返回 false
- sql-server - 如何在flutter中连接easypaisa/jazzcash支付网关?
- git - 在 Jenkins 构建过程中如何避免圆形标签?
- html - 删除按下图标周围的边框
- javascript - 如何在不同的 Firebase 文档上记录来自与 DialogFlow 机器人的不同对话的响应?
- javascript - 骰子游戏条件
- python-3.x - UnicodeEncode 错误导致跟踪簿,但仍有一些输出(熊猫列表到 .txt 文件)
- javascript - 行值以 0 开头
- c# - 在 ac# 项目中使用 c++ dll