ZooKeeper场景实践:(6)集群监控和Master选举

本文详细介绍了如何利用ZooKeeper的特性实现集群机器监控和Master选举。通过在/Monitor节点上创建EPHEMERAL类型节点监控机器状态,利用EPHEMERAL_SEQUENTIAL节点进行动态Master选举。文章还分析了具体的场景,描述了选主过程,并提供了动手实践的代码示例。
摘要由CSDN通过智能技术生成

1. 集群机器监控

这通常用于那种对集群中机器状态,机器在线率有较高要求的场景,能够快速对集群中机器变化作出响应。这样的场景中,往往有一个监控系统,实时检测集群机器是否存活。

利用ZooKeeper有两个特性(读可监控,临时节点),就可以实现一种集群机器存活性监控系统:

1. 客户端在节点 x 上注册一个Watcher,那么如果x的子节点变化了,会通知该客户端
2. 创建EPHEMERAL类型的节点,一旦客户端和服务器的会话结束或过期,那么该节点就会消失

利用这两个特性,可以分别实现对客服端的状态变化、上下线进行监控。

例如,监控系统在 /Monitor 节点上注册一个Watcher,以后每动态加机器,那么就往 /Monitor 下创建一个 EPHEMERAL类型的节点:/Monitor/{hostname}. 这样,监控系统就能够实时知道机器的增减情况,至于后续处理就是监控系统的业务了。

2. Master选举

在分布式环境中,有些业务逻辑只需要集群中的某一台机器进行执行,其他的机器可以共享这个结果,这样可以大大减少重复计算,提高性能,于是就需要进行master选举。

利用ZooKeeper的强一致性,能够保证在分布式高并发情况下节点创建的全局唯一性,即:同时有多个客户端请求创建 /currentMaster 节点,最终一定只有一个客户端请求能够创建成功。利用这个特性,就能很轻易的在分布式环境中进行集群选举了。

此外,也可以利用Zookeeper的EPHEMERAL_SEQUENTIAL节点,实现动态选举:每个客户端都在/Master/下创建一个EPHEMERAL_SEQUENTIAL节点,由于ZooKeeper保证SEQUENTIAL的有序性,因此我们可以简单的把节点号最小的作为Master,就完成了选主。

3. 场景分析

假设我们要监控集群中的一群活动的业务进程,同时会在这群进程中选取一个进程作为监控的Master进程。每个进程使用IP地址加进程号标识,即{ip:pid}.当新的业务进程上线时,该进程会到/Monitor下创建一个临时有序(EPHEMERAL_SEQUENTIAL)的节点.并获取/Monitor下的子节点列表,如果发现自己创建的节点最小,则提升自己为Master进程,否则仍是业务进程。当进程退出时该节点会自动删除,其他进程则会尝试选主,保证当Master进程退出后,会提升一个新的Master进程。

举个例子,假设集群中一开始没有进程,

  1. 进程A1被创建,在/Monitor创建/Monitor/proc-1路径,由于/Monitor下只有一个路径,A1被提升为Master进程。
  2. 进程A2被创建,在/Monitor创建/Monitor/proc-2路径,选主不成功,作为Slave进程;同时A1监控/Monitor的子节点变化事件,会收到有新进程被创建 ,因此执行show_list。
  3. 进程A2被创建,在/Monitor创建/Monitor/proc-3路径,选主不成功,作为Slave进程;同时A1监控/Monitor的子节点变化事件,会收到有新进程被创建 ,因此执行show_list。
  4. 进程A1被Killed掉,其他进程监控到/Monitor的子节点变化事件,尝试选主,只有A2序号成功,因此A2选主成功,A3作为Slave进程。
  5. 进程A4被创建,在/Monitor创建/Monitor/proc-4路径,选主不成功,作为Slave进程;同时A2监控/Monitor的子节点变化事件,会收到有新进程被创建 ,因此执行show_list。

执行情况如下表所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值