ZooKeeper 有单机、伪集群、集群三种部署方式。它们在配置、角色和可用性上有什么区别?这篇自己起进程逐个验证,包括「只起一部分节点」这种最容易让人误会的状态。
Mode: standalone | 节点数 / quorum: 1 / 无 写延迟(中位数,300 次同步 create):3.00 ms
没有 server.N 配置就是单机。适合开发测试,不适合生产(没有容错)。
z2e-1: client 7310 myid 1 Mode: follower z2e-2: client 7311 myid 2 Mode: follower z2e-3: client 7312 myid 3 Mode: leader zoo.cfg 里的集群部分: ['server.1=127.0.0.1:7410:7510', 'server.2=127.0.0.1:7411:7511', 'server.3=127.0.0.1:7412:7512'] 写延迟(中位数,300 次同步 create,连接到集群):6.07 ms(对比单机 3.00 ms)
「伪集群」只是把多个节点放在同一台机器上,靠不同的端口与数据目录区分;配置与真正的集群完全一样(server.N=host:quorumPort:electionPort 加 myid 文件)。它不提供机器级别的容错,但用来学习与测试一致性行为非常合适——本系列后面的集群实验都是这样做的。
只起 1/3:ruok → imok | srvr → This ZooKeeper instance is not currently serving requests
客户端连接 / create → KazooTimeoutError
起到 2/3 后: {'z2q-1': 'follower', 'z2q-2': 'leader'}
客户端 create → 成功(2/3 够多数派)用 ruok 做健康检查会被骗:它只表示进程能响应,不表示能服务。更可靠的是 srvr 的 Mode 或 mntr。