3.5、配置自动切换模式
自动切换模式的实现需要下面两个组建的额支持:
(1) Zookeeper实例
需要质数个Zookeeper实例,在本集群我一个启用了3个Zookeeper实例,分别部署在Hadoop-slave02、hadoop-slave03、hadoop-slave04中。
(2) ZKFailoverController(简称“ZKFC”)
ZKFC 是一个 Zookeeper客户端,负责监控和管理 NameNode 的状态,每台运行 NameNode的机器上也会运行一个 ZKFC 进程。
健康状况监控:
ZKFC 周期性地与本地的NameNode 交互,执行一些健康状况监测命令。
Zookeeper session 管理:
如果本地 NameNode 是健康的,则会持有Zookeeper 上一个 znode,如果它是 Active 的,会持有 zookeeper 的仅有的一个特殊 znode,该 znode 类型为 ephemeral,一旦 namenode 挂掉后,会自动消失。
基于 zookeeper 的选举:
如果本地 NameNode 是活的,而没有其他 Namenode持有特殊的 znode,ZKFC 将尝试获取这个 znode,一旦获取成功后,则认为它“赢得了选举”,进而隔离之前的Active namenode,自己转换为新的 Active namenode。其大概结构如下图:
具体配置步骤:
步骤1:关闭集群修改hdfs-site.xml配置文件,增加自动切换选项:
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
步骤2:编辑core-site.xml文件,添加Zookeeper实例:
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop-slave02:2181,hadoop-slave03:2181,hadoop-slave04:2181</value>
</property>
步骤3:启动节点上的zookeeper实例:
分别进入hadoop-slave02、hadoop-slave03、hadoop-slave04节点执行:
$ZOOKEEPER_HOME/bin/zkServer.sh start
Zookeeper实例对应的进程名为:
步骤4:初始化zookeeper。
注意:这个步骤是针对第一次启动zookeeper实例用的,如果你的zookeeper实例不是第一次启动则不需要执行此命令。
$HADOOP_HOME/bin/hdfs zkfc -formatZK
步骤5:启动 JournalNode、NameNode 和 DataNode。
步骤6:启动ZKFC。
分别进入hadoop-master和hadoop-slave1即在各个 NameNode 节点上执行:
$HADOOP_HOME/sbin/hadoop-daemon.sh startzkfc
ZKFC对应的进程名为:
要注意的一点是:我们最先启动的NameNode为Active NameNode。现在为止配置完毕,验证请看下面一小节。