Аварийное переключение не срабатывает при сбое активного имени узла
Я использую Apache Hadoop-2.7.1 на кластере, который состоит из трех узлов
nn1 главное имя узла
nn2 (узел второго имени)
dn1 (узел данных)
я настроил высокую доступность, а nameservice и zookeeper работают на всех трех узлах
и запускается на nn2 в качестве лидера
Прежде всего я должен отметить, что nn1 активен, а nn2 находится в режиме ожидания
когда я убью имя узла на nn1
, nn2 становится активным, поэтому происходит автоматическое переключение при сбое
но со следующим сценарием (который я применяю, когда nn1 активен, а nn2 находится в режиме ожидания) и который:
когда я выключаю nn1 (nn1 весь сбой)
nn2 остается в режиме ожидания и не становится активным, поэтому автоматическое переключение не происходит
с заметной ошибкой в логе
Unable to trigger a roll of the active NN(which was nn1 and now it is closed ofcourse)
не должно происходить автоматического переключения при сбое с двумя существующими узлами журнала на nn2 и dn1
а какие могут быть возможные причины?
2 ответа
Моя проблема была решена путем изменения dfs.ha.fencing.methods в hdfs-site.xml
включить не только ssh-фехтование, но и другой метод фехтования
возвращает всегда правда
<name>dfs.ha.fencing.methods</name>
<value>sshfence
shell(/bin/true)
</value>
автоматическое переключение при сбое завершится неудачей, если ограждение завершится неудачно, я указал две опции, вторая ( shell(/bin/true)) всегда возвращает успех. Это сделано для обходных случаев, когда основной компьютер NameNode выходит из строя и метод ssh завершится сбоем, и отказоустойчивость не будет выполнена. Мы хотим избежать этого, поэтому вторым вариантом будет отказоустойчивость в любом случае
вы можете найти подробности здесь https://www.packtpub.com/books/content/setting-namenode-ha
Похоже, это связано с ошибкой в
sshfence
Метод ограждения, идентифицированный как HADOOP-15684, исправлен в 3.0.4, 3.1.2 и 3.2.0, а также перенесен в 2.10.0 через HDFS-14397 .