您的位置:首页 > 大数据 > 人工智能

HDFS-HA的配置-----自动Failover

2012-08-29 22:13 239 查看
转帖请注明本空间地址:http://blog.csdn.net/chenpingbupt

1、概述
在手动FailOver的基础上,自动Failover增加了两个东西:一个是ZooKeeper集群,一个是ZKFailoverController(简称:ZKFC)

ZK集群:
作为一个高可靠系统,能够为一小部分协同数据提供监控,将数据的更改随时反应给客户端。HDFS的HA依赖zk提供的两个特性:一个是错误监测,一个是活动节点选举
Failure detection
每个NN都会在ZK中注册并且持久化一个session。一旦一个NN失效了,那么这个session也将过期,那么zk将会通知其他的NN应该发起一个Failover
Active NameNode election
ZK提供了一个简单的机制来保证只有一个NN是活动的。如果当前的活动NN失效了,那么另一个NN将获取ZK中的独占锁,表名自己是活动的节点。
ZKFailoverController(ZKFC)

作为一个ZK集群的客户端,用来监控NN的状态信息。每个运行NN的节点必须要运行一个zkfc。zkfc提供以下功能:

Health monitoring

zkfc定期对本地的NN发起health-check的命令,如果NN正确返回,那么这个NN被认为是OK的。否则被认为是失效节点。
ZooKeeper session management

当本地NN是健康的时候,zkfc将会在zk中持有一个session。如果本地NN又正好是active的,那么zkfc还有持有一个"ephemeral"的节点作为锁,一旦本 地NN失效了,那么这个节点将会被自动删除。

ZooKeeper-based
election


如果本地NN是健康的,并且zkfc发现没有其他的NN持有那个独占锁。那么他将试图去获取该锁,一旦成功,那么它就需要执行Failover,然后成为active的NN节点。Failover的过程是:第一步,对之前的NN执行fence,如果需要的话。第二步,将本地NN转换到active状态。

2、ZK集群配置
考虑到zk集群的需要的资源不是很多,一般都建议将NN和ZK节点部署在同一个机器上。但是一般都希望将ZK的数据和HDFS的meta数据分放在不同的物理盘上。这样即能保证数据的隔离又能保证性能。一般来说,ZK需要配置三五个节点足矣,下面详述ZK集群配置及启动

1、下载ZK:http://hadoop.apache.org/zookeeper/releases.html
2、创建一个任意名字的File文件,配置如下参数:

tickTime=2000

dataDir=/home/ziang/DfsDataDir/zookeeper

clientPort=31315

initLimit=5

syncLimit=2

server.1=dw13:31316:31317

server.2=dw14:31316:31317

server.3=dw23:31316:31317

由于ZK集群中每个节点都需要知道其他节点的信息,所以server.id=host:port:port就是为了完成这个任务的。其中个server.id这个参数由用户分配给每个zk节点并放置在dataDir目录下的myid文件中。

3、myid文件只有一行,内面是一个1-255的数字,必须保证唯一。如server 1的myid文件内保存“1”就够了。

4、在每个zk的部署机器上配置好各个配置项到配置文件:

mkdir -p /home/ziang/DfsDataDir/zookeeper/logs && mkdir -p /home/ziang/DfsDataDir/zookeeper/ && echo 1 >/home/ziang/DfsDataDir/zookeeper/myid
mkdir -p /home/ziang/DfsDataDir/zookeeper/logs && mkdir -p /home/ziang/DfsDataDir/zookeeper/ && echo 2 >/home/ziang/DfsDataDir/zookeeper/myid
mkdir -p /home/ziang/DfsDataDir/zookeeper/logs && mkdir -p /home/ziang/DfsDataDir/zookeeper/ && echo 3 >/home/ziang/DfsDataDir/zookeeper/myid
5、启动ZK集群,在每个zk的部署机器上运行
export ZOO_LOG_DIR=/home/ziang/DfsDataDir/zookeeper/logs&& sh bin/zkServer.sh start

6、测试集群的正确性

java -cp zookeeper-3.3.5.jar:lib/log4j-1.2.15.jar:conf:lib/jline-0.9.94.jar org.apache.zookeeper.ZooKeeperMain -server
127.0.0.1:31315
或者
sh zkCli.sh -server 127.0.0.1:31315

3、HDFS相关配置
完成了ZK的配置之后,剩下就配置HDFS了

1、在core-site.xml中,配置:

<property>

<name>ha.zookeeper.quorum.hdpcdh4</name>

<value>dw13:31315,dw14:31315,dw23:31315</value>

</property>

下面两个为了安全性,可选的。
<property>

<name>ha.zookeeper.auth</name>

<value>@/path/to/zk-auth.txt</value>

</property>

<property>

<name>ha.zookeeper.acl</name>

<value>@/path/to/zk-acl.txt</value>

</property>

2、在hdfs-site.xml中,配置:

<property>
<name>dfs.ha.automatic-failover.enabled.hdpcdh4</name>
<value>true</value>

</property>
下面也是可选的:
<property>
<name>ha.zookeeper.parent-znode</name>
<value>/hadoop-ha</value>
</property>

4、相关初始化
完成上述配置之后,就可以开始进行初始化了。进行初始化的时候,必须保证zk集群已经启动了。

1、在ZK中创建znode来存储automatic Failover的数据,任选一个NN执行完成即可:

sh bin/hdfs zkfc -formatZK
2、启动zkfs,在所有的NN节点中执行以下命令:

sh sbin/hadoop-daemon.sh start zkfc

5、集群启动
最后启动集群

sh sbin/start-dfs.sh
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: