今天又来学习了新的一门技术,其实好早就听过zookeeper了,也用过它的分布式锁,但是总结一直没有弄过。。
zooKeeper为高可用的一致性协调框架,自然的ZooKeeper也有着一致性算法的实现,ZooKeeper使用的是ZAB协议作为数据一致性的算法,ZAB(ZooKeeper Atomic Broadcast )全称为:原子消息广播协议;
ZK的ZAB协议(原子广播协议)
适用于ZooKeeper上一种支持崩溃恢复的原子广播协议
(1)崩溃恢复 1.leader崩溃
2.选举新的leader(拥有所有服务器中最高编号的ZXID的服务器)
3.进行数据同步,将leader服务器中的事务作为基准,所有follower中的事务与leader服务器中的事务进行同步
4.抛弃follower中有的而leader中没有的事务 ZXID组成64位的数字,前32位为周期(即leader选举一次+1),后32位为事务操作次数(每增加一次事务+1)
(2)消息广播
1.leader接收客户端请求,判断请求是否为事务,若是则将请求转换为事务 proposal,为每个follower建立单独队列,进行FIFO
2.follower接收到事务之后将事务写到本地磁盘后,回复leader(ack)
3.leader接收follower返回的ack,超过半数的follwer进行ack,那么leader就会发送提交指令 .
一:下面我们来讲讲怎么搭建zk集群吧。。
1. 一共三个节点(zk服务器集群规模不能小于3个节点),要求服务器系统时间相等。
2.上传zk
2.1进行解压 tar -zxvf zookeeper.3.4.5.tar.gz
2.2 重命名 mv zookeeper.3.4.5 zookeeper
2.3 修改环境变量: vi /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=.:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
3.刷新生效 source /etc/profile
4.到zookeeper下修改配置文件
cd /usr/local/zookeeper/conf
mv zoo_sample.cfg zoo.cfg
5.修改zoo.cfg 文件
5.1 vim zoo.cfg
5.2 dataDir=/usr/local/zookeeper/data
5.3 最后面添加
server.0=ip地址1:2888:3888
server.1=ip地址2:2888:3888 server.2=ip地址3:2888:3888
6.创建文件
6.1 mkdir data
6.2 在server0,serve1,server2 创建文件vim myid 并填写内容分别为 0,1,2
7.启动zk
路径 /usr/local/zookeeper/bin
启动 zkServer.sh start(注意这里3台都要启动)
状态 zkServer.sh status
二:zk环境下操作命令
zkCli.sh 进行zookeeper客户端
根据命令进行操作
查找 ls /
创建并赋值 create /aa 123
获取 get /aa
设值 set /aa 243
递归删除节点 rmr /path
删除指定某个节点 delete /path/child
zooKeeper为高可用的一致性协调框架,自然的ZooKeeper也有着一致性算法的实现,ZooKeeper使用的是ZAB协议作为数据一致性的算法,ZAB(ZooKeeper Atomic Broadcast )全称为:原子消息广播协议;
ZK的ZAB协议(原子广播协议)
适用于ZooKeeper上一种支持崩溃恢复的原子广播协议
(1)崩溃恢复 1.leader崩溃
2.选举新的leader(拥有所有服务器中最高编号的ZXID的服务器)
3.进行数据同步,将leader服务器中的事务作为基准,所有follower中的事务与leader服务器中的事务进行同步
4.抛弃follower中有的而leader中没有的事务 ZXID组成64位的数字,前32位为周期(即leader选举一次+1),后32位为事务操作次数(每增加一次事务+1)
(2)消息广播
1.leader接收客户端请求,判断请求是否为事务,若是则将请求转换为事务 proposal,为每个follower建立单独队列,进行FIFO
2.follower接收到事务之后将事务写到本地磁盘后,回复leader(ack)
3.leader接收follower返回的ack,超过半数的follwer进行ack,那么leader就会发送提交指令 .
一:下面我们来讲讲怎么搭建zk集群吧。。
1. 一共三个节点(zk服务器集群规模不能小于3个节点),要求服务器系统时间相等。
2.上传zk
2.1进行解压 tar -zxvf zookeeper.3.4.5.tar.gz
2.2 重命名 mv zookeeper.3.4.5 zookeeper
2.3 修改环境变量: vi /etc/profile
export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=.:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
3.刷新生效 source /etc/profile
4.到zookeeper下修改配置文件
cd /usr/local/zookeeper/conf
mv zoo_sample.cfg zoo.cfg
5.修改zoo.cfg 文件
5.1 vim zoo.cfg
5.2 dataDir=/usr/local/zookeeper/data
5.3 最后面添加
server.0=ip地址1:2888:3888
server.1=ip地址2:2888:3888 server.2=ip地址3:2888:3888
6.创建文件
6.1 mkdir data
6.2 在server0,serve1,server2 创建文件vim myid 并填写内容分别为 0,1,2
7.启动zk
路径 /usr/local/zookeeper/bin
启动 zkServer.sh start(注意这里3台都要启动)
状态 zkServer.sh status
二:zk环境下操作命令
zkCli.sh 进行zookeeper客户端
根据命令进行操作
查找 ls /
创建并赋值 create /aa 123
获取 get /aa
设值 set /aa 243
递归删除节点 rmr /path
删除指定某个节点 delete /path/child