知其然,知其所以然
ZooKeeper 内部原理 2026-10-01

ACL 权限控制

ACL 权限控制实测:默认 world:anyone:cdrwa(任何人可读写删);digest 保护后匿名所有操作都是 NoAuth;CREATE / READ / WRITE / DELETE / ADMIN 五种权限各自控制什么(reader / writer / maker / deleter 的对照表)。

ZooKeeper ACL 权限控制 digest 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

Digest、IP、Auth、SASL ACL 对比

Digest、IP、Auth、SASL ACL 对比实测:auth 方案自动变成创建者的 digest id;digest id = user:base64(sha1(user:password)) 无盐,与 ZooKeeper 保存的完全一致;ip 方案按源 IP / CIDR 授权;sasl / x509 未启用提供者时设置 ACL 会 InvalidACLError;没人有 ADMIN 权限的节点 ACL 改不了。

ZooKeeper ACL digest ip 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

ACL 继承与递归授权

ACL 继承与递归授权实测:ACL 不继承(受保护的父节点下新建的子节点是 world:anyone,匿名按完整路径能读);创建 / 删除看父节点 ACL;3906 个节点的子树递归 set_acls 用 13.2 s;加固之后新建的子节点又是 world。

ZooKeeper ACL 继承 递归授权 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

权限变更和凭据轮换

权限变更与凭据轮换实测:改 ACL 对在线会话立即生效(旧口令的会话马上 NoAuth);客户端重连后仍用旧口令被拒;平滑轮换要先让 ACL 同时含新旧 id、等客户端切换后再删旧的;连接内可以 add_auth 追加新身份。

ZooKeeper ACL 凭据轮换 digest 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

TLS 客户端连接

TLS 客户端连接实测:secureClientPort + Netty + PKCS12 密钥库;明文客户端连不上 TLS 端口;不信任 CA 或主机名不匹配握手失败;开了 TLS 若不关明文端口仍可明文访问;TLS 与明文同步写延迟 3.01 vs 3.03 ms。

ZooKeeper TLS 加密 客户端连接 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

mTLS 双向认证

mTLS 双向认证实测:ssl.clientAuth=need 时无证书、自签名冒名证书都握手失败;证书 DN 成为 x509 身份(whoami: x509: CN=client1);x509 ACL 按证书授权(client2 被拒);clientAuth=want 时无证书的客户端仍可匿名连接。

ZooKeeper mTLS 双向认证 x509 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

SASL/Kerberos 认证

SASL/Kerberos 认证实测:DIGEST-MD5(需关闭 3.9 默认的 fips-mode)与 Kerberos(本机 KDC,zookeeper/localhost 与 zkclient 主体、keytab)都跑通;sasl ACL 按认证身份授权;enforce.auth 可强制必须 SASL 认证。

ZooKeeper SASL Kerberos 认证 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

ZooKeeper 数据加密边界

ZooKeeper 数据加密边界实测:落盘的事务日志与快照是明文;客户端明文端口抓包能看到机密、TLS 端口抓不到;节点间 quorum 流量默认明文、sslQuorum=true 后加密;应用层加密能让磁盘上没有明文。

ZooKeeper 加密 TLS 数据安全 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

ZooKeeper 分布式锁

用 kazoo 在真实 ZooKeeper 上量分布式锁:无锁 35/200、有锁 200/200;锁就是临时顺序节点、各监听前一个,30 人排队每次释放 8 包 vs 朴素 29 包;持有者崩溃 2.9 s 后锁转移;冻结的持有者醒来仍以为自己持有锁。

ZooKeeper 分布式锁 kazoo 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

用 ZooKeeper 做 Leader 选举

5 个 kazoo Election 候选进程的 Leader 选举实测:同一时刻只有一个 leader;kill -9 leader 4 次,空窗期 3.52, 3.04, 3.05, 3.03 s(中位 3.04 s ≈ 会话超时),全程无两个 leader;正常让位只有 0.01 s。

ZooKeeper Leader选举 kazoo 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

Master 选举与工作节点管理

用 ZooKeeper 做 Master/Worker:临时节点登记 worker、multi 原子分配任务;kill -9 一个 worker 3.6 s 后任务被重新分配,500 个任务无重复执行、全部完成;kill -9 master 后备用 master 3.3 s 接管并读回状态继续。

ZooKeeper Master选举 任务分配 kazoo 真实验证 动画演示
ZooKeeper 内部原理 2026-10-01

用 ZooKeeper 实现分布式队列

kazoo 的 Queue / LockingQueue 实测:节点名 entry-优先级-序号;普通 Queue 消费者崩溃丢 1 条(199/200 完成);LockingQueue 崩溃后消息在会话过期后被重取,30 条全确认但有 1 条被取 2 次;吞吐 308 vs 143 条/s。

ZooKeeper 分布式队列 kazoo 真实验证 动画演示
京ICP备2026067502号-1京公网安备11010502063487号