Есть два сервера, один длинный, другой тяжёлый.
На одном есть три контейнера Elasticsearch, для которых настроен проброс портов изнутри на физический адрес сервера, но которые при этом организовались в кластер по своей внутренней сети.
На втором сервере тоже есть один контейнер. И хотелось бы его добавить четвёртой нодой в существующий кластер.
Я не растерялся и прописал три ноды в discovery.zen.ping.unicast.hosts новой ноды.
Но мой план не сработал, судя по логам кластер пытается собраться на внутренних Docker адресах, что не сработает.
Как это разрулить?
Конфиги:
На обоих серверах интерфейс docker0 172.17.0.1/16
docker-compose.yml с первого сервера:
version: '2.2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.6.0
container_name: elasticsearch1
environment:
- cluster.name=supercluster
- bootstrap.memory_lock=true
- discovery.zen.minimum_master_nodes=2
- "ES_JAVA_OPTS=-Xms32766m -Xmx32766m"
- "discovery.zen.ping.unicast.hosts=elasticsearch"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata1:/usr/share/elasticsearch/data
ports:
- 10.11.12.13:9200:9200
- 10.11.12.13:9300:9300
networks:
- esnet
elasticsearch2:
image: docker.elastic.co/elasticsearch/elasticsearch:6.6.0
container_name: elasticsearch2
environment:
- cluster.name=supercluster
- bootstrap.memory_lock=true
- discovery.zen.minimum_master_nodes=2
- "ES_JAVA_OPTS=-Xms32766m -Xmx32766m"
- "discovery.zen.ping.unicast.hosts=elasticsearch"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata2:/usr/share/elasticsearch/data
ports:
- 10.11.12.13:9201:9200
- 10.11.12.13:9301:9300
networks:
- esnet
elasticsearch3:
image: docker.elastic.co/elasticsearch/elasticsearch:6.6.0
container_name: elasticsearch3
environment:
- cluster.name=supercluster
- bootstrap.memory_lock=true
- discovery.zen.minimum_master_nodes=2
- "ES_JAVA_OPTS=-Xms32766m -Xmx32766m"
- "discovery.zen.ping.unicast.hosts=elasticsearch"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata3:/usr/share/elasticsearch/data
ports:
- 10.11.12.13:9202:9200
- 10.11.12.13:9302:9300
networks:
- esnet
volumes:
esdata1:
driver: local
esdata2:
driver: local
esdata3:
driver: local
networks:
esnet:
Как собрался эластик:
# curl 'http://10.11.12.13:9200/_cat/nodes'
172.25.0.3 23 99 52 0.79 1.39 1.62 mdi * 47cooiw
172.25.0.2 43 99 51 0.79 1.39 1.62 mdi - IX8C70Z
172.25.0.4 40 99 51 0.79 1.39 1.62 mdi - tEy_OlF
docker-compose.yml со второго сервера:
version: '2.2'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.6.0
container_name: elasticsearch
environment:
- cluster.name=supercluster
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms8g -Xmx8g"
- "discovery.zen.ping.unicast.hosts=10.11.12.13:9300,10.11.12.13:9301,10.11.12.13:9302"
ulimits:
memlock:
soft: -1
hard: -1
volumes:
- esdata1:/usr/share/elasticsearch/data
ports:
- 10.11.12.12:9200:9200
- 10.11.12.12:9300:9300
networks:
- esnet
volumes:
esdata1:
driver: local
networks:
esnet:
Я почитал про варианты настройки сети в докере, но очень не хотелось бы наворачивать отдельные адреса каждому контейнеру.