如何在单个AWS EC2实例上设置3节点Elasticsearch集群?

时间:2019-06-24 06:32:41

标签: docker elasticsearch amazon-ec2 docker-compose

我目前正在尝试使用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。

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的状态为:“已启动容器...”。

因此要检查群集状态,我键入了 x.x.x.x / _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容器日志时,这是我在 ALL 3个容器中遇到的错误:

  

[2019-06-24T06:19:43,880] [WARN] [o.e.d.z.UnicastZenPing] [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周内一直在解决此问题。 附注:请让我知道您还需要其他哪些信息。谢谢!

1 个答案:

答案 0 :(得分:0)

您需要在links中配置docker-compose才能解析:

来自docker-compose文档:

链接到另一个服务中的容器。既可以指定服务名称,也可以指定链接别名(SERVICE:ALIAS),也可以仅指定服务名称。

web:
  links:
   - db
   - db:database
   - redis

,也可以从@ Mishi.Srivastava查看评论