设为首页 收藏本站
查看: 827|回复: 0

[经验分享] Zookeeper深入浅出之快速入门实例

[复制链接]

尚未签到

发表于 2019-1-8 12:16:31 | 显示全部楼层 |阅读模式
  what is Zookeeper?


  •   zk分布式服务框架是apache hadoop的一个子项目,主要用于分布式当中,如集群管理,统一命名服务,分布式锁,分布式消息队列,分布式配置管理等。
  

  比如:
  【分布式配置管理】
  发布者发布数据/配置信息到ZK节点上,供订阅者动态订阅数据,实现配置信息的集中式管理和动态更新。
  

  【命名服务】
  在分布式应用当中,我们要保证命名的唯一性,可以通过ZK的create node api很容易的创建一个全局唯一的PATH作为name service。
  

  【分布式通知和协调】
  如果不同系统之间对ZK的同一个ZNODE节点进行注册,监听ZNODE的变化(包括ZNODE及其子节点),其中一个系统UPDATE了ZNODE,那么另一个系统能够收到通知并作相应的处理。
  其实是利用到了ZK特有的watch注册和异步通知机制,实现分布式环境下不同系统的通知和协调,实现对数据变更的实时处理。
  


  •   现在很多分布式计算需要依赖ZK,比如hadoop,storm,hbase等。
  

  比如,对于Storm而言:
  消息先发送到nimbus(master),然后由ZK分发到supervisor(slave)上,可见ZK保存了STORM集群和作业的信息,并负责nimbus和supervisor的通信
  


  •   一句话,就是因为ZK在分布式中的特性,可以方便我们在分布式开发解决一些困难,因此我们需要深入学习下ZK。
  

  

  ZK的体系结构
  

  先看图:


  •   ZK中有很多Server,然后其中有一台是leader。
  •   Server端具有fast fail特性,也就是说如果leader挂了,可以快速选举出新的leader,不存在单点故障。
  •   非leader节点,只要超过半数的节点正常就不影响对外提供服务,非常健壮。
  •   客户端提交请求,首先会提交到Server leader,然后由leader广播到其他的server.
  


  


  •   ZK可以存储协调数据,如状态、配置等信息,每个节点存储的数据量很小,KB级别。
  •   ZK NODE类似文件系统的目录树型结构
  •   每个节点具有与之对应的数据内容,同时也可以具有子节点
  •   有四种节点,临时节点是不可以有子节点的
  •   节点维护一个状态stat结构(包括数据变化的版本号,ACL变化,时间戳)
  •   每当节点数据内容改变时,多一个版本号【这一点和HBASE比较类似】,CLIENT在获取数据的同时也会获取版本号,节点的数据内容以原子方式读写。
  •   节点具有一个访问控制列表Access Control List : ACL 来约束访问操作,即具有权限控制。
  

  

  ZK的特性:watch机制
  


  •   当ZK的节点数据变化时,会触发watch事件,即ZK对NODE的增,删,改,查都会触发监听。
  •   watch是一次性触发机制,但watch监视的数据发生变化时,通知设置了该watch的client,即watcher,也就是说,如果我们设置了watch事件,触发后,如果我们不继续watch该事件,将不再监视。
  •   watch事件异步发送至观察者,watch事件的设置是有延迟的。
  •   client监视一个节点,总是先获取watch事件,在发现节点的数据变化。
  

  

  ZK安装、命令行测试实例
  

  STEP1:认识ZK的启动脚本、配置文件

  


  

  注意2点:
  第一,client与该server连接的port
  第二,dataDir指出znode存储的路径、该路径下还会存放server的PID文件
  


  

  zkServer.sh是start/stop server的脚本,并且还可以查看状态信息。
  zkCli.sh是客户端连接server:port的脚本。
  

  STEP2:在单机上做一个伪分布式的ZK集群
  

  先看配置文件信息:

  

  类似的,提供zoo2.cfg,zoo3.cfg配置文件。
  

  server.X=IP:PORT1:PORT2的意思是这样的:
  在ZK中server是有编号的,而X就表示该server的序号。IP是server的地址,PORT1表示的是该server与leader通信过程中采用的端口,PORT2表示的是如果leader重新选取的话,采用PORT2端口进行通信。
  

  看dataDir的情况:


  需要注意的是,每个Server都需要提供一个myid文件来表示自己在ZK的序号,与配置文件中对应。
  

  启动多个ZK SERVER实例:


  

  查看ZK状态信息:


  

  客户端连接SERVER进行操作:
[root@localhost bin]# ./zkCli.sh -server 192.168.91.2:2182
[zk: 192.168.91.2:2182(CONNECTED) 0] help
[zk: 192.168.91.2:2182(CONNECTED) 1] ls /
[zookeeper]
[zk: 192.168.91.2:2182(CONNECTED) 3] create /node test1
[zk: 192.168.91.2:2182(CONNECTED) 4] get /node
test1
cZxid = 0x100000002
ctime = Sat Aug 13 06:13:44 PDT 2016
mZxid = 0x100000002
mtime = Sat Aug 13 06:13:44 PDT 2016
pZxid = 0x100000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: 192.168.91.2:2182(CONNECTED) 5] set /node test2
cZxid = 0x100000002
ctime = Sat Aug 13 06:13:44 PDT 2016
mZxid = 0x100000003
mtime = Sat Aug 13 06:14:14 PDT 2016
pZxid = 0x100000002
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: 192.168.91.2:2182(CONNECTED) 6] get /node
test2
cZxid = 0x100000002
ctime = Sat Aug 13 06:13:44 PDT 2016
mZxid = 0x100000003
mtime = Sat Aug 13 06:14:14 PDT 2016
pZxid = 0x100000002
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: 192.168.91.2:2182(CONNECTED) 7] create /node/info test3
Created /node/info
[zk: 192.168.91.2:2182(CONNECTED) 8] get /node
test2
cZxid = 0x100000002
ctime = Sat Aug 13 06:13:44 PDT 2016
mZxid = 0x100000003
mtime = Sat Aug 13 06:14:14 PDT 2016
pZxid = 0x100000004
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 1
[zk: 192.168.91.2:2182(CONNECTED) 9] get /node/info
test3
cZxid = 0x100000004
ctime = Sat Aug 13 06:15:37 PDT 2016
mZxid = 0x100000004
mtime = Sat Aug 13 06:15:37 PDT 2016
pZxid = 0x100000004
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 5
numChildren = 0
[zk: 192.168.91.2:2182(CONNECTED) 10] quit  

  到这里,ZK的基本介绍和入门使用就结束了,GOOD NIGHT~
  

  

  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-660759-1-1.html 上篇帖子: zookeeper选举机制及相关概念 下篇帖子: ZooKeeper启动数据初始化分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表