为了账号安全,请及时绑定邮箱和手机立即绑定

Zookeeper 分布式部署

标签:
大数据

我们物理部署三台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


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
51
获赞与收藏
178

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消