Zookeeper数据结构
类似于一棵树,每个znode默认能够存储1MB的数据
应用场景
- 统一命名服务、一个域名可以映射多个ip
- 统一配置管理、比如dubbo做注册中心
- 统一集群管理、实时掌握每个节点的信息
- 服务器节点动态上下线
- 软负载均衡,一个域名随机访问一个ip
选举机制
- 半数机制、投票超过半数以上就认为集群可用。所以zookeeper服务器数量适合奇数台服务器
- zookeeper没有指定master和slave,leader是通过内部选举产生的
- 假如有五台Zookeeper集群,他们id从1-5选举流程如下:
- 服务1启动、首先选举自己;
- 服务2启动,首先选举自己,服务1转投id比自己大的服务2;
- 服务3启动、首先选举自己、服务1服务2转投序号比较大的服务器3,这时master选举出来了;
- 服务4启动,这时已经选举出来且过半不会触发重新选举;
- 服务5启动,同服务4
节点类型
- 持久化节点
- 持久化顺序节点
- 临时节点
- 临时顺序节点
写数据流程
- client向zookeeper的server1发送一个写请求
- 如果server1不是 leader那么这个server会把这个请求转发给leadler
leadler会把这个写请求广播到各个server - 当leadler收到大多数server写成功了就说明数据写成功了,然后leadler告诉server1数据写成功
- server1进一步通知client数据写成功了