zookeeper集群快速搭建
Zookeeper是Google的一个开源实现,被Hadoop、dubbo等流行开源架构作为分布式协调服务,它很好地实现了多个进程间的同步,维护和命名等功能。
三分钟搭一个ZK集群
-
下载ZK包
去选包:http://zookeeper.apache.org/releases.html#download
或直接下载(2018年12月最新稳定版):http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/
-
在windows或unix中解压,我们搭三个ZK的集群,所以在三台服务器中分别解压
unix:
[root]$ tar zxfv zookeeper-3.4.13.tar.gz
-
修改配置文件
在三台服务器中分别配置,找到zoo-sample.cfg,改名为zoo.cfg,覆盖内容
tickTime=2000
initLimit=5
syncLimit=2
dataDir=C:\\Users\\Administrator\\Desktop\\zookeeper\\data
dataLogDir=C:\\Users\\Administrator\\Desktop\\zookeeper\\log
clientPort=2181
server.1=host1:2888:3888
server.2=host2:2888:3888
server.3=host3:2888:3888
dataDir和dataLogDir修改为自己的目录,host1、host2、host3修改为自己的服务器IP
-
myid配置
在上述配置中的dataDir目录下新建myid文件,里面的值在三台服务器中分别为1、2、3
ok,自此已全部配置完毕 -
启动
在bin目录下(当然,也可以将ZK配到环境变量中),分别在三台服务器执行
windows:
[root]$ zkServer.cmd
unix:
[root]$ ./zkServer.sh start
完美启动
- 连接shell-cli
在bin目录下,任意一台服务器中执行
windows:
[root]$ zkCli.cmd -server 127.0.0.1:2181
unix:
[root]$ ./zkCli.sh -server 127.0.0.1:2181
配置完毕,启动并连接测试完毕
zookeeper 常用shell
- 创建节点
[root]$ create /path1 # 创建path1节点
[root]$ create /path1/dir1 # 在path1节点中添加敌人dir1节点
[root]$ create /path1/dir2 # 在path1节点中添加敌人dir2节点
- 添加/获取消息
[root]$ set /path1 message
[root]$ get /path1
- 删除空节点
[root]$ delete /path1
- 删除非空节点
[root]$ rmr /path1
zoo.cfg配置详解
1.tickTime:CS通信心跳时间
Zookeeper 服务器之间或客户端与服务器之间维持心跳的时间间隔,也就是每个 tickTime 时间就会发送一个心跳。tickTime以毫秒为单位。
tickTime=2000
2.initLimit:LF初始通信时限
集群中的follower服务器(F)与leader服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。
initLimit=5
3.syncLimit:LF同步通信时限
集群中的follower服务器与leader服务器之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。
syncLimit=2
4.dataDir:数据文件目录
Zookeeper保存数据的目录,默认情况下,Zookeeper将写数据的日志文件也保存在这个目录里。win系统下必须\\
dataDir=/home/michael/opt/zookeeper/data
dataLogDir=/home/michael/opt/zookeeper/log
5.clientPort:客户端连接端口
客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求。
clientPort=2181
6.服务器名称与地址:集群信息(服务器编号,服务器地址,LF通信端口,选举端口)
这个配置项的书写格式比较特殊,规则如下:
server.host:A:B
server.1=host1:2888:3888
server.2=host2:2888:3888
server.3=host3:2888:3888
同时在dataDir文件夹下新建myid文件,里面的值为1、2、3
集群实例数量控制
-
存活的实例必须过半数
zk集群将消息通知到过半存活的leader实例后直接返回用户,增加反馈及时性,所以为了在多个leader node间保持数据的一致性,存活的实例必须过半 -
数量最好是奇数
6过半是3,5过半也是3,实例数目越多,网络开销以及实例之间协调的耗费也会比较大