介绍
ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现。
参考:http://blog.csdn.net/u013068377/article/details/52620647
http://blog.csdn.net/xuxiuning/article/details/51218941
zookeeper官方文档:https://zookeeper.apache.org/doc/trunk/
最好还是读官方文档,很详细。
安装
这里以Linux为例。
zookeeper官网:https://zookeeper.apache.org/
从官网下载最新稳定版本,这里测试版本为3.4.9.
下载后,解压缩
tar -xvf zookeeper-3.4.9.tar.gz
注意:zookeeper运行需要依赖java环境,所以需要配置好java环境。
单机配置
在
Z
O
O
K
E
E
P
E
R
H
O
M
E
ZOOKEEPER_HOME
ZOOKEEPERHOME/conf目录下,新建zoo.cfg文件。
内容如下:
tickTime=2000
dataDir=/var/zookeeper
clientPort=2181
具体的配置参数的含义后面介绍。
配置完毕后,在 Z O O K E E P E R H O M E ZOOKEEPER_HOME ZOOKEEPERHOME执行下面的命令启动zookeeper
./bin/zkServer.sh start &
伪集群配置
参考“集群配置”,伪集群实际上是在一台机器部署多个zookeeper实例来构建集群,因为是同一台机器,所以各个zookeeper实例的端口与dataDir不同。
配置参考:
tickTime=2000
dataDir=/var/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=localhost:2887:3887
server.2=localhost:2888:3888
server.3=localhost:2889:3889
集群配置
为了获得可靠的zookeeper服务,实际使用应该部署zookeeper集群。只要多于半数的zookeeper服务OK,那么整个zookeeper服务也是OK的。
而且,部署时最好部署奇数台zookeeper服务。
在每个zookeeper实例的dataDir参数指定的目录中,创建一个名为myid的文件,文件的内容指定自身的id值。
假设部署3台zookeeper构成的集群,分别命名为server1,server2,server3,那么server1的myid的内容就是1,server2的myid的内容就是2,等等…
每个zookeeper的conf目录中,新建zoo.cfg,内容如下:
tickTime=2000
dataDir=/var/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=server1:2888:3888
server.2=server2:2888:3888
server.3=server3:2888:3888
server.id=host:port:port,指示了集群中所有zookeeper。第一个port是follower与leader通信的端口,第2个port是进行leader选举的端口。
zookeeper配置参数
tickTime:心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为2个心跳时间
initLimit:多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值
clientPort:服务的监听端口
dataDir:用于存放内存数据库快照的文件夹,同时用于集群的myid文件也存在这个文件夹里(注意:一个配置文件只能包含一个dataDir字样,即使它被注释掉了。)
dataLogDir:用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争
syncLimit:多少个tickTime内,允许follower同步,如果follower落后太多,则会被丢弃。
server.A=B:C:D:
A是一个数字,表示这个是第几号服务器,B是这个服务器的ip地址
C第一个端口用来集群成员的信息交换,表示的是这个服务器与集群中的Leader服务器交换信息的端口
D是在leader挂掉时专门用来进行选举leader所用