7.3.2 и потеря мастера

Наконец-то обновились до 7.3.2 с 6.8.2
Индексы поднялись и при минимальной нагрузке одна нода теряет выбранный мастер и соответственно вылетела из кластера через пару минут присоединившись
При этом проблем с железом и сетью нет
У нас 7 нод и каждая node.master: true

Логи с момента потери: https://gist.github.com/UkrZilla/71d7da7a83c1755e8ec77a9b54baf861

Ещё в процессе нормальной работы вижу в логах на всех нодах через каждую минуту INFO сообщение: waiting for elected master node...

В логах выбранного мастера вижу как он периодически удаляет ноду, а потом присоединяет:

Свапимся опять?

Вы про swapping? Нет. Памяти свободной сейчас 90%

Надо разобраться, почему вот это происходит.

[2019-09-26T11:54:31,820][INFO ][o.e.m.j.JvmGcMonitorService] [node-00] [gc][3308] overhead, spent [273ms] collecting in the last [1s]
[2019-09-26T11:54:53,827][INFO ][o.e.m.j.JvmGcMonitorService] [node-00] [gc][3330] overhead, spent [259ms] collecting in the last [1s]
[2019-09-26T11:54:54,828][INFO ][o.e.m.j.JvmGcMonitorService] [node-00] [gc][3331] overhead, spent [362ms] collecting in the last [1s]

Такое обычно бывает, когда процесс elasticsearch уходит в swap, либо когда процессор дросселируется виртуальной машиной или когда у java кучи не хватает. 30% времени в GC - это не здоровая ситуация.

Кстати, при обновлении я удалил Java 11 и использую бандлед 12 которая идёт в поставке с 7.3.2
Может попробовать вернуть 11?

Ещё у нас каждая дата нода является и мастером. Есть виртуалка которая не дата и не мастер, для чтения дашбоардов. Виртуалка стабильна. Может сделать мастером только виртуалку и тогда проблемы дата нод не будут влиять на выборы?

Надо разобраться почему ваша виртуалка не дает процессу java нормально работать, все остальное - временные решения.

Так, похоже проблема найдена: во всех случаях удаления ноды от мастера была причина: reason: ApplyCommitRequest
Насколько я понял по форуму это повреждённый индекс или transaction log.
После установки 7.3 я увидел старые индексы за март, которые 6.8 не показывал.
Удалив их всё нормализовалось и ноды перестали отлетать. Объясняет ли это проблему в GC?

Вы, скорее всего, прочитали про flush, он же Lucene commit. ApplyCommitRequest - это часть процесса публикации состояния кластера на все ноды. В результате длинных пауз в результате блокировки во время сборки мусора, ноды не подтверждали во время новое состояние кластера, что и вызывало сбои.

Индексы, которые появились - это так называемые dangling indices. Они могли вызывать дополнительную нагрузку на кластер. Если у вас сообщения про GC после этого исчезли - то все нормально, если они все еще появляются - то ваше спокойствие временное и проблемы вернутся как только вы увеличите нагрузку на кластер.

Всё нормализовалось. Больше такого не наблюдали

Обновились на 7.4. В плане производительности стало лучше. Но мастер всё таки раз в 2-3 дня отваливается. При этом никакой резкой нагрузки, всплеска или видимых причин не видно.

Вот что в этот момент в логах дата нод которые с ролью мастера, но не были в этот момент мастером:

В этот момент в логах избранного мастера:

Что можете посоветовать? На версиях до 7-ки такого не было

Судя по логам т.к. у нас не SSD диски, то обновление мета-информации о каждоом индексе(которых у нас больше чем 1000 на ноду) на диске иногда превышает cluster.publish.timeout (Rolling upgrade problem from 6.8 to 7.1.1)
Собственно этот механизм, судя по документации, ввели в 7-ке
https://www.elastic.co/guide/en/elasticsearch/reference/7.4/cluster-state-publishing.html

У вас ноду залипают не только на state publishing, но и не очень легких запросов вроде internal:coordination/fault_detection/follower_check. Другими словами, некоторые ноды перестают отвечать на любые запросы по 15-40 секунд. Отсюда и все проблемы. Почему это происходит, я сказать затрудняюсь. Может VM глючит, может сеть. Когда такие проблемы происходит, вы можете попробовать на машину залогиниться и посмотреть - а машина то сама отзывается, или все остальное тоже тормозит.

Да, логинился в это время на проблемную ноду - ничего не тормозит. Всё в нормальном режиме: сеть не пропадала, диск и процессор не нагружены

Пока что подкрутил так:

cluster.join.timeout: 180s
cluster.publish.timeout: 180s
cluster.follower_lag.timeout: 180s

Но ещё заметил, что бывает часто когда нода отваливается от мастера и в вечном цикле подключается и сразу же отключается пока не перезагрузишь её

Действительно, одна нода отваливается по internal:coordination/fault_detection/follower_check

Какие можно включить trace в логировании чтобы посмотреть более детально?
Параллельно смотрим на железо, но предварительно там всё хорошо и сеть не пропадает в это время

У Вас для этого кластера мониторинг настроен?

Мониторинг через Zabbix и ещё снимаем раз в минуту статистику по Heap Size и Open descriptors

Интересно, что после того как мастер отключил ноду по таймауту, то чуть позже приходят запоздалые ответы на респонсы (лог с мастера):

[2019-10-15T06:40:51,152][INFO ][o.e.c.s.MasterService ] [node-01] node-left[{node-00}{A9AdXLb5QA-ZMcicCn26OQ}{zkM7E5SdSmG6MdvxLMPiRQ}{10.1.3.110}{10.1.3.110:9300}{dilm}{ml.machine_memory=134928560128, ml.max_open_jobs=20, xpack.installed=true} followers check retry count exceeded], term: 24, version: 110637, reason: removed {{node-00}{A9AdXLb5QA-ZMcicCn26OQ}{zkM7E5SdSmG6MdvxLMPiRQ}{10.1.3.110}{10.1.3.110:9300}{dilm}{ml.machine_memory=134928560128, ml.max_open_jobs=20, xpack.installed=true},} [2019-10-15T06:40:53,929][WARN ][o.e.t.TransportService ] [node-01] Received response for a request that has timed out, sent [38172ms] ago, timed out [28069ms] ago, action [internal:coordination/fault_detection/follower_check], node [{node-00}{A9AdXLb5QA-ZMcicCn26OQ}{zkM7E5SdSmG6MdvxLMPiRQ}{10.1.3.110}{10.1.3.110:9300}{dilm}{ml.machine_memory=134928560128, ml.max_open_jobs=20, xpack.installed=true}], id [8400909] [2019-10-15T06:40:53,997][WARN ][o.e.t.TransportService ] [node-01] Received response for a request that has timed out, sent [27268ms] ago, timed out [17312ms] ago, action [internal:coordination/fault_detection/follower_check], node [{node-00}{A9AdXLb5QA-ZMcicCn26OQ}{zkM7E5SdSmG6MdvxLMPiRQ}{10.1.3.110}{10.1.3.110:9300}{dilm}{ml.machine_memory=134928560128, ml.max_open_jobs=20, xpack.installed=true}], id [8403538] [2019-10-15T06:40:54,000][WARN ][o.e.t.TransportService ] [node-01] Received response for a request that has timed out, sent [16311ms] ago, timed out [6340ms] ago, action [internal:coordination/fault_detection/follower_check], node [{node-00}{A9AdXLb5QA-ZMcicCn26OQ}{zkM7E5SdSmG6MdvxLMPiRQ}{10.1.3.110}{10.1.3.110:9300}{dilm}{ml.machine_memory=134928560128, ml.max_open_jobs=20, xpack.installed=true}], id [8405154]

Вот история Heap Size по нодам(инцидент произошел в 6:40)