2017-02-23 12 views
0

私はH/Aメカニズムを提供する必要があります。zookeeperを使用して高可用性サービス(2ノード)を実装する方法

私は、この流れのための右のパターンを探していますthet飼育係がリーダー選挙

のように選択することができる理解:私は流れを呼び出すサービスを実装する必要が

。 フローを開始するとき[フローはループフローです]、それがリーダーであることを検証する必要があります。 (それはIPアドレスであると言います)。

私は、 のインスタンスを入力することを定義する飼い葉桶に値を入れて、1つのループの終了時または一定期間廃棄することができると理解しています。

それは正しいパターンですか?例えば

... 
... 
List<String> names = zk.getChildren(path, false); 
String id = null; 
// See whether we have already run for election in this process 
for (String name : names) { 
{ 
    if (name.startsWith(myIP)) { 
     id = name; 
     break; 
    } 
} 
if (id == null) { 
id = zk.create(path + "/" + myIP, new byte[0], ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL); 
} 
boolean isLeader = id != null; 

::私はのようなものを使用している場合

もその競合状態の問題だ

2のサービスは ヌルと第二は、第一の署名を上書きし、それらの両方が実行されているよりも読み仕事。

お手伝いできますか?

困難な場合が正しくのZooKeeperを使用して感謝

答えて

1

、いくつかのAPIと意味論の勉強になります。 leader electionのような一般的なアルゴリズムを既に実装しているキュレーターのような素晴らしいライブラリがあります。 ZooKeeperのドキュメントにはrecipe for leader electionもあります。

関連する問題