
一、Zookeeper集群搭建及基本使用
1.centOs虚拟机三台 ,集群最好是奇数台容灾性好一些,由于允许不过半节点宕机,例五台可以挂掉两台,四台可以挂掉一台。简单说就是过半可用。
2.Zookeeper官方 http://zookeeper.apache.org/
二、zk安装
1.Wget http://mirror.bit.edu.cn/apache/zookeeper/zookeeper-3.4.5/zookeeper-3.4.5.tar.gz
2. tar -xvzf zookeeper-3.4.5.tar.gz
目录为/opt/bigdata/zookeeper-3.4.5
3.在/etc/profile 里配置:
JAVA_HOME ZOOKEEPER_HOME PATH
4.创建data目录和myid
创建data目录:$ZOOKEEPER/data,即/opt/bigdata/zookeeper-3.4.5/data
创建myid: /opt/bigdata/zookeeper-3.4.5/data/myid
myid存server的id,可以是1,2,3…,必须唯一
三、zk配置
创建文件 $ZOOKEEPER/conf/zoo.cfg
修改zoo.cfg,增加如下:
dataDir=/opt/bigdata/zookeeper-3.4.5/data
clientPort=2181
initLimit=10
syncLimit=5
tickTime=2000
server.1=master:2888:3888
server.2=slave1:2888:3888
server.3=slave2:2888:3888
其中server.myid代表组成整个服务的机器,当服务启动时,会在数据目录下查找这个文件myid,这个文件中存有服务器的号码。
四、启动
zkServer.sh start 启动 三台顺序分别启动后第二台为leader其他为follower代表成功(选举机制)
zkServer.sh status 查看状态
zkServer.sh status 停止
Master/slave 架构
Leader选举,Leader负责整个集群Client消息接收,分发给每个Flower。
Client操作:
在任一台机器上
zkCli.sh -server master:2181
五、zk的优点
简单易用,能够很好的解决分布式框架在运行中出现的协调问题。例如master主备切换、节点的上下线感知。
六、zk的HA方案
话不多说,上图

1.在我们配置HA高可用之后,HA会给我们产生zkfc(基于zookeeper实现的failover controller)进程,启动后,两个zkfc都会往zk集群中注册(此时还不知道哪个namenode为active)
2.我们根据zkfc的注册顺序,即谁先注册成功谁成为active节点。
3.这时active的zkfc会在zk集群中生成一个临时节点,而standby的zkfc监听着这个临时节点
假如因为网络故障zk集群和active namenode连接不上则监听器会将监听到的事件通知给standby的zkfc,standby的zkfc触发监听的回调
1)首先判断active的namenode是否真的和zk集群断开了连接
2)宕机的namenode则降级为standby namenode
3)监听到事件的standby namenode成为新的active namenode。
需要注意的是,当active namenode宕机的时候,standby namenode收到切换的请求时,不是立即切换的,首先会做两件事。
1.通过SSH远程指令,杀掉active namenode 的进程,但是如果不仅仅是namenode挂了,而是整个机器挂了,那发送的指令就不会有反应,也不会有反馈信息。
2.那么如果SSH没有响应,则帮用户调用一个用户所指定的脚本,脚本运行成功,则切换状态
七、监听器原理
1)首先要有一个 main()线程
2)在 main 线程中创建 Zookeeper 客户端,这时就会创建两个线程,一个负责网络连接
通信(connet),一个负责监听(listener)。
3)通过 connect 线程将注册的监听事件发送给 Zookeeper。
4)在 Zookeeper 的注册监听器列表中将注册的监听事件添加到列表中。
5)Zookeeper 监听到有数据或路径变化,就会将这个消息发送给 listener 线程。
6)listener 线程内部调用了 process()方法。