Узел в кластере Elasticsearch не может запуститься после смены IP

1. Кластерная среда и описание проблемы

  • Версия кластера: 6.8.X

  • Узлы кластера: 5 узлов (три узла — главные + узлы данных, а два других — независимые узлы данных).

  • Описание проблемы: Из-за конфликтов IP был изменен IP одного сервера, а затем изменена конфигурация пяти серверов и перезапущены.Они могли быть запущены, но не могли подключиться, и сообщалось о различных ошибках в фон.

772c7fbfddf4513d751c71836acccccb1.png

2. Обсуждение

Обсуждение причины смены IP узла: IP-адрес хост-сервера конфликтует с IP-адресом других серверов, поэтому необходимо изменить IP-адрес одного сервера.

Не рекомендуется часто менять IP узлов кластера по следующим причинам:

Частая замена IP-адресов узлов кластера Elasticsearch может привести к снижению стабильности кластера, трудностям в обнаружении узлов, сложному управлению конфигурацией, проблемам репликации и восстановления данных, проблемам конфигурации балансировки нагрузки и потенциальным рискам безопасности. Поэтому для поддержания стабильности и безопасности кластера мы обычно не рекомендуем часто менять IP-адреса узлов.

Есть еще одна проблема, которую следует учитывать: если размер кластера больше и количество узлов больше, время недоступности сервиса, вызванное сменой IP, будет больше.

Так как это версия кластера 6.8.X, необходимо изменить на каждом узле: discovery.zen.ping.unicast.hosts, что означает перезапуск всех кластеров. Следовательно, чем больше узлов, тем дольше будет время восстановления раздачи после перезапуска и тем дольше сервис будет недоступен. Особенно онлайн-бизнес с интенсивным доступом должен быть очень осторожным.

Вышеизложенное является основной предпосылкой познания.

3. Устранение неполадок

Однако вышеупомянутая замена IP-адреса узла стала неизбежным.Следующим шагом является поиск способа изменения IP-адреса и изменения конфигурации каждого узла, а затем поиск способа запуска кластера.

Здесь сначала доработайте идеи по устранению неполадок, чтобы максимально минимизировать проблему. В противном случае логи пяти узлов будут «пестрить».

Идеи расследования, которые я завершил прошлой ночью, следующие:

Начиная с трех основных + узлов данных node1, node2 и node3, почему они не могут сформировать кластер?
Другими словами, узлы данных не присоединяются к кластеру первыми, только узел 1, узел 2 и узел 3 являются тремя узлами, чтобы проверить, могут ли они быть сформированы в кластер и выборы мастера прошли успешно?

Основная идея: найти и определить причину, по которой текущий узел не может сформировать кластер?

Процесс основного исследования записывается и распределяется следующим образом:

3.1 Запускайте узлы один за другим и не отпускайте хитрые логи.

Обнаружена вчерашняя проблема с ошибкой конфигурации ip.

036cda22dd12d0bbde49ead34449073b.png
[2023-07-15T23:46:02,908][WARN ][o.e.d.z.UnicastZenPing   ] [node-1] failed to resolve host [10.14.2·30.41:9300]
java.net.UnknownHostException: 10.14.2¡¤30.
at java.net.Inet6AddressImpl.lookupAllHostAddr(Native Method) ~[?:1.8.0_291]
at java.net.InetAddress$2.lookupAllHostAddr(InetAddress.java:929) ~[?:1.8.0_291]
at java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1324) ~[?:1.8.0_291]
at java.net.InetAddress.getAllByName0(InetAddress.java:1277) ~[?:1.8.0_291]
at java.net.InetAddress.getAllByName(InetAddress.java:1193) ~[?:1.8.0_291]
at java.net.InetAddress.getAllByName(InetAddress.java:1127) ~[?:1.8.0_291]

Это неправильная операция по изменению IP-адреса, и его необходимо изменить, иначе будет много сообщений об ошибках. IP-адрес неправильный, поэтому нет возможности поговорить об этом позже.

3.2 Когда вспомогательные инструменты, такие как головной плагин, недоступны, используйте командную строку, чтобы проверить, присоединяется ли узел к кластеру.

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

Однако наши узлы не могут создавать успешные кластеры, поэтому для устранения неполадок нельзя использовать такие инструменты, как подключаемые модули kibana и head. Однако некоторые оригинальные методы командной строки все же можно использовать.

Суть в том, чтобы проверить, образуют ли узлы кластер, с помощью следующей команды.

GET http://IP:端口/_cat/nodes

Проверьте через инструмент postman, как показано ниже, возникает исключение «master_not_discovered_exception», то есть мастер-узел не может быть найден.

501aea90ff3987823c2a5f694f7fe3f7.png

Сравните и посмотрите на правильную ситуацию.Следующее состоит в том, что два узла сформировали кластер.Значения mdi: главный узел, узел данных и тип принимающего узла.

Младшая версия называется типом узла, а версия 8.X называется ролью узла.

031bc120ea328a4895593c906a0efa5d.png

Вот еще одна деталь, если uuid кластера "_na_", это всего лишь означает, что он запущен, но мастер еще не выбран!

5488480e205c56c7b09623f38c32a57b.png

Если мастер выбран успешно, это должно примерно выглядеть следующим образом (uuid всех узлов согласованы, что очень важно).

dbe5184c78941a08db282e6e434b2383.png

3.3 В среднем звене было много аномалий, и я чуть не сбился с пути.

В следующем журнале я всегда думал, что это проблема с сетью.

Проверил брандмауэр, и команды ping проверяются одна за другой без проблем.fa2b8654c02972b04d60ee3fe6efc3d8.png

org.elasticsearch.transport.ConnectTransportException: [node-1][10.14.XXX.XX:9300] handshake_timeout[30s]
at org.elasticsearch.transport.TransportHandshaker.lambda$sendHandshake$1(TransportHandshaker.java:77) ~[elasticsearch-6.8.12.jar:6.8.12]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:681) [elasticsearch-6.8.12.jar:6.8.12]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_291]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_291]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_291]
[2023-07-16T00:58:53,697][WARN ][o.e.t.TcpTransport       ] [node-2] exception caught on transport layer [Netty4TcpChannel{localAddress=/10.14.XXX.yy:60218, remoteAddress=/10.14.xxx.zz:9300}], closing connection
java.io.IOException: 远程主机强迫关闭了一个现有的连接。
at sun.nio.ch.SocketDispatcher.read0(Native Method) ~[?:?]
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:43) ~[?:?]
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ~[?:?]
at sun.nio.ch.IOUtil.read(IOUtil.java:197) ~[?:?]
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:378) ~[?:?]
at io.netty.buffer.PooledHeapByteBuf.setBytes(PooledHeapByteBuf.java:261) ~[netty-buffer-4.1.32.Final.jar:4.1.32.Final]
at io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1132) ~[netty-buffer-4.1.32.Final.jar:4.1.32.Final]
at io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:347) ~[netty-transport-4.1.32.Final.jar:4.1.32.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148) [netty-transport-4.1.32.Final.jar:4.1.32.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:656) [netty-transport-4.1.32.Final.jar:4.1.32.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysPlain(NioEventLoop.java:556) [netty-transport-4.1.32.Final.jar:4.1.32.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:510) [netty-transport-4.1.32.Final.jar:4.1.32.Final]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:470) [netty-transport-4.1.32.Final.jar:4.1.32.Final]
at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:909) [netty-common-4.1.32.Final.jar:4.1.32.Final]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_291]

Позже я думаю, что узел отключен из-за нехватки памяти! Это должна быть цепная реакция другого узла после того, как один из двух узлов отключится.

  • В течение периода также было обнаружено несоответствие даты каждого узла, и выравнивание согласованности времени выполнялось путем ручного выравнивания времени.

  • Также измените значение discovery.zen.ping_timeout с 3 до 100 с.

discovery.zen.ping_timeout — это параметр в настройках кластера Elasticsearch, который определяет, как долго узел должен ждать ответа ping, прежде чем считать другие узлы «недоступными». Этот параметр очень важен для связи между узлами кластера и стабильности кластера. Если вы установите для discovery.zen.ping_timeout значение 3 секунды (3 с), это означает, что каждый узел будет ждать 3 секунды ответа от другого узла, прежде чем считать его отключенным. Плохие сетевые условия или сильно загруженный кластер Elasticsearch могут вызывать тайм-ауты, заставляя узлы ошибочно думать, что другие узлы отключены. Это может привести к ненужным перевыборам и повторной балансировке узлов, что повлияет на производительность и стабильность кластера.

3.4 Я пытался этого избежать, но это основная причина.

После неоднократных расследований было обнаружено, что основной причиной был следующий журнал, и память переполнилась.

[2023-07-16T00:52:39,878][WARN ][o.e.m.j.JvmGcMonitorService] [node-2] [gc][153] overhead, spent [985ms] collecting in the last [1s]
[2023-07-16T00:52:44,238][INFO ][o.e.m.j.JvmGcMonitorService] [node-2] [gc][154] overhead, spent [1.6s] collecting in the last [4.3s]
[2023-07-16T00:52:44,253][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [node-2] fatal error in thread [elasticsearch[node-2][generic][T#1]], exiting
java.lang.OutOfMemoryError: Java heap space
at org.apache.lucene.util.fst.FST.<init>(FST.java:342) ~[lucene-core-7.7.3.jar:7.7.3 1a0d2a901dfec93676b0fe8be425101ceb754b85 - noble - 2020-04-21 10:31:55]
at org.apache.lucene.util.fst.FST.<init>(FST.java:274) ~[lucene-core-7.7.3.jar:7.7.3 1a0d2a901dfec93676b0fe8be425101ceb754b85 - noble - 2020-04-21 10:31:55]
at org.apache.lucene.codecs.blocktree.FieldReader.<init>(FieldReader.java:91) ~[lucene-core-7.7.3.jar:7.7.3 1a0d2a901dfec93676b0fe8be425101ceb754b85 - noble - 2020-04-21 10:31:55]
at org.apache.lucene.codecs.blocktree.BlockTreeTermsReader.<init>(BlockTreeTermsReader.java:202) ~[lucene-core-7.7.3.jar:7.7.3 1a0d2a901dfec93676b0fe8be425101ceb754b85 - noble - 2020-04-21 10:31:55]
2023-07-16T00:51:59,263][WARN ][o.e.m.j.JvmGcMonitorService] [node-2] [gc][124] overhead, spent [875ms] collecting in the last [1.1s]
[2023-07-16T00:52:00,826][WARN ][o.e.m.j.JvmGcMonitorService] [node-2] [gc][125] overhead, spent [1s] collecting in the last [1.5s]
[2023-07-16T00:52:01,920][WARN ][o.e.m.j.JvmGcMonitorService] [node-2] [gc][126] overhead, spent [938ms] collecting in the last [1s]
[2023-07-16T00:52:03,811][WARN ][o.e.m.j.JvmGcMonitorService] [node-2] [gc][127] overhead, spent [1.1s] collecting in the last [1.8s]
[2023-07-16T00:52:06,639][WARN ][o.e.m.j.JvmGcMonitorService] [node-2] [gc][129] overhead, spent [1s] collecting in the last [1.8s]
[2023-07-16T00:52:08,264][WARN ][o.e.m.j.JvmGcMonitorService] [node-2] [gc][130] overhead, spent [1.2s] collecting in the last [1.6s]
[2023-07-16T00:52:09,468][WARN ][o.e.m.j.JvmGcMonitorService] [node-2] [gc][131] overhead, spent [1s] collecting in the last [1.1s]

Что вызывает это? Установка кучи памяти необоснованна.

Но jvm.options, очевидно, был изменен, и все они являются официальными рекомендуемыми значениями.

Однако при проверке логов я увидел следующие логи.

[node-2] JVM arguments [-Xms1g, -Xmx1g, -XX:+UseConcMarkSweepGC, -XX:CMSInitiatingOccupancyFraction=75

В методе запуска службы я изменил jvm.options на 128 ГБ, но он по-прежнему показывает 1 ГБ, что является корнем проблемы.

b091b6e2eca2a56dfc1eeb5e811ca924.png

256 ГБ оперативной памяти практически не используются.

Позже, после изменения метода запуска elasticsearch.bat, это будет сделано.

ecb912fa186b030a547385971099f55c.png ff4ad526d30d1e4bf898aa44fd7c2b20.png

Далее: при запуске службы Windows конфигурация кластера jvm.options не читала вышеуказанные проблемы с памятью и различные отчеты об ошибках!

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

aaac770f89c59d7bffe1d8e15efeee22.png

4. Резюме

Для подобных проблем нет более быстрой стратегии, и мы можем устранять неполадки только узел за узлом и журнал за журналом. Совокупное исследование вышеуказанных проблем заняло более 6 часов, и только небольшое расследование может найти проблему.

Добро пожаловать, чтобы оставить сообщение для обсуждения и обмена подобными вопросами.

рекомендуемое чтение

  1. Первый релиз во всей сети! Видео о проверке Elasticsearch 8.X от 0 до 1

  2. Список познания методологии Dead Elasticsearch 8.X

  3. Как систематически изучать Elasticsearch?

  4. 2023, сделай что-нибудь

c26ba55461bf7d440dae10d138497f9e.jpeg

Приобретайте больше галантерейных товаров быстрее за более короткое время!

Совершенствуйтесь с более чем 2000 энтузиастов Elastic по всему миру!

e9e2e6e06cb875ec21daa7241b1a7372.gif

В эпоху больших моделей изучайте передовые галантереи на шаг впереди!

Supongo que te gusta

Origin blog.csdn.net/wojiushiwo987/article/details/131777826
Recomendado
Clasificación