客户端的使用见java包和官方文档
Zookeeper集群
- 读写分离:提高负载能力,并保障性能。
- 主从自动切换:提高服务容错性。
半数以上运行机制
集群至少需要3台服务器,并且强烈建议使用奇数个服务器。因为zookeeper通过大多数节点的存活来判断整个集群是否可用。
3个节点挂2个,认为已经挂掉,4个节点挂2个,也认为已经挂掉。
集群角色
- leader:主节点,写入数据
- follower:子节点,读取数据,拥有投票权
- observer:观察者,读取数据,无投票权
leader挂了时服务会不可用,需要重新选举leader。
选举机制
- 每个节点都会默认将票投给自己,并且将投票结果告诉其他节点。
- 各个节点会比较节点间的zx_id和my_id,zx_id较新的优先得票,zx_id相同时my_id大的优先得票。
- tx_id分为高32位和低32位,高32位叫epoch,代表leader的生命周期(每次选出新的leader该值会加1),低32位代表当前leader周期内的变更次数。比较tx_id时优先比较高32位,后比较低32位。
- 当投票超过总节点半数时,选出当前leader,后续选举时发现已经有leader节点了会直接跟随leader节点。