hadoop2.0 HA的主备自动切换

在《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的服务地址

完整配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
< configuration >
         < property >
                 < name >fs.defaultFS</ name >
                 < value >hdfs://mycluster</ value >
         </ property >
         < property >
                 < name >hadoop.tmp.dir</ name >
                 < value >/home/tmp/hadoop2.0</ value >
         </ property >
         < property >
                 < name >ha.zookeeper.quorum</ name >
                 < value >zookeeper1:2181,zookeeper2:2181,zookeeper3:2181</ value >
         </ property >
</ configuration >
2.2 hdfs-site.xml  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
< configuration >
         < property >
                 < name >dfs.replication</ name >
                 < value >1</ value >
         </ property >
         < property >
                 < name >dfs.namenode.name.dir</ name >
                 < value >/home/dfs/name</ value >
         </ property >
         < property >
                 < name >dfs.datanode.data.dir</ name >
                 < value >/home/dfs/data</ value >
         </ property >
         < property >
                 < name >dfs.permissions</ name >
                 < value >false</ value >
         </ property >
         < property >
                 < name >dfs.nameservices</ name >
                 < value >mycluster</ value >
         </ property >
         < property >
                 < name >dfs.ha.namenodes.mycluster</ name >
                 < value >nn1,nn2</ value >
         </ property >
         < property >
                 < name >dfs.namenode.rpc-address.mycluster.nn1</ name >
                 < value >namenode1:8020</ value >
         </ property >
         < property >
                 < name >dfs.namenode.rpc-address.mycluster.nn2</ name >
                 < value >namenode2:8020</ value >
         </ property >
         < property >
                 < name >dfs.namenode.http-address.mycluster.nn1</ name >
                 < value >namenode1:50070</ value >
         </ property >
         < property >
                 < name >dfs.namenode.http-address.mycluster.nn2</ name >
                 < value >namenode2:50070</ value >
         </ property >
         < property >
                 < name >dfs.namenode.shared.edits.dir</ name >
                 < value >qjournal://journalnode1:8485;journalnode2:8485;journalnode3:8485/mycluster</ value >
         </ property >
         < property >
                 < name >dfs.journalnode.edits.dir</ name >
                 < value >/home/dfs/journal</ value >
         </ property >
         < property >
                 < name >dfs.client.failover.proxy.provider.mycluster</ name >
                 < value >org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</ value >
         </ property >
         < property >
                 < name >dfs.ha.fencing.methods</ name >
                 < value >shell(/bin/true)</ value >
         </ property >
         < property >
                 < name >dfs.ha.automatic-failover.enabled</ name >
                 < value >true</ value >
         </ property >
</ configuration >
  • dfs.ha.automatic-failover.enabled

需要设置为true,启动自动切换。

  • dfs.ha.fencing.methods

这里我们把fencing方法设置为shell,一是为了方便测试,二是采用QJM方式的HA本身就有fencing功能,不需要用这个参数中的fencing功能,详解请参考《hadoop2.0 QJM方式的HA的配置》一文。你用sshfence的方法也是可以的,不过要注意ssh连接的问题和一些权限的问题。

3 在zookeeper中初始化  

1
$HADOOP_HOME /bin/hdfs  zkfc -formatZK

运行这个命令后,会在zookeeper上创建一个/hadoop-ha/mycluster/的znode,用来存放automatic failover的数据。

4 启动zkfc(zookeeper failover controller)  

需要在namenode1和namenode2上都启动zkfc daemon进程。

1
$HADOOP_HOME /sbin/hadoop-daemon .sh start zkfc

5 启动HDFS  

可以参考《hadoop2.2.0 的安装和基本配置》和《hadoop2.0 QJM方式的HA的配置》这两篇文章。

在两个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,这里通过一个图描述他们之间的关系。

wKiom1NcVi_RWDZiAAJXRRkSiQU224.jpg

8 实战tips  

  • zookeeper可以在hadoop集群中选几台机器同时作为zookeeper节点,给HA私用。

  • 在实践中建议采用手工切换的方式,这样更可靠,也方便查找问题。


参考资料  

http://hadoop.apache.org/docs/r2.2.0/hadoop-yarn/hadoop-yarn-site/HDFSHighAvailabilityWithQJM.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值