ZooKeeper实现HA HDFS

单节点NameNode存在问题:

NameNode宕机,metadata数据消失;

单节点出现故障,如何进行故障转移?

如果增加一个NameNode节点,会出现脑裂问题(一个集群有多个管理者),如何解决?

ZK搭建高可用(HA High Aliavble)HDFS集群

原理

QJM(Quorum Jouranl Manager)是Hadoop转为为NameNode共享存储开发的组件。其集群运行一组Journal Node,每个Journal节点暴露一个简单的RPC接口,允许NameNode读取和写入数据,数据存放在Journal节点的本地磁盘。

故障转移问题上,引入了监控NameNode状态的ZookeeperFailController(ZKFC)。ZKFC一般运行在NameNode宿主机器上,与Zookkeeper集群写作完成故障的自动转移。

Journal Node两大作用:

  • 同步NameNode们的editlog
  • 当出现脑裂情况时,触发隔离机制,将其中一个NameNode节点kill掉(例如,NameNode1出现网络延迟,ZooKeeper认为它宕机了,ZKFC将NameNode2由standby转为active状态,此时,就有两个NameNode处于active状态,出现脑裂情况,Journal Node就会触发隔离机制,将剩余NameNode1的写入操作执行完毕之后,会通过SSH登录NameNode1节点将其进程关闭)

ZooKeeper实现HA HDFS

ZK集群

通常需要开辟三个独立端口

1:处理client请求

2:集群内部原子广播

3:集群内部选举投票

ZooKeeper实现HA HDFS

ZK集群创建

1.安装zookeeper

2.在每个zk节点创建数据目录,每个数据目录中必须有myid文件,用来唯一标识zk节点

3.数据目录中创建zoo.cfg的配置文件

ZooKeeper实现HA HDFS

启动zk集群

1 ./zkServer.sh start /root/zkdata/zoo.cfg

查看集群状态

1 ./zkServer.sh status /root/zkdata/zoo.cfg

相关推荐