馆长是如何实现基于动物园管理员领导的选举的,很多新手都不太清楚。为了帮助大家解决这个问题,下面小编就详细讲解一下。需要的人可以从中学习,希望你能有所收获。
一,基本介绍
馆长框架是一个针对动物园管理员的分层API,大大简化了动物园管理员的使用。它基于zookeeper构建了许多功能,处理复杂的链接管理和重试操作。以下是它的一些特性:
1、自动连接管理。
a)、存在潜在的错误情况,需要ZooKeeper客户端创建连接和/或重试操作。策展人自动透明地处理这些情况(主要是)。
b)、监视NodeDataChanged事件,并根据需要调用updateServerList()。
C),手表将被馆长食谱自动移除。
2、简洁的API
a)、提供现代简洁的界面。
b),这简化了动物园管理员的本地方法和事件。
3.已经实现了许多功能。
一)、领导人选举
b)、共享锁
c)、队列
障碍
计数器
缓存
节点
本文主要讲解领导人选举。
目前,分布式系统的基本架构模型是主/从,
二,leader选举
在分布式系统中,一般是主从结构。为了从灾难中恢复,一般希望启动多个主,一个首领和几个随从。如果领袖下台了,追随者会选出一个作为领袖。因此,有必要在多个主数据中选出一个领导者,实际上是为了确保数据的强一致性。
动物园管理员是一个很好的领导选举和配置框架。
CuratorFramework
这个类实例是线程安全的,一个应用程序共享一个更好。您可以通过CuratorFrameworkFactory创建实例。
领导选举的主要类别,两种结构
public leader latch(curatoframeworkclient,StringlatchPath)参数3360 client-the clientlatchpath-theforthisleandshippinggroupublic leader latch(curatoframeworkclient,StringlatchPath,Stringid)参数3360 client-the clientlatchpath-theforthisleandshippinggroupid-participantID
构建完LeaderLatch对象后,我们需要该对象调用start方法来启动,然后我们可以使用
publicbooleanhasLeadership()
returntruifreadershipiscurrentheldbythisinstance
确定当前实例是否为引线。本文采用的领袖选举方案是星火的HA大师采用的方案。
解释火花源代码独立模式下的主持久性引擎。也就是说,实现了LeaderLatchListener来监控动作主的变化。1,maven依赖
它
;properties> <curator.version>3.2.1</curator.version>
</properties>
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-framework</artifactId>
<version>${curator.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.curator/curator-recipes -->
<dependency>
<groupId>org.apache.curator</groupId>
<artifactId>curator-recipes</artifactId>
<version>${curator.version}</version>
<exclusions>
<exclusion>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
</exclusion>
</exclusions>
</dependency>
2,LeaderLatchListenerImpl
public class LeaderLatchListenerImpl implements LeaderLatchListener {
@Override
public void isLeader() {
// TODO Auto-generated method stub
System.out.println("master");
}
@Override
public void notLeader() {
// TODO Auto-generated method stub
System.out.println("slave");
}
}
3,LeaderLatchListener
public class LeaderLatchMain {
private static final String PATH = "/examples/leader";
public static void main(String[] args) throws Exception {
CuratorFramework client = CuratorFrameworkFactory.newClient("106.75.13.87:2181", new ExponentialBackoffRetry(1000, 3));
client.start();
LeaderLatch leaderLatch = new LeaderLatch(client, PATH,args[0]);
leaderLatch.addListener(new LeaderLatchListenerImpl());
try {
leaderLatch.start();
Thread.sleep(10000);
System.out.println(leaderLatch.getLeader());
Thread.sleep(Integer.MAX_VALUE);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
leaderLatch.close();
client.close();
}
}
}
java -jar LeaderLatchMain.jar 1java -jar LeaderLatchMain.jar 2
第一次启动的时候leader
杀死Leader后
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/86838.html