zoopkeeper如何部署与容灾原理
本章介绍如何在2个测试服务器上部署zoopkeeper,并实现主从数据同步和容灾。
配置
- CentOS Linux release 7.4.1708 (Core)
- jdk-7u80-linux-x64
- zookeeper-3.4.11.tar.gz
可能用到的zk命令:
zkServer.sh start
zkServer.sh stop
zkServer.sh status
zkCli.sh -server ip:port
create /node nodeName
get /node
setAcl path acl
getAcl path
quit
1.上传zookeeper到zookeeper目录并解压,并建立data目录,logs目录
tar zxvf zookeeper-3.4.11.tar.gz

2.zoo.cfg基本配置
#数据目录
dataDir=/usr/zookeeper/data
#日志目录
dataLogDir=/usr/zookeeper/logs
#心跳间隔时间,zookeeper中使用的基本时间单位,毫秒值。每隔2秒发送一个心跳
tickTime=2000
#leader与客户端连接超时时间。表示5个心跳间隔
initLimit=5
#Leader与Follower之间的超时时间,表示2个心跳间隔
syncLimit=2
#客户端连接端口。多个实例的端口配置不可重复
clientPort=2181
#server.NUM=IP:port1:port2 NUM表示本机为第几号服务器,IP为本机ip地址,port1为leader与follower通信端口,port2为参与竞选leader的通信端口
#多个实例的端口配置不能重复,如下:
server.1=111.230.223.233:2888:3888
server.2=111.230.211.90:2888:3888
#server.3=我没有这么多节点所以注释掉:2888:3888
3.添加myid文件,myid文件存储一个数值,是ZooKeeper Server进程的标识。即上面配置中的server.后面的数字。
4.集群方式启动
zkServer.sh start
5.查看状态
zkServer.sh status

原因是配置的机器111.230.211.90没有配置正确,先注释掉再启动,启动成功,状态:Mode: standalone。配置正确启动后是这样的:
[root@VM_0_7_centos bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@VM_0_7_centos bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg
Mode: follower
[root@VM_0_12_centos bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@VM_0_12_centos bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/zookeeper/zookeeper-3.4.11/bin/../conf/zoo.cfg
Mode: leader
在111.230.223.233上连接111.230.211.90
zkCli.sh -server 111.230.211.90:2181
//信息如下,连接成功
2018-03-19 11:43:36,614 [myid:] - INFO [main-SendThread(111.230.211.90:2181):ClientCnxn$SendThread@1035] - Opening socket connection to server 111.230.211.90/111.230.211.90:2181. Will not attempt to authenticate using SASL (unknown error)
Welcome to ZooKeeper!
JLine support is enabled
2018-03-19 11:43:36,656 [myid:] - INFO [main-SendThread(111.230.211.90:2181):ClientCnxn$SendThread@877] - Socket connection established to 111.230.211.90/111.230.211.90:2181, initiating session
[zk: 111.230.211.90:2181(CONNECTING) 0] 2018-03-19 11:43:36,781 [myid:] - INFO [main-SendThread(111.230.211.90:2181):ClientCnxn$SendThread@1302] - Session establishment complete on server 111.230.211.90/111.230.211.90:2181, sessionid = 0x2000acd6fea0000, negotiated timeout = 30000
然后在111.230.211.90上创建一个叫qyswfx节点,这个节点会以znode的形式存储在111.230.211.90机器上,并同步到其他机器。
[zk: 111.230.211.90:2181(CONNECTED) 2] create /qyswfx qyswfx_node
Created /qyswfx
[zk: 111.230.211.90:2181(CONNECTED) 3] get /qyswfx
qyswfx_node
cZxid = 0x100000002
ctime = Mon Mar 19 14:07:31 CST 2018
mZxid = 0x100000002
mtime = Mon Mar 19 14:07:31 CST 2018
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0
在111.230.211.90上连接111.230.223.233,可以查看到节点已经同步
[zk: 111.230.223.233:2181(CONNECTED) 7] get /qyswfx
qyswfx_node
cZxid = 0x100000002
ctime = Mon Mar 19 14:07:31 CST 2018
mZxid = 0x100000002
mtime = Mon Mar 19 14:07:31 CST 2018
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 0
此时集群配置完成,如果leader节点挂掉,根据算法会有一个follower节点被选举为leader节点。