Zookeeper:集群和zab协议
一.集群搭建
分别搭建zookeeper环境和jdk环境。
配置文件的dataDir需要需改,并且要创建该目录。
server.A=B:C:D
A:是一个数字,表示服务器的编号
B:服务器ip地址
C:zookeeper的通信端口
D:Leader选举的端口
在上一步的dataDir指定目录下,创建myid文件,文件中加入A数字。
1 | echo "1" >myid |
如果zookeeper服务启动不了,可以在zookeeper的bin目录下看到报错的日志
1 | cat zookeeper.out |
针对报错找到解决办法。
查看zookeeper状态:
1 | ./zkServer.sh status |
登陆集群:
1 | ./zkCli.sh -server 192.168 . 10.132 : 2181 |
二.一致性协议:zab协议
zab协议:zookeeper atomic broadcast(zookeeper原子广播),zookeeper是通过zab协议保证事务的一致性。
基于zab协议,zookeeper集群中的角色主要有一下三类:
角色 | 描述 | |
领导者(Leader) | 领导者负责进行投票的发起和决议,更新系统状态 | |
学习者 | 跟随者(Follower) | Follower用于接收客户请求并向客户端返回结果,在选主过程中参与投票 |
观察者(ObServer) | Observer可以接收客户端连接,将写请求转发给leader节点,单Observer不参与投票过程,之同步leader状态。 | |
客户端(Client) | 请求发起方 |
zab广播模式工作原理(写请求):
3.observer角色及其配置
observer角色特点:
1.不参与集群的leader选举
2.不参与集群中写数据时的ack反馈
如果想要使用observer角色,在配置文件中配置
1 | peerType=observer |
并且在所有的server的配置文件中,配置成observer模式的server的那行配置追加:observer,例如:
1 | server. 3 = 192.168 . 10.135 : 2281 : 2381 :observer |
4.JavaApi连接Zookeeper集群
1 | ZooKeeper(String connectString, int sessionTimeout, Watcher watcher) |
在connectString中:以逗号分隔开各个集群的ip端口号
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | public class ZKWatcher implements Watcher{ static CountDownLatch latch = new CountDownLatch( 1 ); static ZooKeeper zooKeeper; public static void main(String[] args) throws Exception{ Watcher watcher; zooKeeper = new ZooKeeper( "192.168.10.132:2181,192.168.10.133:2181,192.168.10.135:2181" , 5000 , new ZKWatcher()); latch.await(); } public void process(WatchedEvent event) { if (event.getType() == Event.EventType.None){ if (event.getState() == Event.KeeperState.SyncConnected){ System.out.println( "连接成功" ); latch.countDown(); } else if (event.getState() == Event.KeeperState.Disconnected){ System.out.println( "断开连接" ); } else if (event.getState() == Event.KeeperState.Expired){ System.out.println( "会话超时" ); } else if (event.getState() == Event.KeeperState.AuthFailed){ System.out.println( "认证失败" ); } } } } |
标签:
Zookeeper
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix