Linux Zookeeper的网络通信机制是什么
导读:通信架构与传输层 客户端与服务端基于 TCP 长连接 通信,默认客户端端口为 2181。客户端通常从配置的连接串中按策略(如轮询/随机)选取一台服务器建立连接,连接建立后保持活跃以复用会话与减少握手开销。服务端由 Leader/Follo...
通信架构与传输层
- 客户端与服务端基于 TCP 长连接 通信,默认客户端端口为 2181。客户端通常从配置的连接串中按策略(如轮询/随机)选取一台服务器建立连接,连接建立后保持活跃以复用会话与减少握手开销。服务端由 Leader/Follower 角色构成,客户端可连接任一可用的 Follower 节点进行读写交互。
会话建立与心跳
- 会话建立始于“握手”阶段:客户端发送 ConnectRequest(包含 protocolVersion、lastZxidSeen、timeOut、sessionId、passwd、readOnly 等),服务端校验后返回 sessionId、协商后的 timeout 等,会话即建立成功。会话存续期间,客户端按需在超时范围内发送心跳(底层以 ping 实现)维持活性;若服务端在会话超时内未收到心跳或数据,将清理该会话及其临时节点。
请求与响应协议
- 报文整体采用“长度前缀 + 消息体”的帧格式,便于拆包与校验。请求侧为“请求头 + 请求体”,响应侧为“响应头 + 响应体”。关键字段与类型如下:
- 请求头 RequestHeader:包含 xid(客户端请求序号,单调递增) 与 type(操作类型)。
- 特殊请求的固定 xid:watch_xid = -1、ping_xid = -2、auth_xid = -4,便于客户端快速分流处理事件、心跳与认证响应。
- 响应头 ReplyHeader:包含 xid、zxid(服务端事务ID)、err(错误码),据此判定请求结果或异常类型。
读写路径与会话路由
- 读操作(如 exists/getData)为本地读,通常可在所连接的 Follower 上直接完成并返回,无需 Leader 协调,因而延迟更低。
- 写操作(如 create/delete/setData 等)需由 Leader 协调达成多数派提交:客户端将请求发往 Follower,Follower 转发给 Leader;Leader 生成提案、收集多数派 ACK 后提交,再通知各 Follower 更新本地状态,最终响应客户端。
服务端内部通信与故障切换
- 服务器间通信采用 Leader–Follower 主从模式:Follower 启动后主动连接 Leader,完成注册与会话/数据同步;Leader 为每个 Learner 创建 LearnerHandler 负责消息收发与同步推进。
- 连接与 IO 层面:客户端由 ClientCnxn(含 SendThread、EventThread)管理与服务器的读写与事件循环;服务端由 LearnerCnxAcceptor/LearnerHandler 负责接收与处理对端连接与消息,保障集群内状态一致与故障切换时的可用性。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Linux Zookeeper的网络通信机制是什么
本文地址: https://pptw.com/jishu/758032.html
