您好,登錄后才能下訂單哦!
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
public boolean hasLeadership() Return true if leadership is currently held by this instance
<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后
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。