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

[经验分享] zookeeper常用场景、常用方法介绍

[复制链接]

尚未签到

发表于 2015-9-6 08:00:40 | 显示全部楼层 |阅读模式
  应网友要求,介绍下zookeeper的应用场景,本文是在公司平台研发中对zookeeper(以下简称zk)的使用中得出的经验,分享给大家;如有更好的场景请添加评论,共同分享。
  1.ZK命令行使用、四种节点的介绍
  1)。搭建好zk环境后,运行其bin目录下的zkCli.sh,即可进入zk的人机交互界面,可以随意键入字母(quit是退出命令,注意哦)并回车,查看帮助文档;
  2)。节点分类:
  PERSISTENT:持久化目录节点,这个目录节点存储的数据不会丢失;
      PERSISTENT_SEQUENTIAL:顺序自动编号的目录节点,这种目录节点会根据当前已近存在的节点数自动加 1,然后返回给客户端已经成功创建的目录节点名;
      EPHEMERAL:临时目录节点,一旦创建这个节点的客户端与服务器端口也就是 session 超时,这种节点会被自动删除;
      EPHEMERAL_SEQUENTIAL:临时自动编号节点。
  
  2.ZK存储的数据特点介绍: 
  1)。每个子目录项如 /root 都被称作为 znode,这个 znode 是被它所在的路径唯一标识,即全路径。
  2)。znode 可以有子节点目录,并且每个 znode 可以存储数据,注意 EPHEMERAL 类型的目录节点不能有子节点目录
  3)。znode 是有版本的,每个 znode 中存储的数据可以有多个版本,也就是一个访问路径中可以存储多份数据(只是这么个概念,实际中用不同版本的几乎不可能);
  4)。znode 可以是临时节点,一旦创建这个 znode 的客户端与服务器失去联系,这个 znode 也将自动删除,Zookeeper 的客户端和服务器通信采用长连接方式,每个客户端和服务器通过心跳来保持连接,这个连接状态称为 session,如果 znode 是临时节点,这个 session 失效,znode 也就删除了;
  5)。znode 的目录名可以自动编号(前提是创建的节点是SEQUENTIAL的节点),如 App1 已经存在,再创建的话,将会自动命名为 App2;
  6)。znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个是 Zookeeper 的核心特性,Zookeeper 的很多功能都是基于这个特性实现的,后面在典型的应用场景中会有实例介绍
  
  3.生产环境中的使用场景和方法:
  1)。作为小型分布式内存数据库使用:
  消费者以零时节点的方式注册信息(包括Server的ip和port,需求的数据type和广播方式),生产者去获取所有消费者注册信息,然后将数据广播方式发往需求方(有兴趣可以参考java高效收发数据);
  好处:利用zk的零时节点的特性来存储信息和监控进程状态,如果进程挂掉了,那么零时节点就会被删除,生产者就能获取到此信息,然后断开socket链接,提高系统的可靠性。
  2)。重要进程的standby:
  系统中,会有一些至关重要的进程需要standby进程来守护,保证系统7*24正常运行,做法是:分别两台机器上启动此线程,然后在同一个目录下创建一个零时节点,因为create操作是原子性的,所以只有一台机器能创建成功,让创建成功的进程处理逻辑,而创建失败的进程捕获异常信息,每隔n秒去重新创建,如果出现机器宕机,则standby进程将会在n秒后继续提供服务,实现进程的热备份。
  3)。进程守护的另一种方式(跟2类似,但是确实两种方法都在各自模块中使用):
  在n台机器上启动进程(简单的注册零时的Seq Znode),监控进程根据注册信息,选取第一个注册上来的机器信息,通过ssh远程启动进程,如果节点没有了(用zk的watch回调方式,可以自动回调处理逻辑),则ssh过去kill掉此进程,并且重新让剩下的机器重新创建节点(保证负载最小的机器来运行此进程),选取新第一个节点机器进行操作。
  
  4.常见的错误:
  任何好的设计都会遇到各种复杂的问题,特别是在网络环境特别复杂的时候,比如:千兆网的环境,还没有进行业务逻辑的处理,仅仅在接入数据、解码、存储原始数据后就占到了一半的带宽,而这是一种常态,所以经常遇到网络延迟的情况,然后zk的session失效了,零时节点自动删除了,但是服务还在,所以需要自动重连zk,淘宝提供了第三方zkclient.jar来自动重连(即使在机器宕机后,等机器服务启动后还能自动连上,并且可以存储javaBean对象,所以在跟C++模块共用zk处理信息时,就要屏蔽掉序列化部分,有需要的可以留言,提供修改后的代码),但是由于session的假失效会带来更多的思考,比如要在程序里添加监控节点的相应逻辑,在零时节点消失后,关闭相应的资源;
  而进程守护就比较头疼了:因为无法分辨是网络延迟还是进程挂掉了,所以需要在睡眠时间和操作的及时性上找到一个平衡。
  
  5.详细的参考资料:
  IBM中关于ZK的详细说明,里面有api介绍,和作者根据经验模拟的场景,zk常用的方法就是create/delete/getData/setData/exsits。
  转载请注明出处:http://www.cnblogs.com/uttu/archive/2013/02/22/2922717.html。

运维网声明 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-109861-1-1.html 上篇帖子: hbase和zookeeper的安装和部署 下篇帖子: zookeeper集群的python代码测试
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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