У меня есть кластер Elasticsearch с 3 узлами, работающий как 3 службы докеров (1 задача / контейнер для каждой службы).
Docker-swarm - это двухузловой кластер. 1 менеджер и 1 рабочий.
Мое java-приложение подключается к одному из узлов es1 (задача контейнера / службы докеров) на транспортном порте 9300 внутренне с помощью этой службы (es1) Virtual IP (будет балансировка нагрузки, если бы эта конкретная служба имела больше реплик, скажем 2 или 3) и тем самым подключается к 3-узловому кластеру ES.
Точно так же все три сервисные задачи могут быть достигнуты через транспортный порт 9300.
Теперь, когда этот кластер ES и мое java-приложение развернуты в одной и той же наложенной сети, и все контейнеры / задачи доступны как для одного, так и для другого.
Итак, если эта служба es1 умирает или я удалю ее, а запрос поступает из моего java-приложения на es1, тогда мое java-приложение сможет подключиться к любой из двух оставшихся задач службы кластера ES на порту 9300, как и все службы (задачи / контейнеры) могут связаться / пинговать друг друга, находясь в одной сети Overlay.
Я перепробовал все, что мог придумать. На данный момент не удалось. Не думаю, что это возможно.
Но в любом случае, есть ли у docker-swarm network / load-balancer возможность переключать запрос на одну из аналогичных ES-служб, доступных через порт 9300 внутри одной и той же оверлейной сети.
Если да, то какие именно файлы нужно включить в файл compose.
Будем признательны за быстрое подтверждение.
Вот мой файл для создания докеров ES-кластера
version: '3.7'
services:
es01:
image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
environment:
- node.name=es01
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- data01:/usr/share/elasticsearch/data
ports:
- 9200:9200
networks:
- elastic
es02:
image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
environment:
- node.name=es02
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- data02:/usr/share/elasticsearch/data
networks:
- elastic
es03:
image: docker.elastic.co/elasticsearch/elasticsearch:7.6.1
environment:
- node.name=es03
- cluster.name=es-docker-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
volumes:
- data03:/usr/share/elasticsearch/data
networks:
- elastic
volumes:
data01:
driver: local
data02:
driver: local
data03:
driver: local