写点什么

zookeeper- 集群和 zab 协议

作者:zarmnosaj
  • 2022 年 7 月 19 日
  • 本文字数:731 字

    阅读完需:约 2 分钟

zookeeper 集群搭建

以一台虚拟机为例,搭建伪集群环境,一共搭建 3 个节点。节点对外提供服务端口号分别为 2181、2182、2183


  1. 以原始 zookeeper-版本号为基准,复制三份 zookeeper 文件,目录名称分别取名为 zookeeper2181、zookeeper2182、zookeeper2183


cp ‐r zookeeper‐版本号 zookeeper2181... zookeeper2182... zookeeper2183
复制代码


  1. 分别修改 zookeeper2181、zookeeper2182、zookeeper2183 服务器对应配置文件,主要修改内容:服务器对应的端口号、数据快照文件所在路径、集群配置信息(集群服务器编号、包括服务器 ip+zookeeper 之间的通信端口和 Leader 的选举端口)

  2. 在 dataDir(数据快照文件所在路径)指定的目录下,创建 myid 文件,然后在该文件添加上一步 server 配置的对应 集群服务器编号

  3. 分别启动三台服务器,检验集群状态

zab 协议

zab 协议 的全称是 Zookeeper Atomic Broadcast ,中文名为 zookeeper 原子广播。zookeeper 内部也是通过 zab 协议来保证分布式事务的最终一致性。


zab 广播模式工作原理,通过类似两阶段提交协议的方式解决数据一致性:


  1. leader 从客户端收到一个写请求

  2. leader 生成一个新的事务并为这个事务生成一个唯一的 ZXID

  3. leader 将这个事务提议发送给所有的 follower 节点

  4. follower 节点将收到的事务请求加入到历史队列(history queue)中,并发送 ack 给 leader

  5. 当 leader 收到大多数 follower 的 ack 消息,一般为半数以上节点,leader 就会发送 commit 请求

  6. 当 follower 收到 commit 请求时,从历史队列中将事务请求 commit

  7. 完成

zookeeperAPI 连接集群

ZooKeeper(String connectionString, int sessionTimeout, Watcher watcher)
复制代码


其中:connectionString - zooKeeper 集合主机 sessionTimeout - 会话超时(以毫秒为单位)watcher - 实现“监视器”界面的对象。ZooKeeper 集合通过监视器对象返回连接状态

发布于: 刚刚阅读数: 5
用户头像

zarmnosaj

关注

靡不有初,鲜克有终 2020.02.06 加入

成都后端混子

评论

发布
暂无评论
zookeeper-集群和zab协议_7月月更_zarmnosaj_InfoQ写作社区