Подтвердить что ты не робот

Elasticsearch в кластере контейнеров докеров

Я хочу запустить 2 экземпляра ElasticSeach на 2 разных хостах. Я создал собственное изображение докеров, основанное на Ubuntu 14.04 и 1.3.2 версии elasticsearch. Если я запускаю контейнер 2 ES на 1 хост, каждый экземпляр видит другой и может связываться, но когда я запускаю 2 экземпляра ES на 2-х разных хостах, он не работает. Порт 9300 контейнера связывается с хостом порта 9300.

Мой вопрос: возможно ли создать кластер ES с моей конфигурацией?

С уважением, Lucas Rival

4b9b3361

Ответ 1

Мне удалось получить работу кластеризации, используя одноадресную рассылку через два узла докеров. Я просто использую образ ehazlett/elasticsearch, но я не думаю, что это должно иметь большое значение. Кажется, что действительно важный бит устанавливает параметр network.publish_host для общедоступного или маршрутизируемого IP-узла своего докера.

Конфигурация


докер-хост-01

eth0: 192.168.1.10
Docker version 1.4.1, build 5bc2ff8/1.4.1

докер-хост-02

eth0: 192.168.1.20
Docker version 1.4.1, build 5bc2ff8/1.4.1

Создание кластера


На докерном хосте 01

docker run -d \
  -p 9200:9200 \
  -p 9300:9300 \
  ehazlett/elasticsearch \
  --cluster.name=unicast \
  --network.publish_host=192.168.1.10 \
  --discovery.zen.ping.multicast.enabled=false \
  --discovery.zen.ping.unicast.hosts=192.168.1.20 \
  --discovery.zen.ping.timeout=3s \
  --discovery.zen.minimum_master_nodes=1

На докерном хосте 02

docker run -d \
  -p 9200:9200 \
  -p 9300:9300 \
  ehazlett/elasticsearch \
  --cluster.name=unicast \
  --network.publish_host=192.168.1.20 \
  --discovery.zen.ping.multicast.enabled=false \
  --discovery.zen.ping.unicast.hosts=192.168.1.10 \
  --discovery.zen.ping.timeout=3s \
  --discovery.zen.minimum_master_nodes=1

Ответ 2

Использование docker-compose намного проще, чем запустить его вручную в командной строке:

elasticsearch_master:
    image: elasticsearch:latest
    command: "elasticsearch -Des.cluster.name=workagram -Des.node.master=true -Des.node.data=false"
    environment:
       - ES_HEAP_SIZE=512m
    ports:
      - "9200:9200"
      - "9300:9300"

elasticsearch1:
    image: elasticsearch:latest
    command: "elasticsearch -Des.cluster.name=workagram -Des.discovery.zen.ping.unicast.hosts=elasticsearch_master"
    links:
      - elasticsearch_master
    volumes:
      - "/opt/elasticsearch/data"
    environment:
       - ES_HEAP_SIZE=512m
elasticsearch2:
    image: elasticsearch:latest
    command: "elasticsearch -Des.cluster.name=workagram -Des.discovery.zen.ping.unicast.hosts=elasticsearch_master"
    links:
      - elasticsearch_master
    volumes:
      - "/opt/elasticsearch/data"
    environment:
       - ES_HEAP_SIZE=512m

Ответ 3

Вы должны иметь возможность связывать два контейнера, работающие на разных хостах, до тех пор, пока хост-компьютеры не будут доступны между ними в необходимых портах. Я думаю, ваша проблема в том, что вы пытаетесь использовать многоадресное обнаружение ElasticSearch, но если вам нужно также открыть порт 54328 из контейнеров. Если он не работает, вы также можете попытаться настроить ElasticSearch с помощью одноадресной рассылки, правильно настроив IP-адрес компьютеров в вашем elasticsearch.yml.