在《hadoop2.0 QJM方式的HA的配置》一文中介绍了HA的配置,是通过手工进行主备切换的。本文在这基础上,继续介绍HA的主备自动切换(automatic failover)的配置。自动切换是通过配置zookeeper来实现的,关于zookeeper的安装和配置,在这里不做介绍了,大家可以参考网上的资料。
1 准备
假定已经有一个zookeeper的集群,3台机器如下:zookeeper1
zookeeper2
zookeeper3
两个namenode节点如下:namenode1
namenode2
2 配置
只涉及到core-site.xml和hdfs-site.xml两个配置文件,其他配置可以文件参考《hadoop2.0的安装和基本配置》一文。
2.1 core-site.xml
需要增加ha.zookeeper.quorum参数,加上zookeeper的服务地址
完整配置如下:
fs.defaultFS
hdfs://mycluster
hadoop.tmp.dir
/home/tmp/hadoop2.0
ha.zookeeper.quorum
zookeeper1:2181,zookeeper2:2181,zookeeper3:2181
2.2 hdfs-site.xml
dfs.replication
1
dfs.namenode.name.dir
/home/dfs/name
dfs.datanode.data.dir
/home/dfs/data
dfs.permissions
false
dfs.nameservices
mycluster
dfs.ha.namenodes.mycluster
nn1,nn2
dfs.namenode.rpc-address.mycluster.nn1
namenode1:8020
dfs.namenode.rpc-address.mycluster.nn2
namenode2:8020
dfs.namenode.http-address.mycluster.nn1
namenode1:50070
dfs.namenode.http-address.mycluster.nn2
namenode2:50070
dfs.namenode.shared.edits.dir
qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/mycluster
dfs.journalnode.edits.dir
/home/dfs/journal
dfs.client.failover.proxy.provider.mycluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
shell(/bin/true)
dfs.ha.automatic-failover.enabled
true
dfs.ha.automatic-failover.enabled
需要设置为true,启动自动切换。dfs.ha.fencing.methods
这里我们把fencing方法设置为shell,一是为了方便测试,二是采用QJM方式的HA本身就有fencing功能,不需要用这个参数中的fencing功能,详解请参考《hadoop2.0 QJM方式的HA的配置》一文。你用sshfence的方法也是可以的,不过要注意ssh连接的问题和一些权限的问题。
3 在zookeeper中初始化$HADOOP_HOME/bin/hdfs zkfc -formatZK
运行这个命令后,会在zookeeper上创建一个/hadoop-ha/mycluster/的znode,用来存放automatic failover的数据。
4 启动zkfc(zookeeper failover controller)
需要在namenode1和namenode2上都启动zkfc daemon进程。$HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc
5 启动HDFS
在两个namenode都启动之后,会发现,其中一个namenode会自动切换成active状态,不需要手工切换。
6 测试
现在可以享受我们的胜利成果了。我们把active namenode停掉后,会看到standby namenode自动切换成active状态了。
7 QJM方式HA automatic failover的结构图
QJM方式HA的结构涉及到active namenode,standby namenode,journalnode,datanode,zookeeper,zkfc,client,这里通过一个图描述他们之间的关系。
8 实战tipszookeeper可以在hadoop集群中选几台机器同时作为zookeeper节点,给HA私用。
在实践中建议采用手工切换的方式,这样更可靠,也方便查找问题。
参考资料