Как настроить трехузловой кластер Elasticsearch на одном экземпляре AWS EC2? - PullRequest
0 голосов
/ 24 июня 2019

В настоящее время я пытаюсь развернуть кластер Elasticsearch с 3 узлами на одном экземпляре EC2 (т. Е. Используя только ОДИН экземпляр) с использованием файла docker-compose. Проблема в том, что я не смог заставить 3 узла взаимодействовать друг с другом, образуя кластер.

На моей машине с Windows 10 я использовал официальный образ Elasticsearch: 6.4.3, в то время как для AWS EC2 я использую собственный образ Elasticsearch: 6.4.3 с плагином ec2-discovery , установленным там, где я создаю используя команду " docker build -t mdasri / eswithec2disc. ". См. Файл Docker ниже.

Докер-файл:

FROM docker.elastic.co/elasticsearch/elasticsearch:6.4.3

RUN /usr/share/elasticsearch/bin/elasticsearch-plugin install --batch discovery-ec2

Мне удалось настроить 3-узловый кластер Elasticsearch локально с помощью docker-compose на моем компьютере с Windows 10. В моем файле 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
}

Когда я оцениваю каждый из журналов Docker-контейнеров в экземпляре EC2 после того, как я ssh-in, это ошибка, с которой я сталкиваюсь в ALL 3 контейнеров:

[2019-06-24T06: 19: 43,880] [WARN] [o.e.d.z.UnicastZenPing] [es01] не удалось разрешить хост [es02]

Это мой файл docker-compose для соответствующей службы AWS EC2 :

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 голосов
/ 24 июня 2019

вам необходимо настроить links в вашем docker-compose для возможности разрешения:

из докерских документов:

Ссылка на контейнеры в другом сервисе. Укажите либо имя службы, либо псевдоним ссылки (SERVICE: ALIAS), либо просто имя службы.

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

и смотрите комментарий также от @ Mishi.Srivastava

...