Apache Zookeeper 学习:模拟三台节点组成的Zookeeper集群实现的统一配置管理中心
模拟Zookeeper集群
架构图
创建zookeeper集群节点
模拟三台节点组成的zookeeper集群,需要在本机zookeeper目录下
创建三个zookeeper集群节点配置文件
1 | $ cd conf/ |
创建所配置的各个文件夹
1 | $ mkdir /tmp/zookeeper1 |
/tmp/zookeeperX/data文件夹下创建myid文件
1 | $ echo 1 > /tmp/zookeeper1/data/myid |
配置zookeeper节点信息
zoo1.cfg
1 | # The number of milliseconds of each tick |
zoo2.cfg
1 | # the directory where the snapshot is stored. |
zoo3.cfg
1 | # the directory where the snapshot is stored. |
配置文件中dataDir,dataLogDir,clientPort,三个zookeeper节点配置信息都不同
搭建zookeeper集群,需要在每个zookeeper安装目录下的data文件中创建名为myid的文件,修改zooX.cfg内容如下:
1 | server.1=xxx:2888:3888 |
格式:server.num=xxxx:port1:port2
num对应myid中的内容,port1是zookeeper集群中各服务间的通信端口,port2是zookeeper集群选举leader的端口
启动模拟集群节点
1 | $ ./zkServer.sh start ../conf/zoo1.cfg |
查看集群状态
1 | $ ./zkServer.sh status ../conf/zoo1.cfg |
创建zookeeper集群client
创建监听节点变化的server(zookeeper集群client)
模拟监听节点变化server,启动两个BaseWatcher程序作为监听server(对zookeeper集群来说是client)
1 | public class BaseWatcher implements Watcher { |
创建改变节点数据的server(zookeeper集群client)
如果一个节点向被监听节点中写数据,其他节点就会接受到zookeeper的 NodeDataChanged event
模拟改变数据server,启动一个BaseWatcher程序作为改变数据server(对zookeeper集群来说是client)
1 | public static void main(String[] args) throws Exception { |
运行结果
两个监听程序收到zookeeper的 NodeDataChanged event,log如下
1 | 11:24:27.295 [main-SendThread(localhost:2183)] DEBUG org.apache.zookeeper.ClientCnxn - Got notification sessionid:0x300001251b50003 |