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

[经验分享] Zookeeper相关内容及简单理解、安装

[复制链接]

尚未签到

发表于 2019-1-8 14:00:00 | 显示全部楼层 |阅读模式
  一、什么是Zookeeper
  Zookeeper是一个开源的分布式服务框架,它是Apache hadoop项目的一个子项目,主要用来解决分布式应用场景中存在的一些问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置管理等。在分布式模式下,能够为分布式应用提供高性能和可靠地协调服务,使用Zookeeper可以简化分布式协调服务的实现。
  Zookeeper提供的功能包括:配置维护、域名服务、分布式同步、组服务等。
  具体可见这个博客:http://blog.csdn.net/liuyuehu/article/details/52120546
  和 http://blog.csdn.net/u012152619/article/details/52908878
  

  

  

  二、Zookeeper一般用在什么场合?
  数据发布与订阅(配置中心):
  发布与订阅,是发布者将数据发布到zk节点上,工订阅者动态获取数据,实现配置信息的集中式管理和动态更新。例如全局的配置信息,服务式服务框架的服务地址。
  (1)应用中用到的一些配置信息放到ZK上进行集中管理。通常是:应用在启动时会主动来获取一次配置,在节点上注册一个Watcher,以后每次配置有更新时,都会实时通知给订阅了的哭护短,从而达到获取最新配置信息的目的。
  (2)分布式搜索服务器中,索引的云信息和服务器集群机器的节点状态存放ZK的一些指定节点,供各个客户端订阅使用
  

  负载均衡
  这里说的负载均衡是指软负载均衡。在分布式环境中,为了保证高可用性,通常同一个应用或同一服务的提供方都会部署多份,达到对等服务。而消费者就需要在这些对等服务的服务器中选择一个来执行相关的业务逻辑,其中比较典型的是消息中间件中生产者/消费者负载均衡。
  消息中间件发布者和订阅者的负载均衡,linkedin开源的KafkaMQ和阿里开源的metaq都是通过zookeeper来做到生产者、消费者的负载均衡。这里以metaq为例讲下:
  生产者负载均衡/消费者负载均衡:
  metaq发送消息的时候,生产者在发送消息的时候必须选择一台broker上的一个分区来发送消息,因此metaq在运行过程中,会把所有broker和对应的分区信息全部注册到ZK指定节点上,默认的策略是一个依次轮询的过程,生产者在通过ZK获取分区列表之后,会按照brokerId和partition的顺序排列组织成一个有序的分区列表,发送的时候按照从头到尾循环往复的方式选择一个分区来发送消息。
  在消费过程中,一个消费者会消费一个或多个分区中的消息,但是一个分区只会由一个消费者来消费。MetaQ的消费策略是:

  •   每个分区针对同一个group只挂载一个消费者。
  •   如果同一个group的消费者数目大于分区数目,则多出来的消费者将不参与消费。
  •   如果同一个group的消费者数目小于分区数目,则有部分消费者需要额外承担消费任务。
  在某个消费者故障或者重启等情况下,其他消费者会感知到这一变化(通过 zookeeper watch消费者列表),然后重新进行负载均衡,保证所有的分区都有消费者进行消费。
  (3)命名服务(Naming Service)
  命名服务也是分布式系统中比较常见的一类场景。在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源或者服务的地址,提供者等信息。被命名实体通常可以是集群中的机器,提供的服务地址,远程对象等等——这些我们都可以统称为他们的名字(Name)。其中较为常见的就是一些分布式服务框架中的服务地址列表。通过调用ZK提供的创建节点的API,能够很容易创建一个全局唯一的path,这个path就可以作为一个名称。
  Dubbo中使用zookeeper来作为命名服务,维护全局的服务地址列表。
  在Dubbo(下一个话题讲)中:
  服务提供者在启动的时候,向ZK上的指定节点/dubbo/${serviceName}/providers目录下写入自己的URL地址,这个操作就完成了服务的发布。
  服务消费者启动的时候,订阅/dubbo/${serviceName}/providers目录下的提供者URL地址,并向/dubbo/${serviceName}/consumers目录下写入自己的URL地址。
  向ZK上注册的地址都是临时节点,这样就能够保证服务提供者和消费者能自动感应资源的变化。
  (4)分布式通知/协调
  Zookeeper中持有watcher注册与异步通知机制,能够很好的实现分布式环境下不同系统之间的通知与协调,实现对数据变更的实时处理。使用方法通常是不同系统都对ZK上同一个znode进行注册,监听znode的变化(包括znode本身内容及其子节点),其中一个系统更新了znode,那么另一个系统能够收到通知,并做出相应处理。(http://www.cnblogs.com/tommyli/p/3766189.html)

  

  (5)集群管理与Master选举:
  集群机器监控:通常用于对集群中机器状态有较高的要求的场景,能够快速对集群中机器变化做出响应。
  

  (6)分布式锁
  分布式锁,这个主要得益于ZooKeeper为我们保证了数据的强一致性。锁服务可以分为两类,一个是保持独占,另一个是控制时序
  (7)分布式队列
  队列方面,简单地讲有两种,一种是常规的先进先出队列,另一种是要等到队列成员聚齐之后的才统一按序执行。
  第二种队列其实是在FIFO队列的基础上作了一个增强。通常可以在 /queue 这个znode下预先建立一个/queue/num 节点,并且赋值为n(或者直接给/queue赋值n),表示队列大小,之后每次有队列成员加入后,就判断下是否已经到达队列大小,决定是否可以开始执行了。这种用法的典型场景是,分布式环境中,一个大任务TaskA,需要在很多子任务完成(或条件就绪)情况下才能进行。这个时候,凡是其中一个子任务完成(就绪),那么就去 /taskList 下建立自己的临时时序节点(CreateMode.EPHEMERAL_SEQUENTIAL),当 /taskList 发现自己下面的子节点满足指定个数,就可以进行下一步按序进行处理了。
  

  

  

  

  

  三、windows中下载、安装Zookeeper,启动:
  (1)下载在搜索框输入Zookeeper进入官网即可。下载的是zip包,解压如下:

  (2)bin目录如下:

  (3)打开控制台窗口,并转到bin目录下:

  运行zkServer.cmd:
  注意此时如果启动失败,意外关闭,并提示zoo.conf找不到,那么zoo_sample.conf也是可以的,不过要实现对改文件进行部分修改,换成你自己的参数。如图:

  Zookeeper启动之后会显示如下信息,如图:


  最后几行是这样的:表示启动成功,

  (4)启动客户端运行查看一下:


  表示客户端已经顺利连接,Zookeeper启动成功!
  

  //可以参考这篇博文:http://blog.csdn.net/morning99/article/details/40426133

  

  





运维网声明 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-660831-1-1.html 上篇帖子: 构建springmvc+mybatis+dubbo分布式平台 下篇帖子: 分布式锁实现大型连续剧之(二):Zookeeper
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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