zookeeper:zk
保证高可靠、高可用的协同服务
集中式服务,用于配置信息,名称服务,分布式同步处理
ZK组件
1.Client
向Server周期性发送信息,表明自己还活着,Server向Client回应确认消息。
Client没有收到响应,自动重定向消息到其他的Server
2.Server
一个ZK节点,向Client提供所有服务,通知Client,Server是Alive的。
3.Ensemble
全体,一组ZK节点,需要最小值为3
4.Leader
领袖,特殊的ZK节点,ZK集群启动时,推选Leader
5.Follower
随从,听命于Leader的指令
ZK的namespace等级结构
1.驻留在内存的
2.树上的每个节点都是Znode
3.每个Znode都有name,而且用/分割
4.每个Znode存放的数据不能超过1M
5.每个节点都有Stat对象
a.Version:与之关联的数据发生改变时,版本增加。
b.ACL:Action Control List
c.Timestamp
d.Datalength
ZK Znode节点类型
1.持久节点
2.临时节点
3.顺序节点
ZK安装
1.下载ZK
2.安装JDK
3.tar开
4.配置环境变量
ZOOKEEPER_HOME=
PATH=..
部署ZK
1.单机版
a.创建配置conf/zoo.cfg配置
tickTime=2000
dataDir=/path/to/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2
b.启动zkServer
$>bin/zkServer.sh start
c.启动zkClient
$>zkCli.sh
2.完全分布式
a.确定主机
s101
s102
s103
b.配置${datadir}/myid文件
101
c.配置zoo.cfg,默认的配置文件
...
server.101=192.168.88.101:2888:3888
server.102=192.168.88.102:2888:3888
server.103=192.168.88.103:2888:3888
...
配置ZK
1.配置文件
[conf/zoo_sample.conf]
#每次心跳的毫秒数
tickTime=2000
#开始同步阶段的心跳数
initLimit=10
#发送请求和得到确认之间可以传递的心跳个数。
syncLimit=5
#存放ZK的快照目录,不要存在/tmp下
dataDir=/tmp/zookeeper
客户端连接的端口
clientPort=2181
通过ZK的API访问ZK集群
...
leader选举过程
1.所有节点在相同的path下创建各自的临时序列化节点
每个ZK都有自己对应的ZNODE
2.拥有最小编号的ZK是Leader,其他的ZK是Follower
3.每个Follower观察仅比自己小的那个node
008->007, 007->006,...
4.如果Leader下线了,则他对应的节点会删除。
5.观察者会发现Leader被删除了。
6.观察者查找是否还有最小的节点,如果有,最小值节点成为Leader,否则,观察者了Leader。
转载请注明:MitNick » zookeeper部署