Curator如何实现基于zookeeper leader选举,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
一,基本介绍
Curator Framework是一个针对zookeeper做的搞层次的API,极大地简化了zookeeper的使用。它基于zookeeper构建了很多功能,处理复杂的链接管理,重试操作。下面是它的一些特点:
1,自动连接管理。
A),存在的潜在错误情况,需要ZooKeeper客户端创建连接和/或重试操作。Curator 自动和透明(主要)处理这些情况。
B),监视NodeDataChanged事件,并根据需要调用updateServerList()。
C),Watches 会被Curator recipes自动移除。
2,简洁的API
A),提供现代简洁的接口
B),简化了zookeeper原生的方法,事件等。
3,实现了很多功能
A),Leader选举
B),共享锁
C),队列
D),Barriers
E),Counters
F),Caches
G),Nodes
本文主要是讲解leader选举。
现在分布式系统,基本架构模型架构是master/slaves,
二,leader选举
分布式系统中,一般都是master/slaves结构,为了容灾一般都是希望启动多个master,一个Leader,若干Followers,Leader宕机有Followers选举一个再做Leader。之所以,多个Master之间需要选举出Leader,实际上是为了保证数据的强一致性。
Zookeeper就是我们做Leader选举和配置下发的好的一种框架。
CuratorFramework
该类实例是线程安全的,一个应用程序最好公用一个。可以通过CuratorFrameworkFactory创建实例。
Leader选举的主要类,两个构造
public LeaderLatch(CuratorFramework client, String latchPath)Parameters: client - the client latchPath - the path for this leadership grouppublic LeaderLatch(CuratorFramework client, String latchPath, String id)Parameters: client - the client latchPath - the path for this leadership groupid - participant ID节> <>节构建了LeaderLatch对象后,需要对象调用开始方法启动,我们然后就可以通过使用节> <节> <>之前,,, ,,,, ,, ,, ,,public boolean  hasLeadership () ,,,,, ,,,, ,,,Return true if leadership is currently held by 却;能够实例 节> <节>来判断当前实例是否是领袖。节> <节>本文采取的领袖选举的方案是火花的大师哈采用的方案& lt; ,火花源码之独立模式下主持久化引擎讲解祝辞。也即是实现LeaderLatchListener进而通过它来监听动作的主变化。节> <节> <强> 1,maven依赖强> 节> <节>
<代码> & lt; properties> 代码> <代码>,& lt; curator.version> 3.2.1 代码> <代码> & lt;/properties> 代码> <代码> & lt; dependency> 代码> <代码>,& lt; groupId> org.apache.curator 代码> <代码>,& lt; artifactId> curator-framework 代码> <代码>,& lt; version> $ {curator.version} & lt;/version> 代码> <代码> & lt;/dependency> 代码> <代码>节>
代码> <代码> & lt; !——https://mvnrepository.com/artifact/org.apache.curator/curator-recipes——在代码> <代码>,& lt; dependency> 代码> <代码>,,& lt; groupId> org.apache.curator 代码> <代码>,,& lt; artifactId> curator-recipes 代码> <代码>,,& lt; version> $ {curator.version} & lt;/version> 代码> <代码>,代码,& lt; exclusions> > <代码>,,代码,& lt; exclusion> > <代码>,,,,& lt; groupId> org.apache.zookeeper 代码> <代码>,,,,& lt; artifactId> zookeeper 代码> <代码>,,代码,& lt;/exclusion> > <代码>,代码,& lt;/exclusions> > <代码>,& lt;/dependency> 代码>
2, LeaderLatchListenerImpl
<节><代码>公共类LeaderLatchListenerImpl,代码实现LeaderLatchListener{> <代码>节>
代码> <代码>,@Override 代码> <代码>,公共空isLeader(){代码> <代码>,,//TODO自动生成方法存根代码> <代码>,,System.out.println (“master"); 代码> <代码>,}代码> <代码>
代码> <代码>,@Override 代码> <代码>,公共空间notLeader(){代码> <代码>,,//TODO自动生成方法存根代码> <代码>,,System.out.println (“slave"); 代码> <代码>,}代码> <代码>}代码>
<强> 3,LeaderLatchListener 强>
<节>馆长如何实现基于管理员领导选举