最近读了《ZooKeeper:分布式过程协同技术详解》,感觉收获不少,为了加深自己的理解,同时也希望能对其他人有些帮助,在此记录书中较为重要的内容。本文主要关注ZooKeeper的安装与简单的使用。其他内容请关注后续章节。
ZooKeeper是什么
Zookeeper 为分布式系统提供了高效可靠且易于使用的协同服务,它可以为分布式应用提供相当多的服务,诸如统一命名服务,配置管理,状态同步和组服务等。 Zookeeper 接口简单,开发人员不必过多地纠结在分布式系统编程难于处理的同步和一致性问题上,你可以使用 Zookeeper 提供的现成(off-the-shelf)服务来实现分布式系统的配置管理,组管理,Leader 选举等功能。具体请参考ZooKeeper Wiki,下图展示了ZooKeeper的整体架构图。
ZooKeeper安装及启动
安装过程非常简单,到ZooKeeper官网上下载安装包,然后解压( tar -zxvf zookeeper-x.x.x.tar.gz
)到合适的目录下即可。解压之后的目录结构如下
在bin目录下有对应的启动和关闭脚本,例如Mac环境下可执行如下语句启动和关闭ZooKeeper服务。
服务器启动
[path to zookeeper]/bin/zkServer.sh start
服务器关闭
[path to zookeeper]/bin/zkServer.sh stop
客户端启动
[path to zookeeper]/bin/zkCli.sh
客户端连接服务器的过程其实就是创建一个会话(session)的过程,而session的状态主要包含Connecting, Connected, Closed, Not_Connected, 状态之间的转换依赖于客服端与服务器之间的各种事件。
ZooKeeper集群模式
上述操作都是基于ZooKeeper的单机模式下完成的,一旦ZooKeeper服务器宕机,整个服务就不可用了,所以ZooKeeper提供了集群模式,并且配置非常简单。
在ZooKeeper跟目录下创建z1, z2, z3目录,并按照下面的结构分别在z1,z2,z3目录下创建文件或者文件夹,文件myid的内容分别写服务编号,比如z1下可写1, echo 1 > myid
.
z1.cfg的内容按照下面的格式填写,在z2或者z3的目录下,修改对应的文件名和clientPort,
配置结束之后就可启动了。 由于存在仲裁模式,所以至少启动两台,整个服务集群才能被启动过成功。
cd z1
[path to zookeeper]/bin/zkServer.sh start ./z1.cfg