Zookeeper 分布式部署

我们物理部署三台zookeeper,因为是本地启动,所以需要三份配置文件。
配置文件都是类似的。

开放2181端口服务器的配置

tickTime=2000
dataDir=/Users/olifer/middle/zk/1/data
dataLogDir=/Users/olifer/middle/zk/1/datalog
clientPort=2181
initLimit=5
syncLimit=2
server.1=127.0.0.1:10001:20001
server.2=127.0.0.1:10002:20002
server.3=127.0.0.1:10003:20003

开放2182端口服务器的配置

tickTime=2000
dataDir=/Users/olifer/middle/zk/2/data
dataLogDir=/Users/olifer/middle/zk/2/datalog
clientPort=2182
initLimit=5
syncLimit=2
server.1=127.0.0.1:10001:20001
server.2=127.0.0.1:10002:20002
server.3=127.0.0.1:10003:20003

开放2183端口服务器的配置

tickTime=2000
dataDir=/Users/olifer/middle/zk/3/data
dataLogDir=/Users/olifer/middle/zk/3/datalog
clientPort=2183
initLimit=5
syncLimit=2
server.1=127.0.0.1:10001:20001
server.2=127.0.0.1:10002:20002
server.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 default
Using config: /Users/olifer/middle/zk/3/zoo.conf
Starting zookeeper ... STARTED

我们看一下每台zk的角色

zkServer status /Users/olifer/middle/zk/1/zoo.conf
JMX enabled by default
Using config: /Users/olifer/middle/zk/1/zoo.conf
Mode: follower

zkServer status /Users/olifer/middle/zk/2/zoo.conf
JMX enabled by default
Using config: /Users/olifer/middle/zk/2/zoo.conf
Mode: leader

zkServer status /Users/olifer/middle/zk/3/zoo.conf
JMX enabled by default
Using config: /Users/olifer/middle/zk/3/zoo.conf
Mode: follower

我们可以看到server_id=2的zk是leader,其他的都是follower。我们连接上2182(leader)的机器

zkCli -server 127.0.0.1:2182
Connecting to 127.0.0.1:2182
Welcome to ZooKeeper!
JLine support is enabled

WATCHER::

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:2181
Connecting to 127.0.0.1:2181
Welcome 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 = 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:2181(CONNECTED) 3]

可以看到数据已经同步过来了。我们尝试在follower上进行写操作,看看结果怎么样

[zk: 127.0.0.1:2181(CONNECTED) 4] create /follower test
Created /follower
[zk: 127.0.0.1:2181(CONNECTED) 5] get /follower
test
cZxid = 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 /follower
test
cZxid = 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
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞