zookeeper集群化部署

集群规划

Zookeeper_01机器,ip:192.168.88.161
Zookeeper_02机器,ip:192.168.88.162
Zookeeper_03机器,ip:192.168.88.163

myid 文件配置

在 ${dataDir}目录各机器新建 myid 文件

[root@zookeeper_01 ~]# vim software/zookeeper-3.4.14/zkData/myid
1
[root@zookeeper_02 ~]# vim software/zookeeper-3.4.14/zkData/myid
2
[root@zookeeper_03 ~]# vim software/zookeeper-3.4.14/zkData/myid
1

zoo.cfg 文件内容增加 Cluster 配置

##################Cluster##################
# server.A=B:C:D
# A:表示第几号服务器,myid中的数值
# B:此服务器的ip地址,或者hostname
# C:这个服务器与急群众的Leader服务器交换信息的端口,数据往来
# D:在Leader挂掉时,使用此端口来进行重新选举,选出新的Leader,此端口就是来执行选举是服务器相互通信的端口
server.1=192.168.88.161:2888:3888
server.2=192.168.88.162:2888:3888
server.3=192.168.88.163:2888:3888

集群操作

启动第一台服务,并查看状态为 not running

[root@zookeeper_01 zookeeper-3.4.14]# ./bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/software/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper_01 zookeeper-3.4.14]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/software/zookeeper-3.4.14/bin/../conf/zoo.cfg
Error contacting service. It is probably not running.

启动第二台服务,并查看状态,被选举为了Leader

[root@zookeeper_02 zookeeper-3.4.14]# ./bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/software/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper_02 zookeeper-3.4.14]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/software/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: leader

再查看第一台机器状态,启动成功了,为 Follower

[root@zookeeper_01 zookeeper-3.4.14]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/software/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower

启动第三台机器,并查看状态,为 Follower

[root@zookeeper_03 zookeeper-3.4.14]# ./bin/zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /root/software/zookeeper-3.4.14/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
[root@zookeeper_03 zookeeper-3.4.14]# ./bin/zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /root/software/zookeeper-3.4.14/bin/../conf/zoo.cfg
Mode: follower

客户端命令行操作

进入客户端

[root@zookeeper_01 bin]# ./zkCli.sh
Connecting to localhost:2181
2020-02-10 21:23:28,612 [myid:] - INFO  [main:Environment@100] - Client environment:zookeeper.version=3.4.14-
。。。。。。中间省略各种信息。。。。。
WatchedEvent state:SyncConnected type:None path:null

通过帮助命令,查看所有支持的操作命令

[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port cmd args
    stat path [watch]
    set path data [version]
    ls path [watch]
    delquota [-n|-b] path
    ls2 path [watch]
    setAcl path acl
    setquota -n|-b val path
    history
    redo cmdno
    printwatches on|off
    delete path [version]
    sync path
    listquota path
    rmr path
    get path [watch]
    create [-s] [-e] path data acl
    addauth scheme auth
    quit
    getAcl path
    close
    connect host:port

查看当前znode 中所包含的内容

[zk: localhost:2181(CONNECTED) 1] ls /
[zookeeper]

查看当前节点详细数据

[zk: localhost:2181(CONNECTED) 2] ls2 /
[zookeeper]
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

创建两个普通节点

[zk: localhost:2181(CONNECTED) 1] create /china "Shanghai"
Created /china
[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper, china]
[zk: localhost:2181(CONNECTED) 3] create /china/huadong "Nanjing"
Created /china/huadong
[zk: localhost:2181(CONNECTED) 4] ls /china
[huadong]

获取节点值

[zk: localhost:2181(CONNECTED) 5] get /


cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x200000003
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 2
[zk: localhost:2181(CONNECTED) 6] get /china
Shanghai
cZxid = 0x200000003
ctime = Mon Feb 10 21:30:40 CST 2020
mZxid = 0x200000003
mtime = Mon Feb 10 21:30:40 CST 2020
pZxid = 0x200000005
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 1
[zk: localhost:2181(CONNECTED) 7] get /china/huadong
Nanjing
cZxid = 0x200000005
ctime = Mon Feb 10 21:31:53 CST 2020
mZxid = 0x200000005
mtime = Mon Feb 10 21:31:53 CST 2020
pZxid = 0x200000005
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 7
numChildren = 0

创建短暂节点,quit客户端之后就消失

[zk: localhost:2181(CONNECTED) 8] create -e /china/huaxi "huanxicun"
Created /china/huaxi

创建带序号的节点

[zk: localhost:2181(CONNECTED) 14] create -s /china/huaxi "xiaguancun"
Created /china/huaxi0000000002
[zk: localhost:2181(CONNECTED) 15] create -s /china/huaxi "xiaguancun"
Created /china/huaxi0000000003
[zk: localhost:2181(CONNECTED) 16] create -s /china/huaxi "xiaguancun"
Created /china/huaxi0000000004

修改节点数据值

[zk: localhost:2181(CONNECTED) 22] get /china/huaxi
huanxicun
cZxid = 0x200000006
ctime = Mon Feb 10 21:35:23 CST 2020
mZxid = 0x200000006
mtime = Mon Feb 10 21:35:23 CST 2020
pZxid = 0x200000006
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x1000001e1080001
dataLength = 9
numChildren = 0
[zk: localhost:2181(CONNECTED) 23] set /china/huaxi "huanancun"
cZxid = 0x200000006
ctime = Mon Feb 10 21:35:23 CST 2020
mZxid = 0x20000000a
mtime = Mon Feb 10 21:39:37 CST 2020
pZxid = 0x200000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x1000001e1080001
dataLength = 9
numChildren = 0
[zk: localhost:2181(CONNECTED) 24] get /china/huaxi            
huanancun
cZxid = 0x200000006
ctime = Mon Feb 10 21:35:23 CST 2020
mZxid = 0x20000000a
mtime = Mon Feb 10 21:39:37 CST 2020
pZxid = 0x200000006
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x1000001e1080001
dataLength = 9
numChildren = 0

监听结点值变化

###在C机器启用监听,监听只能有效一次
[zk: localhost:2181(CONNECTED) 2] get /japan watch
nailiang
cZxid = 0x20000000d
ctime = Mon Feb 10 21:43:49 CST 2020
mZxid = 0x20000000d
mtime = Mon Feb 10 21:43:49 CST 2020
pZxid = 0x20000000d
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 0
###在A机器进行设置
[zk: localhost:2181(CONNECTED) 28] set /japan "daban"   
cZxid = 0x20000000d
ctime = Mon Feb 10 21:43:49 CST 2020
mZxid = 0x20000000f
mtime = Mon Feb 10 21:44:13 CST 2020
pZxid = 0x20000000d
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
###在C机器就监听到了设置
[zk: localhost:2181(CONNECTED) 3]
WATCHER::


WatchedEvent state:SyncConnected type:NodeDataChanged path:/japan

监听节点的子节点的变化,同样只监听一次有效

[zk: localhost:2181(CONNECTED) 3] ls /japan watch

删除节点

[zk: localhost:2181(CONNECTED) 2] delete /japan/c
[zk: localhost:2181(CONNECTED) 3] get /japan/c   
Node does not exist: /japan/c

递归删除,rmr

[zk: localhost:2181(CONNECTED) 7] rmr /japan
[zk: localhost:2181(CONNECTED) 8] get /japan
Node does not exist: /japan

查看节点状态,详细信息

[zk: localhost:2181(CONNECTED) 9] stat /china
cZxid = 0x200000003
ctime = Mon Feb 10 21:30:40 CST 2020
mZxid = 0x200000003
mtime = Mon Feb 10 21:30:40 CST 2020
pZxid = 0x200000012
cversion = 6
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 4


###################### stat 结构体 ###################
# cZxid:创建节点的事务 zxid
# ctime:znode被创建的毫秒数(从1970年开始)
# mZxid:znode最后更新的事务zxid
# mtime:znode最后修改的毫秒数(从1970年开始)
# pZxid:znode最后更新的子节点zxid
# cversion:znode子节点变化号,znode子节点修改次数
# dataVersion:znode数据变化号
# aclVersion:znode访问控制列表的变化号
# ephemeralOwner:如果是临时节点,这个是znode拥有者的session id,如果不是临时节点则是0
# dataLength:znode的数据长度
# numChildren:znode子节点数量
[zk: localhost:2181(CONNECTED) 9] stat /china
cZxid = 0x200000003
ctime = Mon Feb 10 21:30:40 CST 2020
mZxid = 0x200000003
mtime = Mon Feb 10 21:30:40 CST 2020
pZxid = 0x200000012
cversion = 6
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 8
numChildren = 4