zookeeper curator选主(Leader)

2024-05-30 18:48

本文主要是介绍zookeeper curator选主(Leader),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在分布式系统设计中,选主是一个常见的场景。选主是一个这样的过程,通过选主,主节点被选择出来控制其他节点或者是分配任务。

选主算法要满足的几个特征:

1)各个节点均衡的获得成为主节点的权利,一旦主节点被选出,其他的节点可以感知到谁是主节点,被服从分配。

2)主节点是唯一存在的

3)一旦主节点失效,宕机或者断开连接,其他的节点能够感知,并且重新进行选主算法。

 

zookeeper实现了安全可靠的选主机制。

作为zookeeper的高级api封装库curator选主算法主要有以下两个:Leader Latch和Leader Election

1、Leader Latch

实例被选为leader后,执行isLeader中的逻辑。当领导权易主之后才会再次执行isLeader。

直接看代码吧,注释里面已经有说明了。

复制代码

/**  Leader Latch(群首闩)*  isLeader 中的方法会在实例被选为主节点后被执行, 而notLeader中的不会被执行*  如果主节点被失效, 会进行重新选主* */public void setLeaderLatch(String path) {try {String id = "client#" + InetAddress.getLocalHost().getHostAddress();leaderLatch = new LeaderLatch(client, path, id);LeaderLatchListener leaderLatchListener = new LeaderLatchListener() {@Overridepublic void isLeader() {logger.info("[LeaderLatch]我是主节点, id={}", leaderLatch.getId());}@Overridepublic void notLeader() {logger.info("[LeaderLatch]我不是主节点, id={}", leaderLatch.getId());}};leaderLatch.addListener(leaderLatchListener);leaderLatch.start();} catch (Exception e) {logger.error("c创建LeaderLatch失败, path={}", path);}}/**   判断实例是否是主节点* */public boolean hasLeadershipByLeaderLatch() {return leaderLatch.hasLeadership();}/**   阻塞直到获得领导权* */public void awaitByLeaderLatch() {try {leaderLatch.await();} catch (InterruptedException | EOFException e) {e.printStackTrace();}}/**   尝试获得领导权并超时* */public boolean awaitByLeaderLatch(long timeout, TimeUnit unit) {boolean hasLeadership = false;try {hasLeadership = leaderLatch.await(timeout, unit);} catch (InterruptedException e) {e.printStackTrace();}return  hasLeadership;}

复制代码

 

2、Leader Election

当实例被选为leader之后,调用takeLeadership方法进行业务逻辑处理,处理完成即释放领导权。

其中autoRequeue()方法的调用确保此实例在释放领导权后还可能获得领导权。

复制代码

/**   Leader Election模式*   实例被选主后执行takeLeadership, 执行完之后立刻释放领导权, 再次选主, 所以这里sleep 10秒* */public void setLeaderSelector(String path) {try {final String id = "client#" + InetAddress.getLocalHost().getHostAddress();LeaderSelectorListener leaderSelectorListener = new LeaderSelectorListener() {@Overridepublic void takeLeadership(CuratorFramework client) throws Exception {logger.info("[LeaderSelector]我是主节点, id={}", id);Thread.sleep(10000);}@Overridepublic void stateChanged(CuratorFramework client, ConnectionState newState) {}};leaderSelector = new LeaderSelector(client, path, leaderSelectorListener);leaderSelector.autoRequeue();leaderSelector.start();} catch (Exception e) {logger.error("c创建LeaderLatch失败, path={}", path);}}

复制代码

 

LeaderLatch instances add a ConnectionStateListener to watch for connection problems. If SUSPENDED or LOST is reported, the LeaderLatch that is the leader will report that it is no longer the leader (i.e. there will not be a leader until the connection is re-established). If a LOST connection is RECONNECTED, the LeaderLatch will delete its previous ZNode and create a new one.

Users of LeaderLatch must take account that connection issues can cause leadership to be lost. i.e. hasLeadership() returns true but some time later the connection is SUSPENDED or LOST. At that point hasLeadership() will return false. It is highly recommended that LeaderLatch users register a ConnectionStateListener.

 

LeaderSelectorListener类继承了ConnectionStateListener。一旦LeaderSelector启动,它会向curator客户端添加监听器。 使用LeaderSelector必须时刻注意连接的变化。一旦出现连接问题如SUSPENDED,curator实例必须确保它可能不再是leader,直至它重新收到RECONNECTED。如果LOST出现,curator实例不再是leader并且其takeLeadership()应该直接退出。

推荐的做法是,如果发生SUSPENDED或者LOST连接问题,最好直接抛CancelLeadershipException,此时,leaderSelector实例会尝试中断并且取消正在执行takeLeadership()方法的线程。 建议扩展LeaderSelectorListenerAdapter, LeaderSelectorListenerAdapter中已经提供了推荐的处理方式 。

这篇关于zookeeper curator选主(Leader)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1016717

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

搭建Kafka+zookeeper集群调度

前言 硬件环境 172.18.0.5        kafkazk1        Kafka+zookeeper                Kafka Broker集群 172.18.0.6        kafkazk2        Kafka+zookeeper                Kafka Broker集群 172.18.0.7        kafkazk3

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时,Curator 是一个非常流行的客户端库,它简化了 ZooKeeper 的使用,提供了高级的抽象和丰富的工具。本文将详细介绍 Curator 框架,包括它的设计哲学、核心组件以及如何使用 Curator 来简化 ZooKeeper 的操作。 1

zookeeper相关面试题

zk的数据同步原理?zk的集群会出现脑裂的问题吗?zk的watch机制实现原理?zk是如何保证一致性的?zk的快速选举leader原理?zk的典型应用场景zk中一个客户端修改了数据之后,其他客户端能够马上获取到最新的数据吗?zk对事物的支持? 1. zk的数据同步原理? zk的数据同步过程中,通过以下三个参数来选择对应的数据同步方式 peerLastZxid:Learner服务器(Follo

设置zookeeper开机自启动/服务化

设置启动zk的用户为zookeeper 设置启动zk的用户为zookeeper用户,而非root用户,这样比较安全。 可以使用root用户进行zookeeper的管理(启动、停止…),但对于追求卓越和安全的的人来说,采用新非root用户管理zookeeper更好。 步骤: 1. 创建用户和用户组 2. 相关目录设置用户和用户组属性 3. 采用zookeeper用户启动进程 设置z

Zookeeper集群是如何升级到新版本的

方案1:复用老数据方案 这是经过实践的升级方案,该方案是复用旧版本的数据,zk集群拓扑,配置文件都不变,只是启动的程序为最新的版本。 参考文章: Zookeeper集群是如何升级到新版本的 方案2:重新建立数据方案 该方案的思路是:先停掉一台follower的机器上的服务,然后加入一个新版本的zk(zk的数据目录是空的),然后启动新zk,之后新zk会把旧集群中的数据同步过来。之后再操作另

Zookeeper基本原理

1.什么是Zookeeper?         Zookeeper是一个开源的分布式协调服务器框架,由Apache软件基金会开发,专为分布式系统设计。它主要用于在分布式环境中管理和协调多个节点之间的配置信息、状态数据和元数据。         Zookeeper采用了观察者模式的设计理念,其核心职责是存储和管理集群中共享的数据,并为各个节点提供一致的数据视图。在Zookeeper中,客户端(如

一、什么是Zookeeper

原文: GitHub:https://github.com/wangzhiwubigdata/God-Of-BigData关注公众号,内推,面试,资源下载,关注更多大数据技术~大数据成神之路~预计更新500+篇文章,已经更新50+篇~ 张大胖所在的公司这几年发展得相当不错,业务激增,人员也迅速扩展,转眼之间,张大胖已经成为公司的“资深”员工了,更重要的是,经过这些年的不懈努力,他终于

三、Zookeeper典型应用场景及实践

因编辑原因图片不显示,请戳GitHub原文: https://github.com/wangzhiwubigdata/God-Of-BigData关注公众号,内推,面试,资源下载,关注更多大数据技术~大数据成神之路~预计更新500+篇文章,已经更新50+篇~ Zookeeper 从设计模式角度来看,是一个基于观察者模式设计的分布式服务管理框架,它负责存储和管理大家都关心的数据,然后接受

ZooKeeper在HBase集群中的作用

点击上方蓝色字体,选择“设为星标” 回复”资源“获取更多资源 大数据技术与架构 点击右侧关注,大数据开发领域最强公众号! 暴走大数据 点击右侧关注,暴走大数据! ZooKeeper作为分布式协调组件,在大数据领域的其他分布式组件中往往扮演着重要的辅助角色,因此我们就算不单独去研究ZooKeeper,也短不了要接触它。本文就以最典型的HBase为例,简要介绍ZooKeeper为HBase