介绍 Zookeeper
Zookeeper 是一个开源的分布式的,为分布式框架提供协调服务的 Apache 项目。
Zookeeper从设计模式角度来理解:是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受观察者的注册,一旦这些数据的状态发生变化,Zookeeper 就将负责通知已经在Zookeeper上注册的那些观察者做出相应的反应。
Zookeeper特点
-
Zookeeper:一个领导者(Leader),多个跟随者(Follower)组成的集群。
-
集群中只要有半数以上节点存活,Zookeeper集群就能正常服务。所 以Zookeeper适合安装奇数台服务器。
-
全局数据一致:每个Server保存一份相同的数据副本,Client无论连接到哪个Server,数据都是一致的。
-
更新请求顺序执行,来自同一个Client的更新请求按其发送顺序依次执行。
-
数据更新原子性,一次数据更新要么成功,要么失败。
-
实时性,在一定时间范围内,Client能读到最新数据。
数据结构
ZooKeeper 数据模型的结构与 Unix 文件系统很类似,整体上可以看作是一棵树,每个节点称做一个 ZNode。
每一个 ZNode 默认能够存储 1MB 的数据,每个 ZNode 都可以通过其路径唯一标识。
应用场景
提供的服务包括:统一命名服务、统一配置管理、统一集群管理、服务器节点动态上下线、软负载均衡等。
Curator 框架实现分布式锁
详情请查看官方文档:https://curator.apache.org/index.html
|
选举机制
半数机制,超过半数的投票通过,即通过。
- 第一次启动选举规则
投票过半数时,服务器 id 大的胜出 - 第二次启动选举规则
EPOCH 大的直接胜出
EPOCH 相同,事务 id 大的胜出
事务 id 相同,服务器 id 大的胜出
生产集群安装多少 zk 合适
安装奇数台。
生产经验:
- 10 台服务器:3 台 zk;
- 20 台服务器:5 台 zk;
- 100 台服务器:11 台 zk;
- 200 台服务器:11 台 zk
服务器台数多:好处,提高可靠性;坏处:提高通信延时
常用命令
ls、get、create、delete
http://zookeeper.apache.org/doc/current/zookeeperCLI.html