Я столкнулся со странной проблемой из-за док-контейнеров ES, ранее я запускал автономный ES 7.10 в док-контейнере на хост-порте 9200 (внутренние док-порты такие же, как стандартные порты 9200 и 9300 ES), и в то же время я начал три док-контейнера ES (имеющие другую минорную версию 7) (они должны были сформировать кластер, назовем его docker-es-cluster).
Эти три док-контейнера ES использовали хост-порт 9200, 9201,9202, поэтому ES-контейнер из кластера, который использовал 9200, не мог запуститься из-за конфликта портов (ES 7.10) ES-контейнера.
Поэтому я остановил автономный контейнер докеров 7.10 и снова перезапустил контейнер ES с 3 кластерами, но теперь мои другие 2 контейнера ES, которые прослушивали 9201, 9202, не запускаются, и их журналы содержат следующие ПРЕДУПРЕЖДЕНИЯ:
{"тип": "сервер", "отметка времени": "2020-12-14T15:56:57,651+0000", "level": "ПРЕДУПРЕЖДЕНИЕ", "component": "o.e.c.c.ClusterFormationFailureHelper", "cluster.name": "docker-cluster", "node.name": "es2", "message": "Мастер еще не обнаружен, этот узел ранее не присоединялся к загрузочный (v7+) кластер, и этот узел должен обнаружить главные узлы [] для начальной загрузки кластера: hfrom hosts provider и [{es2}{eBtsR2XgRVWqPdUAP_n_Ew}{tZ9FRAbPTAmZZle_5MaVoA}{172.18.0.3}{172.18.0.3:9300}{dim}{ml.machine_memory=2084032512, xpack.installed=true, ml.max_open_jobs=20}] из последнего известного кластера состояние; термин узла 0, последняя принятая версия 0 в термине 0" }
После этого я остановил все контейнеры докеров, удалил все образы докеров, обрезал докеры, перезапустил систему, но ничего не решает проблему, даже когда я начинаю с чистого состояния, кажется, что состояние кластера испорчено для 2 контейнеров ES, и это не исправляется даже после перезапуска контейнеров докеров.
Мой docker-compose для контейнеров ES выглядит так, как показано ниже, и я не использую привязку тома.
es2:
image: "docker.elastic.co/elasticsearch/elasticsearch:<es-version>"
container_name: 2
environment:
- node.name=2
- cluster.name=docker-cluster
- cluster.initial_master_nodes=1,2,3
- discovery.seed_hosts=1,3
- ES_JAVA_OPTS=-Xms1g -Xmx1g
ports:
- "9201:9200"
networks:
- localenv
elasticsearch в новых версиях (думаю 7.8 выше) имеет очень строгие правила по присоединению и отсоединению узлов от кластеров. вы не можете легко отсоединить мастер или даже узлы данных. Я рекомендую использовать инструмент elasticsearch-node: https://www.elastic.co/guide/en/elasticsearch/reference/current/node-tool.html
самый простой способ - использовать команду ниже на всех узлах:
elasticsearch-node detach-cluster
@ElasticsearchNinja вы пробовали docker exec запускать команду в контейнере?
вы правы насчет эфемерности. но состояние кластера сохраняется в пути данных каждого узла.
да, но поскольку мой контейнер докеров остановлен, я не могу сделать docker exec
и еще один, который работает, я зашел внутрь этого контейнера докеров, но эта команда, которую вы предоставили, не может быть запущена, когда работает ES
Я исправил проблему, перейдя к опции устранения неполадок docker-desktop и выполнив опцию очистки / очистки, как показано на снимке экрана ниже.
Спасибо за ваш ответ, как запустить его для контейнеров докеров, которые остановлены, а мои контейнеры докеров эфемерны?