Zookeeper 笔记

1. 什么是zookeeper

ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

  • 管理系统中独特的/统一的信息
  • 集群状态监控和通知
  • 协调资源抢占(锁)
  • 分派计算任务

2. 搭建集群

2.1 配置zoo.cfg

操作很简单,从官网下载zookeeper,解压后修改conf目录下的zoo_sample.cfg,改名为zoo.cfg,具体内容如下


# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial 
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between 
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just 
# example sakes.
dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/datalog
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider  
requireClientAuthScheme=sasl  
jaasLoginRenew=3600000 
# Be sure to read the maintenance section of the 
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=192.168.3.164:2888:3888
server.2=192.168.3.165:2888:3888

这里只是做了两个节点的集群(一般是3个以上),配置好了一个服务器上的zookeeper,只用scp到另外几个服务器上就好了。

2.2 编写myid文件

注意到zoo.cfg中有如下配置信息,164服务器对应server.1,165服务器对应server.2。

我们需要为这两个节点创建对应的编号文件,在(dataDir)/usr/local/zookeeper/data/myid文件中,分别是数字1和数字2

dataDir=/usr/local/zookeeper/data
server.1=192.168.3.164:2888:3888
server.2=192.168.3.165:2888:3888

164   myid 文件

1

165  myid 文件

2

2.3 启动zookeeer

zkServer.sh start

查看是否启动

[root@localhost bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Mode: leader

或者  用jps命令查看    QuorumPeerMain即是zookeeper的运行程序

[root@localhost bin]# jps
1585 jar
4993 jar
5089 jar
4170 Jps
27598 jar
4863 jar
3487 QuorumPeerMain

3. 常用指令和存储结构

3.1 连接zookeeper以及常用指令

采用zkCli.sh 指定ip:port ,连接zookeeper server集群中的一个节点

[root@localhost bin]# ./zkCli.sh -server 192.168.3.164:2181

ls /****  可查看zookeeper根目录下所有节点,路径必须是绝对路径

[zk: 192.168.3.164:2181(CONNECTED) 0] ls /
[cluster, brokers, zookeeper, kafka-acl, kafka-acl-changes, admin, isr_change_notification, log_dir_event_notification, controller_epoch, kafka-acl-extended, kafka-acl-extended-changes, consumers, latest_producer_id_block, config]

ls2 /*** 查看节点的具体信息

[zk: 192.168.3.164:2181(CONNECTED) 1] ls2 /cluster
[id]
cZxid = 0x20000001a
ctime = Fri Sep 21 03:02:39 EDT 2018
mZxid = 0x20000001a
mtime = Fri Sep 21 03:02:39 EDT 2018
pZxid = 0x20000001b
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1

还有其他一些有用的指令

3.2 查看日志

在conf/zoo.cfg中有规定数据和日志存储目录

dataDir=/usr/local/zookeeper/data
dataLogDir=/usr/local/zookeeper/datalog

进入日志目录,发现文件都记录在version-2的文件夹下

[root@localhost conf]# cd ../datalog
[root@localhost datalog]# ls
version-2
[root@localhost datalog]# cd version-2/
[root@localhost version-2]# ll
total 65636
-rw-r--r-- 1 root root 67108880 Sep 26 09:25 log.200000001
-rw-r--r-- 1 root root 67108880 Sep 28 11:33 log.500000001
-rw-r--r-- 1 root root 67108880 Jan  3 20:26 log.600000001

  1. 文件名为log,后缀为十六进制的ZXID,数字越大代表时间越近
  2. 日志文件头有:magic、version、dbid
  3. 创建文件后分配的文件大小为:67108864字节+16字节,其中16字节为文件头
  4. 使用Adler32作为日志文件的校验码
  5. 当日志文件写满预分配大大小后就扩充日志文件一倍大小

直接用vim打开文件,看不懂就对了。我们需要借助  zookeeper-3.4.12.jar 和 lib/slf4j-api-1.7.25.jar 来解读日志。

ZKLG^@^@^@^B^@^@^@^@^@^@^@^@^@^@^@^@M<98>^Gï^@^@^@$^A^@^D^[I1^@^@^@^@^@^@^@^@^@^B^@^@^@^A^@^@^AeúÒ<84>^Cÿÿÿö^@^@u0B^@^@^@^@3!^Gÿ^@^@^@ ^A^@^D^[I1^@^@^@^@^@^B^@^@^@^B^@^@^@^B^@^@^AeúÒ<9a> ÿÿÿõB^@^@^@^@c¤      <9a>^@^@^@$^B^@^D^[Qt^@^@^@^@^@^@^@^@^@^B^@^@^@^C^@^@^AeúÒèüÿÿÿö^@^@u0B^@^@^@^@<·^H<84>^@^@^@ ^B^@^D^[Qt^@^@^@^@^@^B^@^@^@^B^@^@^@^D^@^@^AeúÒò^?ÿÿÿõB^@^@^@^@Y<93>^Hz^@^@^@$^B^@^D^[Qt^@^A^@^@^@^@^@^@^@^B^@^@^@^E^@^@^Aeúð^E¼ÿÿÿö^@^@^WpB^@^@^@^@M^Q^Pk^@^@^@R^B^@^D^[Qt^@^A^@^@^@^A^@^@^@^B^@^@^@^F^@^@^Aeúð^F1^@^@^@^A^@^@^@
/consumersÿÿÿÿ^@^@^@^A^@^@^@^_^@^@^@^Eworld^@^@^@^Fanyone^@^@^@^@^AB^@^@^@^@_<97>^K6^@^@^@$^B^@^D^[Qt^@^A^@^@^@^B^@^@^@^B^@^@^@^G^@^@^Aeúð^FYÿÿÿÿÿÿÿ<9b>B^@^@^@^@)b^O¼^@^@^@P^B^@^D^[Qt^@^A^@^@^@^C^@^@^@^B^@^@^@^H^@^@^Aeúð^Ff^@^@^@^A^@^@^@^H/brokersÿÿÿÿ^@^@^@^A^@^@^@^_^@^@^@^Eworld^@^@^@^Fanyone^@^@^@^@^BB^@^@^@^@}å^Q4^@^@^@T^B^@^D^[Qt^@^A^@^@^@^D^@^@^@^B^@^@^@       ^@^@^Aeúð^Fj^@^@^@^A^@^@^@^L/brokers/idsÿÿÿÿ^@^@^@^A^@^@^@^_^@^@^@^Eworld^@^@^@^Fanyone^@^@^@^@^AB^@^@^@^@Ëy^R<90>^@^@^@W^B^@^D^[Qt^@^A^@^@^@^E^@^@^@^B^@^@^@
^@^@^Aeúð^Fn^@^@^@^A^@^@^@^O/brokers/topicsÿÿÿÿ^@^@^@^A^@^@^@^_^@^@^@^Eworld^@^@^@^Fanyone^@^@^@^@^BB^@^@^@^@a ^KW^@^@^@$^B^@^D^[Qt^@^A^@^@^@^F^@^@^@^B^@^@^@^K^@^@^Aeúð^Frÿÿÿÿÿÿÿ<9b>B^@^@^@^@^U/^OR^@^@^@O^B^@^D^[Qt^@^A^@^@^@^G^@^@^@^B^@^@^@^L^@^@^Aeúð^Fv^@^@^@^A^@^@^@^G/configÿÿÿÿ^@^@^@^A^@^@^@^_^@^@^@^Eworld^@^@^@^Fanyone^@^@^@^@^CB^@^@^@^@Å<8d>^Re^@^@^@W^B^@^D^[Qt^@^A^@^@^@^H^@^@^@^B^@^@^@^M^@^@^Aeúð^Fy^@^@^@^A^@^@^@^O/config/changesÿÿÿÿ^@^@^@^A^@^@^@^_^@^@^@^Eworld^@^@^@^Fanyone^@^@^@^@^AB^@^@^@^@b^A^Kh^@^@^@$^B^@^D^[Qt^@^A^@^@^@      ^@^@^@^B^@^@^@^N^@^@^Aeúð^F}ÿÿÿÿÿÿÿ<9b>B^@^@^@^@^B<85>^Nõ^@^@^@N^B^@^D^[Qt^@^A^@^@^@

将 zookeeper-3.4.12.jar 和 lib/slf4j-api-1.7.25.jar 拷贝到 datalog文件夹下,然后执行以下命令,借助LogFormatter类阅读日志

[root@localhost version-2]# cd /usr/local/zookeeper/datalog/version-2
[root@localhost version-2]# ls
log.200000001  log.500000001  log.600000001
[root@localhost version-2]# java -cp ../zookeeper-3.4.12.jar:../slf4j-api-1.7.25.jar org.apache.zookeeper.server.LogFormatter log.500000001 


9/27/18 8:12:45 AM EDT session 0x20052a3f87e0012 cxid 0x0 zxid 0x5000002f4 createSession 6000

9/27/18 8:12:46 AM EDT session 0x20052a3f87e0012 cxid 0x2 zxid 0x5000002f5 error -110

9/27/18 8:12:46 AM EDT session 0x20052a3f87e0012 cxid 0x3 zxid 0x5000002f6 error -110

9/27/18 8:12:46 AM EDT session 0x20052a3f87e0012 cxid 0x4 zxid 0x5000002f7 error -110

9/27/18 8:12:46 AM EDT session 0x20052a3f87e0012 cxid 0x5 zxid 0x5000002f8 create '/consumers/test-consumer-group/ids/test-consumer-group_localhost.localdomain-1538050365918-f4e2a471,#7b2276657273696f6e223a312c22737562736372697074696f6e223a7b22626262223a317d2c227061747465726e223a2277686974655f6c697374222c2274696d657374616d70223a2231353338303530333635393933227d,v{s{31,s{'world,'anyone}}},T,6

9/27/18 8:12:46 AM EDT session 0x20052a3f87e0012 cxid 0x20 zxid 0x5000002f9 create '/consumers/test-consumer-group/owners/bbb/2,#746573742d636f6e73756d65722d67726f75705f6c6f63616c686f73742e6c6f63616c646f6d61696e2d313533383035303336353931382d66346532613437312d30,v{s{31,s{'world,'anyone}}},T,37

 

3.2 存储结构

zookeeper的存储结构类似于linux文件系统,是树形结构

è¿éåå¾çæè¿°

1.每个znode都有自己唯一的路径,只支持绝对路径,不支持相对路径

2.znode可以有子节点,且可以存储一些小数据,一般不超过1M

3.znode的数据有版本号,可以用在并发访问场景中,用乐观锁机制实现数据的一致性 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值