Ответ 1
ZKFailoverController (ZKFC) - это новый компонент, который является клиентом ZooKeeper, который также контролирует и управляет состоянием NameNode. Каждая из машин, которая запускает NameNode, также запускает ZKFC, и что ZKFC отвечает за:
Мониторинг работоспособности - ZKFC периодически запускает свой локальный NameNode с помощью команды проверки работоспособности. Пока NameNode отвечает своевременно со здоровым статусом, ZKFC считает, что node здоров. Если node разбился, заморозился или иным образом попал в нездоровое состояние, монитор здоровья будет отмечать его как нездоровый.
Управление сеансом ZooKeeper - когда локальный NameNode здоров, ZKFC проводит сеанс, открытый в ZooKeeper. Если локальный NameNode активен, он также содержит специальный " блокировка" znode. Этот замок использует поддержку ZooKeeper для узлов ephemeral; если сеанс истекает, блокировка node будет автоматически удалена.
Выбор на основе ZooKeeper - если локальный NameNode здоров, а ZKFC видит, что в настоящее время другой node не содержит блокировку znode, он сам попытается получить блокировку. Если он преуспеет, тогда он " выиграл выборы" и отвечает за запуск отказоустойчивости, чтобы сделать свой локальный NameNode активным.
Посмотрите на этот Apache PDF, который является частью проблемы HDFS-2185 JIRA
Слайд 16 из
http://www.slideshare.net/cloudera/hdfs-update-lipcon-federal-big-data-apache-hadoop-forum
Автоматический процесс восстановления отказов Namenode в Hadoop:
В типичном кластере HA две отдельные машины настроены как NameNodes. В любой момент времени именно одно из имен NameNodes находится в активном состоянии, а другое находится в состоянии ожидания. Active NameNode отвечает за все клиентские операции в кластере, в то время как Standby просто работает как подчиненный, поддерживая достаточное состояние для обеспечения быстрого переключения при необходимости.
Чтобы резервный Namenode сохранял свое состояние синхронизированным с активным Namenode, оба узла взаимодействуют с группой отдельных демонов, называемой JournalNodes (JNs).
Когда любая модификация пространства имен выполняется Active node, она долго регистрирует запись изменения для большинства этих JN. Режим ожидания node считывает эти изменения из JN и применяется к его собственному пространству имен.
В случае перехода на резервный ресурс резервный режим гарантирует, что он прочитал все изменения из JounalNodes, прежде чем продвигать себя в активное состояние. Это гарантирует, что состояние пространства имен будет полностью синхронизировано до возникновения сбоя.
Для кластера HA жизненно важно, чтобы только один из имен был активен одновременно. ZooKeeper был использован, чтобы избежать сценария разделения мозга, чтобы имя node не расходилось из-за отказа.
Слайд 8 из: http://www.slideshare.net/cloudera/hdfs-futures-world2012-widescreen
В резюме: Имя node - это контроллер Daemon и Failover, который является демоном. Если имя node Daemon не работает, контроллер отказоустойчивости Daemon обнаруживает и предпринимает корректирующие действия. Даже если вся машина выходит из строя, сервер ZooKeeper обнаруживает ее и блокировка будет истек, а другое резервное имя node будет выбрано в качестве активного имени node.