作用及原理
作用: 分布式协调, 提供操作API
- 配置管理
- 集群管理:
- 群主选举
- 资源定位
- 同步状态
- 统一命名服务
使用案例:
- HBase
- Hadoop
- Kafka
选举算法
一个Leader,其他节点为Follower
Leader选举算法 (分布式选举算法使用ZAB,是Paxos的变种)
一致性保证:
- 数据变更先写磁盘再读入内存
- 读写原子
- 同步消息原子性
- 事务日志和快照是持久化存储.
写请求连接Leader, 读请求连接任意节点读取本地的复制.
配置
设置根目录: ZOOKEEPER_HOME
日志文件: zookeeper.out
集群推荐不少于3台,推荐奇数个节点,只要超过半数的节点OK(有效参与选举的节点数过半), ZooKeeper就能正常服务. 最好分布在不同的物理机上。
# server.N, 在zoo.cfg指定的dataDir目录下建立以服务器节点对应的myid文件,并更新内容为N
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
# Ubuntu 随系统启动
apt-get install zookeeperd
启动
# 单机
bin/zkServer.sh start
# 客户端连接
bin/zkCli.sh -server 127.0.0.1:2181
性能
性能: 在读大于写时性能更好(读写10:1)
注:来自腾讯广告团队分享
问题:如果读写操作频繁,则Zookeeper server很容易不堪重负。
workaround:用C++写了一个proxy,定期load Zookeeper数据,代替Zookeeper处理读操作,把写操作proxy给后面的Zookeeper。