用了很久的ZooKeeper了,稍微做个总结。ZooKeeper(以下简称ZK)是一个分布式组件,基于类似Paxos的ZAB一致性算法来实现。ZK保存的数据结构类似于一般的文件系统,只不过在ZK中文件夹也可以拥有数据,整体文件结构为一棵树型。
安装ZooKeeper
去官网下载压缩包,随后使用rsync
同步到三台机器上,我使用如下三台机器
172.19.65.196172.19.72.108172.19.72.112
解压压缩包,使用cp conf/zoo_sample.cfg conf/zoo.cfg
得到配置文件,在三台机器的conf/zoo.cfg
中添加如下配置
dataDir=/home/zookeeper/apache-zookeeper-3.8.0-bin/dataserver.1=172.19.65.196:2888:3888server.2=172.19.72.108:2888:3888server.3=172.19.72.112:2888:3888
然后在三台机器的dataDir
目录下创建myid
文件
vi /home/zookeeper/apache-zookeeper-3.8.0-bin/data/myid
三台机器的myid文件中对应修改的内容如下
机器 | 内容 |
---|---|
172.19.65.196 | 1 |
172.19.72.108 | 2 |
172.19.72.112 | 3 |
启动ZK集群
修改完毕之后使用命令依次启动三台机器上的ZK
./bin/zkServer.sh start
使用命令zkServer.sh status
可以查看三台机器的状态
[zookeeper@lin-65-196 apache-zookeeper-3.8.0-bin]$ ./bin/zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /home/zookeeper/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfgClient port found: 2181. Client address: localhost. Client SSL: false.Mode: follower[zookeeper@lin-72-108 apache-zookeeper-3.8.0-bin]$ ./bin/zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /home/zookeeper/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfgClient port found: 2181. Client address: localhost. Client SSL: false.Mode: leader[zookeeper@lin-72-112-auto-5 apache-zookeeper-3.8.0-bin]$ ./bin/zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /home/zookeeper/apache-zookeeper-3.8.0-bin/bin/../conf/zoo.cfgClient port found: 2181. Client address: localhost. Client SSL: false.Mode: follower
可以发现108节点是当前的leader,我们使用zkServer.sh stop
停止108节点上面的ZK进程,再看状态可以发现112节点成为了的新的leader了。
使用ZooKeeper
在其它的机器上使用客户端zkCli连接ZK集群
~ zkCli -server 172.19.65.196:2181,172.19.72.108:2181,172.19.72.112:2181Connecting to 172.19.65.196:2181,172.19.72.108:2181,172.19.72.112:2181Welcome to ZooKeeper!JLine support is enabledWATCHER::WatchedEvent state:SyncConnected type:None path:null[zk: 172.19.65.196:2181,172.19.72.108:2181,172.19.72.112:2181(CONNECTED) 0]
成功连接zk集群,之后我们可以进行创建、删除、查询等等操作
ls /create /Nanjingcreate /Nanjing/Yuhuatails /Nanjing/Yuhuataicreate /Nanjing/Yuhuatai/Ruanjiangu "Software"get /Nanjing/Yuhuatai/Ruanjiangudelete /Nanjing/Yuhuatai/Ruanjiangustat /Nanjing/Yuhuataiquit
ZK支持创建临时数据
临时数据在客户端的连接断开之后会自动删除
create -e /Nanjing/Yuhuatai/Ruanjiangu "tmp"get /Nanjing/Yuhuatai/Ruanjiangu # 此时是有值的
断开客户端连接,再重新连接zkServer
get /Nanjing/Yuhuatai/Ruanjiangu
此时执行上面的语句就获取不到值了
对节点添加监听器
通过addWatch /Nanjing/Yuhuatai
添加对节点的监听器,之后打开一个新的zkCli执行命令create /Nanjing/Yuhuatai/Ruanjiangu
。此时监听器会收到通知,详情如下
[zk] addWatch /Nanjing/Yuhuatai[zk]WATCHER::WatchedEvent state:SyncConnected type:NodeCreated path:/Nanjing/Yuhuatai/Ruanjiangu