我们物理部署三台zookeeper,因为是本地启动,所以需要三份配置文件。
配置文件都是类似的。
开放2181端口服务器的配置
tickTime=2000dataDir=/Users/olifer/middle/zk/1/datadataLogDir=/Users/olifer/middle/zk/1/datalogclientPort=2181initLimit=5syncLimit=2server.1=127.0.0.1:10001:20001server.2=127.0.0.1:10002:20002server.3=127.0.0.1:10003:20003
开放2182端口服务器的配置
tickTime=2000dataDir=/Users/olifer/middle/zk/2/datadataLogDir=/Users/olifer/middle/zk/2/datalogclientPort=2182initLimit=5syncLimit=2server.1=127.0.0.1:10001:20001server.2=127.0.0.1:10002:20002server.3=127.0.0.1:10003:20003
开放2183端口服务器的配置
tickTime=2000dataDir=/Users/olifer/middle/zk/3/datadataLogDir=/Users/olifer/middle/zk/3/datalogclientPort=2183initLimit=5syncLimit=2server.1=127.0.0.1:10001:20001server.2=127.0.0.1:10002:20002server.3=127.0.0.1:10003:20003
我们会发现,这三份配置文件,不同点端口不同和存放数据的文件夹以及存放log的文件夹不同。但是我们发现这三份配置文件有一个相同的配置
server.1=127.0.0.1:10001:20001 server.2=127.0.0.1:10002:20002 server.3=127.0.0.1:10003:20003
server 1,2,3组成一个集群,但是我们知道server 1,server 2,server 3?通过创建在dataDir里添加myid文件,里面的内容就是server的标示1或2或3,这样就给server增加了物理的标识,所以在配置文件中,server.1就知道是在集群中的哪台机器。server.NUM=IP:port1:port2 ,NUM表示本机为第几号服务器,IP 为 这个server的ip地址,port1为leader与follower通信端口,port2为参与竞选leader的通信端口。
配置文件解释完毕,我们就开始启动了。
zkServer start /Users/olifer/middle/zk/1/zoo.conf zkServer start /Users/olifer/middle/zk/2/zoo.conf zkServer start /Users/olifer/middle/zk/3/zoo.conf
每台启动时如果开到下面的日志,说明配置成功了
JMX enabled by defaultUsing config: /Users/olifer/middle/zk/3/zoo.conf Starting zookeeper ... STARTED
我们看一下每台zk的角色
zkServer status /Users/olifer/middle/zk/1/zoo.conf JMX enabled by defaultUsing config: /Users/olifer/middle/zk/1/zoo.conf Mode: follower zkServer status /Users/olifer/middle/zk/2/zoo.conf JMX enabled by defaultUsing config: /Users/olifer/middle/zk/2/zoo.conf Mode: leader zkServer status /Users/olifer/middle/zk/3/zoo.conf JMX enabled by defaultUsing config: /Users/olifer/middle/zk/3/zoo.conf Mode: follower
我们可以看到server_id=2的zk是leader,其他的都是follower。我们连接上2182(leader)的机器
zkCli -server 127.0.0.1:2182Connecting to 127.0.0.1:2182Welcome to ZooKeeper!JLine support is enabledWATCHER::WatchedEvent state:SyncConnected type:None path:null[zk: 127.0.0.1:2182(CONNECTED) 0]
在此机器上创建一个永久节点
[zk: 127.0.0.1:2182(CONNECTED) 1] create /linyang olifer Created /linyang [zk: 127.0.0.1:2182(CONNECTED) 2] ls /linyang [] [zk: 127.0.0.1:2182(CONNECTED) 3] get /linyang olifer cZxid = 0x300000002 ctime = Tue Dec 05 09:26:49 CST 2017 mZxid = 0x300000002 mtime = Tue Dec 05 09:26:49 CST 2017 pZxid = 0x300000002 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 6 numChildren = 0 [zk: 127.0.0.1:2182(CONNECTED) 4]
ls 查看路径下的节点,create 创建节点并且指明节点存储的内容,get 获取节点存储的内容等。在leader上进行了存储的操作,我们可以看一下,在follower上的反应,连接上2181的机器
zkCli -server 127.0.0.1:2181Connecting to 127.0.0.1:2181Welcome to ZooKeeper! JLine support is enabled WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: 127.0.0.1:2181(CONNECTED) 0] ls / [zookeeper, linyang] [zk: 127.0.0.1:2181(CONNECTED) 1] ls /linyang [] [zk: 127.0.0.1:2181(CONNECTED) 2] get /linyang olifer cZxid = 0x300000002ctime = Tue Dec 05 09:26:49 CST 2017mZxid = 0x300000002mtime = Tue Dec 05 09:26:49 CST 2017pZxid = 0x300000002cversion = 0dataVersion = 0aclVersion = 0ephemeralOwner = 0x0dataLength = 6numChildren = 0[zk: 127.0.0.1:2181(CONNECTED) 3]
可以看到数据已经同步过来了。我们尝试在follower上进行写操作,看看结果怎么样
[zk: 127.0.0.1:2181(CONNECTED) 4] create /follower testCreated /follower [zk: 127.0.0.1:2181(CONNECTED) 5] get /followertestcZxid = 0x300000004 ctime = Tue Dec 05 09:32:56 CST 2017 mZxid = 0x300000004 mtime = Tue Dec 05 09:32:56 CST 2017 pZxid = 0x300000004 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 4 numChildren = 0 [zk: 127.0.0.1:2181(CONNECTED) 6]
也是可以创建成功的,这一点和redis不同,redis默认的是从节点是只读的操作。follower进行的修改,leader可以看到吗?试一下
[zk: 127.0.0.1:2182(CONNECTED) 4] get /followertestcZxid = 0x300000004 ctime = Tue Dec 05 09:32:56 CST 2017 mZxid = 0x300000004 mtime = Tue Dec 05 09:32:56 CST 2017 pZxid = 0x300000004 cversion = 0 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 4 numChildren = 0 [zk: 127.0.0.1:2182(CONNECTED) 5]
答案是可以的。zk的数据复制模式就讲到这里。
作者:数齐
链接:https://www.jianshu.com/p/84e548b55f93
共同学习,写下你的评论
评论加载中...
作者其他优质文章