阅读 155

zookeeper-1.安装使用

单机部署

1. 下载解压

2. 配置conf/zoo.cfg

tickTime=2000    ##Zookeeper最小时间单元,单位毫秒(ms),默认值为3000
dataDir=/var/lib/zookeeper    ##Zookeeper服务器存储快照文件的目录,必须配置
dataLogDir=/var/lib/log     ##Zookeeper服务器存储事务日志的目录,默认为dataDir
clientPort=2181    ##服务器对外服务端口,一般设置为2181
initLimit=5    ##The number of ticks that the initial synchronization phase can take
syncLimit=2    ##The number of ticks that can pass between sending a request and getting an acknowledgment
#zookeeper在3.4.0版本以后提供了自动清理snapshot和事务日志的功能通过配置 autopurge.snapRetainCount 和 autopurge.purgeInterval 这两个参数能够实现定时清理了。这两个参数都是在zoo.cfg中配置的:
#autopurge.purgeInterval 这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是0,表示不开启自己清理功能。
#autopurge.snapRetainCount 这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个。
autopurge.snapRetainCount=60 
autopurge.purgeInterval=48#保留48小时内的日志,并且保留60个文件(经验证配置有效)
## 集群配置 
##其中,id 被称为 Server ID,用来标识该机器在集群中的机器序号
##host 为机器 IP
##port1 用于指定 Follower 服务器与 Leader 服务器进行通信和数据同步的端口
##port2 用于进行 Leader 选举过程中的投票通信。
server.1=IP1:2888:3888
server.2=IP2:2888:3888
server.3=IP3:2888:3888
##在每台机器的 dataDir 目录下创建 myid 文件,文件内容即为该机器对应的 Server ID 数字
复制代码

3. 启动

./bin/zkServer.sh start

4. 状态查看

./bin/zkServer.sh status

5. 测试

./bin/zkCli.sh ls / create /zkPro myData get /zkPro set /zkPro myData2 get /zkPro delete /zkPro quit

远程机器 ./bin/zkCli.sh -server ip:port

集群部署

配置

server.1=172.17.0.4:2888:3888
server.2=172.17.0.5:2888:3888
server.3=172.17.0.6:2888:3888
复制代码

echo 1 > /tmp/zookeeper/myid [toc]

查看zookeeper transaction log:

java -cp ./lib/zookeeper-3.4.6.jar:lib/log4j-1.2.17.jar:lib/slf4j-log4j12-1.7.5.jar:lib/slf4j-api-1.7.7.jar org.apache.zookeeper.server.LogFormatter data/zookeeper/version-2/log.1

java -cp ./lib/zookeeper-3.4.6.jar:./lib/slf4j-api-1.6.1.jar org.apache.zookeeper.server.SnapshotFormatter snapshot.17

java -cp ./lib/zookeeper-3.6.1.jar:lib/log4j-1.2.17.jar:lib/slf4j-log4j12-1.7.25.jar:lib/slf4j-api-1.7.25.jar:./lib/zookeeper-jute-3.6.1.jar org.apache.zookeeper.server.SnapshotFormatter /tmp/zookeeper/version-2/snapshot.200000015

java -cp ./lib/zookeeper-3.6.1.jar:lib/log4j-1.2.17.jar:lib/slf4j-log4j12-1.7.25.jar:lib/slf4j-api-1.7.25.jar:./lib/zookeeper-jute-3.6.1.jar org.apache.zookeeper.server.LogFormatter /tmp/zookeeper/version-2/log.100000001

[root@zk01 apache-zookeeper-3.6.1-bin]# java -cp ./lib/*:./lib/zookeeper-3.6.1.jar org.apache.zookeeper.server.SnapshotFormatter /tmp/zookeeper/version-2/snapshot.200000015
ZNode Details (count=8):
/----
/
  cZxid = 0x00000000000000
  ctime = Thu Jan 01 08:00:00 CST 1970
  mZxid = 0x00000000000000
  mtime = Thu Jan 01 08:00:00 CST 1970
  pZxid = 0x00000100000005
  cversion = 1
  dataVersion = 0
  aclVersion = 0
  ephemeralOwner = 0x00000000000000
  dataLength = 0
/----
/zookeeper
  cZxid = 0x00000000000000
  ctime = Thu Jan 01 08:00:00 CST 1970
  mZxid = 0x00000000000000
  mtime = Thu Jan 01 08:00:00 CST 1970
  pZxid = 0x00000000000000
  cversion = 0
  dataVersion = 0
  aclVersion = 0
  ephemeralOwner = 0x00000000000000
  dataLength = 0
/----
/zookeeper/config
  cZxid = 0x00000000000000
  ctime = Thu Jan 01 08:00:00 CST 1970
  mZxid = 0x00000000000000
  mtime = Sat Jan 16 11:28:05 CST 2021
  pZxid = 0x00000000000000
  cversion = 0
  dataVersion = -1
  aclVersion = -1
  ephemeralOwner = 0x00000000000000
  dataLength = 135
/----
/zookeeper/quota
  cZxid = 0x00000000000000
  ctime = Thu Jan 01 08:00:00 CST 1970
  mZxid = 0x00000000000000
  mtime = Thu Jan 01 08:00:00 CST 1970
  pZxid = 0x00000000000000
  cversion = 0
  dataVersion = 0
  aclVersion = 0
  ephemeralOwner = 0x00000000000000
  dataLength = 0
/----
/test
  cZxid = 0x00000100000005
  ctime = Thu Jan 14 20:39:35 CST 2021
  mZxid = 0x00000100000006
  mtime = Thu Jan 14 20:45:15 CST 2021
  pZxid = 0x00000100000007
  cversion = 1
  dataVersion = 1
  aclVersion = 0
  ephemeralOwner = 0x00000000000000
  dataLength = 4
[root@zk01 apache-zookeeper-3.6.1-bin]# java -cp ./lib/*:./lib/zookeeper-3.6.1.jar org.apache.zookeeper.server.LogFormatter /tmp/zookeeper/version-2/log.900000001
ZooKeeper Transactional Log File with dbid 0 txnlog format version 2
21-1-16 下午10时20分24秒 session 0x100004d11a80000 cxid 0x0 zxid 0x900000001 createSession 30000
 2,12423198993
21-1-16 下午10时24分47秒 session 0x100004d11a80003 cxid 0x3 zxid 0x900000008 create '/zk_test,#6d795f64617461,v{s{31,s{'world,'anyone}}},F,2
 2,15054177933
复制代码

查看zookeeper state

Usage: ./bin/zkServer.sh [--config ] {start|start-foreground|stop|version|restart|status|print-cmd}

command

./bin/zkCli.sh -server host:port -client-configuration properties-file cmd args

get -s /test
“节点数据内容”
cZxid = 0x20000000e ctime = Thu Jun 30 20:41:55 HKT 2016
mZxid = 0x20000000e
mtime = Thu Jun 30 20:41:55 HKT 2016
pZxid = 0x20000000e
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 4
numChildren = 0
复制代码
  • 版本号:

•dataVersion 数据版本号,set操作,增加1。 •cversion 子节点的版本号。子节点变化时,增加1。 •aclVersion ACL(Access Control List,访问控制)的版本号。

在zk的操作中指定的版本号如果跟当前版本号不一致,则操作失败。

  • 事务ID:

每次变化都会产生一个唯一的事务id,zxid(ZooKeeper Transaction Id)。通过zxid,可以确定更新操作的先后顺序。

  • cZxid

Znode创建的事务id。

  • mZxid

Znode被修改的事务id,即每次对znode的修改都会更新mZxid。

zxid是一个64位的数字, 高32位是epoch用来标识leader关系是否改变,每次一个leader被选出来,它都会有一个新的epoch,标识当前属于那个leader的统治时期。

低32位用于递增计数(低32位从0开始,表示该leader统治期间事务编号)。

[zk: 127.0.0.1:2181(CONNECTED) 2] stat -w /seq0000000007
cZxid = 0x900000064
ctime = Sat Jan 16 22:56:28 CST 2021
mZxid = 0x900000064
mtime = Sat Jan 16 22:56:28 CST 2021
pZxid = 0x900000064
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: 127.0.0.1:2181(CONNECTED) 4] delete /seq0000000007

WATCHER::
WatchedEvent state:SyncConnected type:NodeDeleted path:/seq0000000007

复制代码

create -e -s /test_ephemerol_seq

文章分类
后端
文章标签