Восстановление метаданных
В этом разделе описывается, как восстановить метаданные в ваших cluster Selena, когда узлы FE сталкиваются с различными исключениями.
Как правило, прибегать к восстановлению метаданных необходимо только при возникновении одной из следующих проблем:
- FE не удаётся перезапустить
- FE не может предоставлять сервисы
- В осстановление метаданных на новом узле FE из резервной копии
Проверьте возникшую проблему, следуйте решению, предоставленному в соответствующем разделе, и выполните рекомендуемые действия.
FE не удаётся перезапустить
Узлы FE могут не перезапускаться, если метаданные повреждены или несовместимы с cluster после отката версии.
Несовместимость метаданных после отката
При понижении версии cluster Selena узлы FE могут не перезапускаться, если метаданные несовместимы с теми, что были до понижения версии.
Вы можете определить эту проблему, если столкнулись со следующим исключением при понижении версии cluster:
UNKNOWN Operation Type xxx
Выполните следующие шаги для восстановления метаданных и запуска FE:
-
Остановите все узлы FE.
-
Сделайте резервную копию директорий метаданных
meta_dirвсех узлов FE. -
Добавьте конфигурацию
metadata_ignore_unknown_operation_type = trueв конфигурационные файлы fe.conf всех узлов FE. -
Запустите все узлы FE и проверьте целостность ваших данных и метаданных.
-
Если данные и метаданные целы, выполните следующую команду для создания файла образа метаданных:
ALTER SYSTEM CREATE IMAGE; -
После того как новый файл образа будет передан в директорию meta/image всех узлов FE, вы можете удалить конфигурацию
metadata_ignore_unknown_operation_type= trueиз всех конфигурационных файлов FE и перезапустить узлы FE.
Повреждение метаданных
Повреждение метаданных BDBJE и метаданных Selena приводит к сбоям при перезапуске.
Повреждение метаданных BDBJE
Ошибка VLSN
Вы можете определить ошибку VLSN по следующему сообщению:
recoveryTracker should overlap or follow on disk last VLSN of 6,684,650 recoveryFirst= 6,684,652 UNEXPECTED_STATE_FATAL: Unexpected internal state, unable to continue. Environment is invalid and must be closed.
Выполните следующие шаги для исправления этой проблемы:
-
Очистите директорию метаданных
meta_dirузла FE, который выдаёт это исключение. -
Перезапустите узел FE, используя Leader FE в качестве helper.
# Замените <leader_ip> на IP-адрес (priority_networks)
# узла Leader FE, а <leader_edit_log_port> (по умолчанию: 9010) на
# edit_log_port узла Leader FE.
./fe/bin/start_fe.sh --helper <leader_ip>:<leader_edit_log_port> --daemon
- Эта ошибка исправлена в Selena v1.5.2. Вы можете избежать этой проблемы, обновив cluster до версии v1.5.2 или более поздней.
- Это решение не применимо, если более половины узлов FE столкнулись с этой проблемой. Вы должны следовать инструкциям, предоставленным в разделе Крайние меры, чтобы исправить проблему.
RollbackException
Вы можете определить эту проблему по следующему сообщению об ошибке:
must rollback 1 total commits(1 of which were durable) to the earliest point indicated by transaction id=-14752149 time=2022-01-12 14:36:28.21 vlsn=28,069,415 lsn=0x1174/0x16e durable=false in order to rejoin the replication group. All existing ReplicatedEnvironment handles must be closed and reinstantiated. Log files were truncated to file 0x4467, offset 0x269, vlsn 28,069,413 HARD_RECOVERY: Rolled back past transaction commit or abort. Must run recovery by re-opening Environment handles Environment is invalid and must be closed.
Эта проблема возникает, когда Leader FE записывает метаданные BDBJE, но не успевает синхронизировать их с Follower FE до зависания. После перезапуска бывший Leader становится Follower, что приводит к повреждению метаданных.
Для решения этой проблемы достаточно перезапустить этот узел ещё раз, чтобы удалить повреждённые метаданные.
ReplicaWriteException
Вы можете определить эту проблему по ключевому слову removeReplicaDb в журнале FE fe.log.
Caused by: com.sleepycat.je.rep.ReplicaWriteException: (JE 18.3.16) Problem closing transaction 25000090. The current state is:REPLICA. The node transitioned to this state at:Fri Feb 23 01:31:00 UTC 2024 Problem seen replaying entry NameLN_TX/14 vlsn=1,902,818,939 isReplicated="1" txn=-953505106 dbop=REMOVE Originally thrown by HA thread: REPLICA 10.233.132.23_9010_1684154162022(6)
at com.sleepycat.je.rep.txn.ReadonlyTxn.disallowReplicaWrite(ReadonlyTxn.java:114) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.dbi.DbTree.checkReplicaWrite(DbTree.java:880) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.dbi.DbTree.doCreateDb(DbTree.java:579) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.dbi.DbTree.createInternalDb(DbTree.java:507) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.cleaner.ExtinctionScanner.openDb(ExtinctionScanner.java:357) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.cleaner.ExtinctionScanner.prepareForDbExtinction(ExtinctionScanner.java:1703) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.dbi.DbTree.doRemoveDb(DbTree.java:1208) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.dbi.DbTree.removeReplicaDb(DbTree.java:1261) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.node.Replay.applyNameLN(Replay.java:996) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.node.Replay.replayEntry(Replay.java:722) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.node.Replica$ReplayThread.run(Replica.java:1225) ~[selena-bdb-je-18.3.16.jar:?]
Эта проблема возникает, когда версия BDBJE неисправного узла FE (v18.3.*) не совпадает с версией Leader FE (v7.3.7).
Выполните следующие шаги для исправления этой проблемы:
-
Удалите неисправный узел Follower или Observer.
-- Для удаления узла Follower замените <follower_host> на IP-адрес (priority_networks)
-- узла Follower, а <follower_edit_log_port> (по умолчанию: 9010) на
-- edit_log_port узла Follower.
ALTER SYSTEM DROP FOLLOWER "<follower_host>:<follower_edit_log_port>";
-- Для удаления узла Observer замените <observer_host> на IP-адрес (priority_networks)
-- узла Observer, а <observer_edit_log_port> (по умолчанию: 9010) на
-- edit_log_port узла Observer.
ALTER SYSTEM DROP OBSERVER "<observer_host>:<observer_edit_log_port>"; -
Добавьте неисправный узел обратно в cluster.
-- Добавить узел Follower:
ALTER SYSTEM ADD FOLLOWER "<follower_host>:<follower_edit_log_port>";
-- Добавить узел Observer:
ALTER SYSTEM ADD OBSERVER "<observer_host>:<observer_edit_log_port>"; -
Очистите директорию метаданных
meta_dirнеисправного узла. -
Перезапустите неисправный узел, используя Leader FE в качестве helper.
# Замените <leader_ip> на IP-адрес (priority_networks)
# узла Leader FE, а <leader_edit_log_port> (по умолчанию: 9010) на
# edit_log_port узла Leader FE.
./fe/bin/start_fe.sh --helper <leader_ip>:<leader_edit_log_port> --daemon -
После восстановления неисправного узла до здорового состояния вам необходимо обновить пакеты BDBJE в вашем cluster до selena-bdb-je-18.3.16.jar (или обновить cluster Selena до версии v1.5.2 или более поздней), следуя порядку: сначала Follower, затем Leader.
InsufficientLogException
Вы можете определить эту проблему по следующему сообщению об ошибке:
xxx INSUFFICIENT_LOG: Log files at this node are obsolete. Environment is invalid and must be closed.
Эта проблема возникает, когда узлу Follower требуется полная синхронизация метаданных. Это может произойти в одной из следующих ситуаций:
- Метаданные на узле Follower отстают от метаданных узла Leader, который уже выполнил CheckPoint метаданных. Узел Follower не может выполнить инкрементное обновление метаданных, поэтому требуется полная синхронизация метаданных.
- Бывший узел Leader записывает и выполняет checkpoint своих метаданных, но не успевает синхронизировать их с узлами Follower FE до зависания. После перезапуска он становится узлом Follower. С повреждёнными метаданными, для которых выполнен checkpoint, узел Follower не может выполнить инкрементное удаление своих метаданных, поэтому требуется полная синхронизация метаданных.
Обратите внимание, что это исключение будет выброшено при добавлении нового узла Follower в cluster. В этом случае никаких действий предпринимать не нужно. Если это исключение выбрасывается для существующего узла Follower или узла Leader, достаточно перезапустить узел.
HANDSHAKE_ERROR: Error during the handshake between two nodes
Вы можете определить эту проблему по следующему сообщению об ошибке:
2023-11-13 21:51:55,271 WARN (replayer|82) [BDBJournalCursor.wrapDatabaseException():97] failed to get DB names for 1 times!Got EnvironmentFailureExce
com.sleepycat.je.EnvironmentFailureException: (JE 18.3.16) Environment must be closed, caused by: com.sleepycat.je.EnvironmentFailureException: Environment invalid because of previous exception: (JE 18.3.16) 10.26.5.115_9010_1697071897979(1):/data1/meta/bdb A replica with the name: 10.26.5.115_9010_1697071897979(1) is already active with the Feeder:null HANDSHAKE_ERROR: Error during the handshake between two nodes. Some validity or compatibility check failed, preventing further communication between the nodes. Environment is invalid and must be closed.
at com.sleepycat.je.EnvironmentFailureException.wrapSelf(EnvironmentFailureException.java:230) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.dbi.EnvironmentImpl.checkIfInvalid(EnvironmentImpl.java:1835) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.dbi.EnvironmentImpl.checkOpen(EnvironmentImpl.java:1844) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.Environment.checkOpen(Environment.java:2697) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.Environment.getDatabaseNames(Environment.java:2455) ~[selena-bdb-je-18.3.16.jar:?]
at com.selena.journal.bdbje.BDBEnvironment.getDatabaseNamesWithPrefix(BDBEnvironment.java:478) ~[selena-fe.jar:?]
at com.selena.journal.bdbje.BDBJournalCursor.refresh(BDBJournalCursor.java:177) ~[selena-fe.jar:?]
at com.selena.server.GlobalStateMgr$5.runOneCycle(GlobalStateMgr.java:2148) ~[selena-fe.jar:?]
at com.selena.common.util.Daemon.run(Daemon.java:115) ~[selena-fe.jar:?]
at com.selena.server.GlobalStateMgr$5.run(GlobalStateMgr.java:2216) ~[selena-fe.jar:?]
Caused by: com.sleepycat.je.EnvironmentFailureException: Environment invalid because of previous exception: (JE 18.3.16) 10.26.5.115_9010_1697071897979(1):/data1/meta/bdb A replica with the name: 10.26.5.115_9010_1697071897979(1) is already active with the Feeder:null HANDSHAKE_ERROR: Error during the handshake between two nodes. Some validity or compatibility check failed, preventing further communication between the nodes. Environment is invalid and must be closed. Originally thrown by HA thread: UNKNOWN 10.26.5.115_9010_1697071897979(1) Originally thrown by HA thread: UNKNOWN 10.26.5.115_9010_1697071897979(1)
at com.sleepycat.je.rep.stream.ReplicaFeederHandshake.negotiateProtocol(ReplicaFeederHandshake.java:198) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.stream.ReplicaFeederHandshake.execute(ReplicaFeederHandshake.java:250) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.node.Replica.initReplicaLoop(Replica.java:709) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.node.Replica.runReplicaLoopInternal(Replica.java:485) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.node.Replica.runReplicaLoop(Replica.java:412) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.node.RepNode.run(RepNode.java:1869) ~[selena-bdb-je-18.3.16.jar:?]
Эта проблема возникает, когда бывший узел Leader зависает и снова становится активным, в то время как выжившие узлы Follower пытаются выбрать нового Leader. Узлы Follower попытаются установить новое соединение с бывшим узлом Leader. Однако узел Leader отклонит запрос на соединение, потому что старое соединение всё ещё существует. После отклонения запроса узел Follower установит окружение как недействительное и выбросит это исключение.
Для решения этой проблемы вы можете либо увеличить размер JVM heap, либо использовать алгоритм G1 GC.
DatabaseNotFoundException
Вы можете определить эту проблему по следующему сообщению об ошибке:
2024-01-05 12:47:21,087 INFO (main|1) [BDBEnvironment.ensureHelperInLocal():340] skip check local environment because helper node and local node are identical.
2024-01-05 12:47:21,339 ERROR (MASTER 172.17.0.1_9112_1704430041062(-1)|1) [SelenaFE.start():186] SelenaFE start failed
com.sleepycat.je.DatabaseNotFoundException: (JE 18.3.16) _jeRepGroupDB
at com.sleepycat.je.rep.impl.RepImpl.openGroupDb(RepImpl.java:1974) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.RepImpl.getGroupDb(RepImpl.java:1912) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.RepGroupDB.reinitFirstNode(RepGroupDB.java:1439) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.node.RepNode.reinitSelfElect(RepNode.java:1686) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.node.RepNode.startup(RepNode.java:874) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.node.RepNode.joinGroup(RepNode.java:2153) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.RepImpl.joinGroup(RepImpl.java:618) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.ReplicatedEnvironment.joinGroup(ReplicatedEnvironment.java:558) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.ReplicatedEnvironment.<init>(ReplicatedEnvironment.java:619) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.ReplicatedEnvironment.<init>(ReplicatedEnvironment.java:464) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.ReplicatedEnvironment.<init>(ReplicatedEnvironment.java:538) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.util.DbResetRepGroup.reset(DbResetRepGroup.java:262) ~[selena-bdb-je-18.3.16.jar:?]
at com.selena.journal.bdbje.BDBEnvironment.initConfigs(BDBEnvironment.java:188) ~[selena-fe.jar:?]
at com.selena.journal.bdbje.BDBEnvironment.setup(BDBEnvironment.java:174) ~[selena-fe.jar:?]
at com.selena.journal.bdbje.BDBEnvironment.initBDBEnvironment(BDBEnvironment.java:153) ~[selena-fe.jar:?]
at com.selena.journal.JournalFactory.create(JournalFactory.java:31) ~[selena-fe.jar:?]
at com.selena.server.GlobalStateMgr.initJournal(GlobalStateMgr.java:1201) ~[selena-fe.jar:?]
at com.selena.server.GlobalStateMgr.initialize(GlobalStateMgr.java:1150) ~[selena-fe.jar:?]
at com.selena.SelenaFE.start(SelenaFE.java:129) ~[selena-fe.jar:?]
at com.selena.SelenaFE.main(SelenaFE.java:83) ~[selena-fe.jar:?]
Эта проблема возникает, когда вы добавляете конфигурацию metadata_failure_recovery = true в конфигурационный файл FE fe.conf.
Для решения этой проблемы необходимо удалить конфигурацию и перезапустить узел.
Повреждение метаданных Selena
Вы можете определить проблему повреждения метаданных Selena по одному из следующих сообщений об ошибке:
failed to load journal type xxx
Или
catch exception when replaying
Перед тем как приступить к восстановлению метаданных, следуя приведённому ниже решению, настоятельно рекомендуется обратиться за помощью к техническим экспертам сообщества Selena, поскольку это решение может привести к потере данных.
Выполните следующие шаги для исправления этой проблемы:
Игнорирование ошибочного Journal ID (предпочтительно)
-
Остановите все узлы FE.
-
Сделайте резервную копию директорий метаданных всех узлов FE.
-
Найдите ошибочный journal ID в журналах.
xxxв следующем журнале представляет ошибочный journal ID.got interrupt exception or inconsistent exception when replay journal xxx, will exit -
Добавьте следующую конфигурацию во все файлы fe.conf и запустите узлы FE.
metadata_journal_skip_bad_journal_ids=xxx -
Если запуск снова завершится неудачей, определите новый неудачный journal ID через шаг 3, добавьте его в fe.conf и перезапустите узлы с предыдущими конфигурациями без изменений.
metadata_journal_skip_bad_journal_ids=xxx,yyy -
Если система всё ещё не запускается после вышеуказанных шагов, или если слишком много неудачных journal ID, перейдите к режиму восстановления.
Режим восстановления
-
Остановите все узлы FE.
-
Сделайте резервную копию директорий метаданных
meta_dirвсех узлов FE. -
Добавьте конфигурацию
metadata_enable_recovery_mode = trueв конфигурационные файлы fe.conf всех узлов FE. Обратите внимание, что загрузка данных запрещена в этом режиме. -
Запустите все узлы FE и выполните запросы к таблицам в cluster, чтобы проверить целостность ваших данных.
Необходимо дождаться завершения восстановления метаданных, если при запросе этих таблиц возвращается следующая ошибка:
ERROR 1064 (HY000): capture_consistent_versions error: version already been compacted.Вы можете выполнить следующую команду с узла Leader FE для просмотра прогресса восстановления метаданных:
SHOW PROC '/meta_recovery';Эта команда покажет partition, которые не удалось восстановить. Вы можете следовать возвращённым рекомендациям для восстановления partition. Если ничего не возвращается, это означает успешное восстановление.
-
Если данные и метаданные целы, выполните следующую команду для создания файла образа метаданных:
ALTER SYSTEM CREATE IMAGE; -
После того как новый файл образа будет передан в директорию meta/image всех узлов FE, вы можете удалить конфигурацию
metadata_enable_recovery_mode = trueиз всех конфигурационных файлов FE и перезапустить узлы FE.
FE не может предоставлять сервисы
FE не будет предоставлять сервисы, когда узлы Follower FE не могут выполнить выборы Leader. При возникновении этой проблемы вы можете обнаружить повторяющуюся запись в журнале:
wait globalStateMgr to be ready. FE type: INIT. is ready: false
Различные исключения могут вызвать эту проблему. Настоятельно рекомендуется устранять проблему поэтапно, следуя разделам ниже. Применение неподходящих решений усугубит проблему и, вероятно, приведёт к потере данных.
1. Большинство узлов Follower не работают
Если большинство узлов Follower не работают, группа FE не будет предоставлять сервисы. Здесь «большинство» означает 1 + (количество узлов Follower/2). Обратите внимание, что узел Leader FE сам является Follower, но узлы Observer не являются Follower.
-
Вы можете определить роль каждого узла FE из файла fe/meta/image/ROLE:
cat fe/meta/image/ROLE
#Fri Jan 19 20:03:14 CST 2024
role=FOLLOWER
hostType=IP
name=172.26.92.154_9312_1705568349984 -
Вы можете просмотреть общее количество узлов Follower из журнала BDBJE:
grep "Current group size" fe/meta/bdb/je.info.0
# Пример вывода показывает, что в cluster три узла Follower.
2024-01-24 08:21:44.754 UTC INFO [172.26.92.139_29917_1698226672727] Current group size: 3
Для решения этой проблемы необходимо запустить все узлы Follower в cluster. Если их невозможно перезапустить, обратитесь к разделу Крайние меры.
2. IP-адрес узла изменился
Если priority_networks узла не настроен, узел FE случайным образом выберет доступный IP-адрес при перезапуске. Если IP-адрес, записанный в метаданных BDBJE, отличается от того, который используется для запуска узла, FE не будет предоставлять сервисы.
-
Вы можете просмотреть IP-адрес, записанный в метаданных BDBJE, из файла fe/meta/image/ROLE:
cat fe/meta/image/ROLE
#Fri Jan 19 20:03:14 CST 2024
role=FOLLOWER
hostType=IP
name=172.26.92.154_9312_1705568349984Значение
172.26.92.154перед первым подчёркиванием — это IP-адрес, записанный в метаданных BDBJE. -
Вы можете просмотреть IP-адрес, используемый для запуска узла, из журнала FE:
grep "IP:" fe/log/fe.log
2024-02-06 14:33:58,211 INFO (main|1) [FrontendOptions.initAddrUseIp():249] Use IP init local addr, IP: /172.17.0.1
2024-02-06 14:34:27,689 INFO (main|1) [FrontendOptions.initAddrUseIp():249] Use IP init local addr, IP: /172.17.0.1
Для решения этой проблемы необходимо установить priority_networks узла в конфигурационном файле FE fe.conf на IP-адрес, записанный в fe/meta/image/ROLE, и перезапустить узел.
3. Системные часы между узлами не синхронизированы
Вы можете определить эту проблему по следующему сообщению об ошибке из fe.out, fe.log или fe/meta//bdb/je.info.0:
com.sleepycat.je.EnvironmentFailureException: (JE 7.3.7) Environment must be closed, caused by: com.sleepycat.je.EnvironmentFailureException: Environment invalid because of previous exception: (JE 7.3.7) 172.26.92.139_29917_1631006307557(2180):xxx Clock delta: 11020 ms. between Feeder: 172.26.92.154_29917_1641969377236 and this Replica exceeds max permissible delta: 5000 ms. HANDSHAKE_ERROR: Error during the handshake between two nodes. Some validity or compatibility check failed, preventing further communication between the nodes. Environment is invalid and must be closed. fetchRoot of 0x1278/0x1fcbb8 state=0 expires=never
Необходимо синхронизировать системные часы на всех узлах.
4. Недостаточно свободного места на диске
После обновления Selena до версии v1.5.2 или более поздней, или обновления BDBJE до версии v18 или более поздней, узел может не перезапуститься, если свободное пространство на диске, где хранится meta_dir, составляет менее 5 ГБ.
Вы можете просмотреть версию BDBJE из пакета .jar в директории fe/lib.
Для решения этой проблемы вы можете расширить диск или выделить отдельный диск большей ёмкости для метаданных FE.
5. edit_log_port изменён
Если edit_log_port, записанный в метаданных BDBJE, отличается от того, который настроен в fe.conf, FE не будет предоставлять сервисы.
Вы можете просмотреть edit_log_port, записанный в метаданных BDBJE, из файла fe/meta/image/ROLE:
cat fe/meta/image/ROLE
#Fri Jan 19 20:03:14 CST 2024
role=FOLLOWER
hostType=IP
name=172.26.92.154_9312_1705568349984
Значение 9312 перед вторым подчёркиванием — это edit_log_port, записанный в метаданных BDBJE.
Для решения этой проблемы необходимо установить edit_log_port узла в конфигурационном файле FE fe.conf на edit_log_port, записанный в fe/meta/image/ROLE, и перезапустить узел.
6. Недостаточный размер JVM heap
Вы можете просмотреть использование памяти JVM с помощью команды jstat:
jstat -gcutil pid 1000 1000
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 100.00 27.78 95.45 97.77 94.45 24 0.226 1 0.065 0.291
0.00 100.00 44.44 95.45 97.77 94.45 24 0.226 1 0.065 0.291
0.00 100.00 55.56 95.45 97.77 94.45 24 0.226 1 0.065 0.291
0.00 100.00 72.22 95.45 97.77 94.45 24 0.226 1 0.065 0.291
0.00 100.00 88.89 95.45 97.77 94.45 24 0.226 1 0.065 0.291
0.00 100.00 5.26 98.88 97.80 94.45 25 0.231 1 0.065 0.297
0.00 100.00 21.05 98.88 97.80 94.45 25 0.231 1 0.065 0.297
0.00 100.00 31.58 98.88 97.80 94.45 25 0.231 1 0.065 0.297
0.00 100.00 47.37 98.88 97.80 94.45 25 0.231 1 0.065 0.297
0.00 100.00 63.16 98.88 97.80 94.45 25 0.231 1 0.065 0.297
0.00 100.00 73.68 98.88 97.80 94.45 25 0.231 1 0.065 0.297
Если проценты в поле O остаются высокими, это указывает на недостаточный размер JVM heap.
Для решения этой проблемы необходимо увеличить размер JVM heap.
7. Latch timeout. com.sleepycat.je.log.LogbufferPool_FullLatch
Вы можете определить эту проблему по следующему сообщению об ошибке:
Environment invalid because of previous exception: xxx Latch timeout. com.sleepycat.je.log.LogbufferPool_FullLatch xxx'
at com.sleepycat.je.EnvironmentFailureException.unexpectedState(EnvironmentFailureException.java:459)
at com.sleepycat.je.latch.LatchSupport.handleTimeout(LatchSupport.java:211)
at com.sleepycat.je.latch.LatchWithStatsImpl.acquireExclusive(LatchWithStatsImpl.java:87)
at com.sleepycat.je.log.LogBufferPool.bumpCurrent(LogBufferPool.java:527)
at com.sleepycat.je.log.LogManager.flushInternal(LogManager.java:1373)
at com.sleepycat.je.log.LogManager.flushNoSync(LogManager.java:1337)
at com.sleepycat.je.log.LogFlusher$FlushTask.run(LogFlusher.java:232)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
Эта проблема возникает при чрезмерной нагрузке на локальный диск узла FE.
Для решения этой проблемы вы можете выделить отдельный диск для метаданных FE или заменить диск на более производительный.
8. InsufficientReplicasException
Вы можете определить эту проблему по следующему сообщению об ошибке:
com.sleepycat.je.rep.InsufficientReplicasException: (JE 7.3.7) Commit policy: SIMPLE_MAJORITY required 1 replica. But none were active with this master.
Эта проблема возникает, когда узел Leader FE или узлы Follower FE используют чрезмерные ресурсы памяти, что приводит к Full GC.
Для решения этой проблемы вы можете либо увеличить размер JVM heap, либо использовать алгоритм G1 GC.
9. UnknownMasterException
Вы можете определить эту проблему по следующему сообщению об ошибке:
com.sleepycat.je.rep.UnknownMasterException: (JE 18.3.16) Could not determine master from helpers at:[/xxx.xxx.xxx.xxx:9010, /xxx.xxx.xxx.xxx:9010]
at com.sleepycat.je.rep.elections.Learner.findMaster(Learner.java:443) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.util.ReplicationGroupAdmin.getMasterSocket(ReplicationGroupAdmin.java:186) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.util.ReplicationGroupAdmin.doMessageExchange(ReplicationGroupAdmin.java:607) ~[selena-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.util.ReplicationGroupAdmin.getGroup(ReplicationGroupAdmin.java:406) ~[selena-bdb-je-18.3.16.jar:?]
at com.selena.ha.BDBHA.getElectableNodes(BDBHA.java:178) ~[selena-fe.jar:?]
at com.selena.common.proc.FrontendsProcNode.getFrontendsInfo(FrontendsProcNode.java:96) ~[selena-fe.jar:?]
at com.selena.common.proc.FrontendsProcNode.fetchResult(FrontendsProcNode.java:80) ~[selena-fe.jar:?]
at com.selena.sql.ast.ShowProcStmt.getMetaData(ShowProcStmt.java:74) ~[selena-fe.jar:?]
at com.selena.qe.ShowExecutor.handleShowProc(ShowExecutor.java:872) ~[selena-fe.jar:?]
at com.selena.qe.ShowExecutor.execute(ShowExecutor.java:286) ~[selena-fe.jar:?]
at com.selena.qe.StmtExecutor.handleShow(StmtExecutor.java:1574) ~[selena-fe.jar:?]
at com.selena.qe.StmtExecutor.execute(StmtExecutor.java:688) ~[selena-fe.jar:?]
at com.selena.qe.ConnectProcessor.handleQuery(ConnectProcessor.java:336) ~[selena-fe.jar:?]
at com.selena.qe.ConnectProcessor.dispatch(ConnectProcessor.java:530) ~[selena-fe.jar:?]
at com.selena.qe.ConnectProcessor.processOnce(ConnectProcessor.java:838) ~[selena-fe.jar:?]
at com.selena.mysql.nio.ReadListener.lambda$handleEvent$0(ReadListener.java:69) ~[selena-fe.jar:?]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[?:?]
at java.lang.Thread.run(Thread.java:829) ~[?:?]
При выполнении SHOW FRONTENDS, если узел Leader FE не может быть найден, может быть несколько причин:
- Если наблюдается, что более половины узлов FE проходят Full GC, и продолжительность заметно велика.
- Или если журнал содержит ключевое слово
java.lang.OutOfMemoryError: Java heap space.
Это связано с недостаточным объёмом памяти. Необходимо увеличить выделение памяти JVM.
10. Крайние меры
Вы можете попробовать следующее решение как крайнюю меру только тогда, когда ни одно из предыдущих решений не работает.
Это решение предназначено только для экстремальных случаев, таких как:
- Большинство узлов Follower не могут быть перезапущены.
- Узлы Follower не могут выполнить выборы Leader из-за ошибок BDBJE.
- Исключения, отличные от упомянутых в предыдущих разделах.
Выполните следующие шаги для восстановления метаданных:
-
Остановите все узлы FE.
-
Сделайте резервную копию директорий метаданных
meta_dirвсех узлов FE. -
Выполните следующие команды на всех серверах, на которых размещены узлы FE, чтобы определить узел с самыми последними метаданными.
# Вам необходимо указать точный пакет .jar, который использует узел, в команде,
# так как пакет варьируется в зависимости от версии Selena.
java -jar fe/lib/selena-bdb-je-18.3.16.jar DbPrintLog -h meta/bdb/ -vdПример вывода:
<DbPrintLog>
file 0x3b numRepRecords = 24479 firstVLSN = 1,434,126 lastVLSN = 1,458,604
file 0x3c numRepRecords = 22541 firstVLSN = 1,458,605 lastVLSN = 1,481,145
file 0x3d numRepRecords = 25176 firstVLSN = 1,481,146 lastVLSN = 1,506,321
......
file 0x74 numRepRecords = 26903 firstVLSN = 2,927,458 lastVLSN = 2,954,360
file 0x75 numRepRecords = 26496 firstVLSN = 2,954,361 lastVLSN = 2,980,856
file 0x76 numRepRecords = 18727 firstVLSN = 2,980,857 lastVLSN = 2,999,583
... 0 files at end
First file: 0x3b
Last file: 0x76
</DbPrintLog>Узел с наибольшим значением
lastVLSNимеет самые последние метаданные. -
Найдите роль (Follower или Observer) узла FE с самыми последними метаданными из файла fe/meta/image/ROLE:
cat fe/meta/image/ROLE
#Fri Jan 19 20:03:14 CST 2024
role=FOLLOWER
hostType=IP
name=172.26.92.154_9312_1705568349984Если несколько узлов имеют самые последние метаданные, рекомендуется продолжить с узлом Follower. Если несколько узлов Follower имеют самые последние метаданные, вы можете продолжить с любым из них.
-
Выполните соответствующие операции в зависимо сти от роли узла FE, который вы выбрали на предыдущем шаге.
- Продолжить с узлом Follower
- Продолжить с узлом Observer
Если узел Follower имеет самые последние метаданные, выполните следующие операции:
-
Добавьте следующие конфигурации в fe.conf:
bdbje_reset_election_group = true -
Перезапустите узел и проверьте целостность ваших данных и метаданных.
-
Проверьте, является ли текущий узел FE узлом Leader FE.
SHOW FRONTENDS;- Если поле
Aliveимеет значениеtrue, этот узел FE правильно запущен и добавлен в cluster. - Если поле
Roleимеет значениеLEADER, этот узел FE является узлом Leader FE.
- Если поле
-
Если данные и метаданные целы, и роль узла — Leader, вы можете удалить добавленную ранее конфигурацию и перезапустить узел.
Если узел Observer имеет самые последние метаданные, выполните следующие операции:
-
Измените роль узла FE с
OBSERVERнаFOLLOWERв файле fe/meta/image/ROLE. -
Добавьте следующие конфигурации в fe.conf:
bdbje_reset_election_group = true -
Перезапустите узел и проверьте целостность ваших данных и метаданных.
-
Проверьте, является ли текущий узел FE узлом Leader FE.
SHOW FRONTENDS;- Если поле
Aliveимеет значениеtrue, этот узел FE правильно запущен и добавлен в cluster. - Если поле
Roleимеет значениеLEADER, этот узел FE является узлом Leader FE.
- Если поле
-
Если данные и метаданные целы, и роль узла — Leader, вы можете удалить добавленную ранее конфигурацию. Однако не перезапускайте узел.
-
Добавьте новый узел Follower (на новом сервере) в cluster.
ALTER SYSTEM ADD FOLLOWER "<new_follower_host>:<new_follower_edit_log_port>"; -
Запустите новый узел FE на новом сервере, используя временный Leader FE в качестве helper.
# Замените <leader_ip> на IP-адрес (priority_networks)
# узла Leader FE, а <leader_edit_log_port> (по умолчанию: 9010) на
# edit_log_port узла Leader FE.
./fe/bin/start_fe.sh --helper <leader_ip>:<leader_edit_log_port> --daemon -
После успешного запуска нового узла FE проверьте статус и роли обоих узлов FE:
SHOW FRONTENDS;- Если поле
Aliveимеет значениеtrue, этот узел FE правильно запущен и добавлен в cluster. - Если поле
Roleимеет значениеFOLLOWER, этот узел FE является узлом Follower FE. - Если поле
Roleимеет значениеLEADER, этот узел FE является узлом Leader FE.
- Если поле
-
Если новый Follower успешно работает в cluster, вы можете остановить все узлы.
-
Добавьте следующие конфигурации в fe.conf только нового Follower:
-
Для Selena v1.5.2 и более ранних версий:
metadata_failure_recovery = true -
Для Selena v1.5.2 и более поздних patch-версий, v1.5.2 и более поздних patch-версий, и v1.5.2 и более поздних:
bdbje_reset_election_group = true
-
-
Перезапустите новый узел Follower и проверьте целостность ваших данных и метаданных.
-
Проверьте, является ли текущий узел FE узлом Leader FE.
SHOW FRONTENDS;- Если поле
Aliveимеет значениеtrue, этот узел FE правильно запущен и добавлен в cluster. - Если поле
Roleимеет значениеLEADER, этот узел FE является узлом Leader FE.
- Если поле
-
Если данные и метаданные целы, и роль узла — Leader, вы можете удалить добавленную ранее конфигурацию и перезапустить узел.
-
Очистите директории метаданных
meta_dirузлов FE, которые вы хотите добавить обратно в cluster. -
Запустите новые узлы Follower, используя новый Leader FE в качестве helper.
# Замените <leader_ip> на IP-адрес (priority_networks)
# узла Leader FE, а <leader_edit_log_port> (по умолчанию: 9010) на
# edit_log_port узла Leader FE.
./fe/bin/start_fe.sh --helper <leader_ip>:<leader_edit_log_port> --daemon -
Добавьте узлы Follower обратно в cluster.
ALTER SYSTEM ADD FOLLOWER "<new_follower_host>:<new_follower_edit_log_port>";
После того как все узлы добавлены обратно в cluster, метаданные успешно восстановлены.
Восстановление метаданных на новом узле FE из резервной копии
Выполните следующие шаги, если вы хотите запустить новый узел FE с резервной копией метаданных:
-
Скопируйте резервную копию директории метаданных
meta_dirна новый узел FE. -
В конфигурационном файле узла FE установите
bdbje_reset_election_groupв значениеtrue.bdbje_reset_election_group = true -
Запустите узел FE.
./fe/bin/start_fe.sh -
Проверьте, является ли текущий узел FE узлом Leader FE.
SHOW FRONTENDS;Если поле
Roleимеет значениеLEADER, этот узел FE является узлом Leader FE. Убедитесь, что его IP-адрес соответствует адресу текущего узла FE. -
Если данные и метаданные целы, и роль узла — Leader, вы должны удалить конфигурацию
bdbje_reset_election_groupи перезапустить узел. -
Теперь вы успешно запустили новый узел Leader FE с резервной копией метаданных. Вы можете добавить новые узлы Follower, используя новый Leader FE в качестве helper.
# Замените <leader_ip> на IP-адрес (priority_networks)
# узла Leader FE, а <leader_edit_log_port> (по умолчанию: 9010) на
# edit_log_port узла Leader FE.
./fe/bin/start_fe.sh --helper <leader_ip>:<leader_edit_log_port> --daemon
Конфигурации, связанные с восстановлением метаданных
Вы должны удалить следующие конфигурации после завершения восстановления метаданных.