Zookeeper
协同服务系统。
分布式系统协同处理。
小集群.
Stand-alone
文件系统层级结构存储。
path:/home/centos/xxx = znode ---> byte[] <= 1M
节点类型:1. 永久 2.临时 3.序列节点。10递增.
数据状态:版本.
zkServer.sh start
zkServer.sh status
zkCli.sh -server s201:2181
[zkCli]ls /
[zkCli]create / ""
[zkCli]get /
[zkCli]set /
[zkCli]rmr /
api
ZooKeeper zk = new ZooKeeper("s201:2181,s202:2181,...");
l'architecture ZK
1.Client
从server获取信息,周期性发送数据给server,表示自己还活着。
client连接时,server回传ack信息。
如果client没有收到reponse,自动重定向到另一个server.
2.Server
zk集群中的一员,向client提供所有service,回传ack信息给client,表示自己还活着。
3.ensemble
一组服务器。
最小节点数是3.
4.Leader
如果连接的节点失败,自定恢复,zk服务启动时,完成leader选举。
5.Follower
追寻leader指令的节点。
znode
zk中的节点,维护了stat,由Version number, Action control list (ACL), Timestamp,Data length.构成.
data version //数据写入的过程变化
ACL //action control list,
type de noeud
1.持久节点
client结束,还存在。
2.临时节点
在client活动时有效,断开自动删除。临时节点不能有子节点。
leader推选是使用。
3.序列节点
在节点名之后附加10个数字,主要用于同步和锁.
Session
Session中的请求以FIFO执行,一旦client连接到server,session就建立了。sessionid分配client.
client以固定间隔向server发送心跳,表示session是valid的,zk集群如果在超时时候,没有收到心跳,
判定为client挂了,与此同时,临时节点被删除。
Montres
观察。
client能够通过watch机制在数据发生变化时收到通知。
client可以在read 节点时设置观察者。watch机制会发送通知给注册的客户端。
观察模式只触发一次。
session过期,watch机制删除了。
ZK flux de travail
zk集群启动后,client连接到其中的一个节点,这个节点可以leader,也可以follower。
连通后,node分配一个id给client,发送ack信息给client。
如果客户端没有收到ack,连接到另一个节点。
client周期性发送心跳信息给节点保证连接不会丢失。
如果client读取数据,发送请求给node,node读取自己数据库,返回节点数据给client.
如果client存储数据,将路径和数据发送给server,server转发给leader。
leader再补发请求给所有follower。只有大多数(超过半数)节点成功响应,则
写操作成功。
processus de sélection des chefs (minimum loi électorale)
1.所有节点在同一目录下创建临时序列节点。
2.节点下会生成/xxx/xx000000001等节点。
3.序号最小的节点就是leader,其余就是follower.
4.每个节点观察小于自己节点的主机。(注册观察者)
5.如果leader挂了,对应znode删除了。
6.观察者收到通知。
Configuration du cluster entièrement distribué ZK
1.挑选3台主机
s201 ~ s203
2.每台机器都安装zk
tar
环境变量
3.配置zk配置文件
s201 ~ s203
[/soft/zk/conf/zoo.cfg]
...
dataDir=/home/centos/zookeeper
server.1=s201:2888:3888
server.2=s202:2888:3888
server.3=s203:2888:3888
4.在每台主机的/home/centos/zookeeper中添加myid,内容分别是1,2,3
[s201]
$>echo 1 > /home/centos/zookeeper/myid
[s202]
$>echo 2 > /home/centos/zookeeper/myid
[s203]
$>echo 3 > /home/centos/zookeeper/myid
5.启动服务器集群
$>zkServer.sh start
...
6.查看每台服务器的状态
$>zkServer.sh status
7.修改zk的log目录