YUKI Piro Hiroshi
null+****@clear*****
Tue May 20 19:17:14 JST 2014
YUKI "Piro" Hiroshi 2014-05-20 19:17:14 +0900 (Tue, 20 May 2014) New Revision: 165017a5ca28ade738691b7c4e28bac7f12edba4 https://github.com/droonga/wikipedia-search/wiki/Droonga%E3%82%AF%E3%83%A9%E3%82%B9%E3%82%BF%E3%81%AB%E3%83%8E%E3%83%B3%E3%82%B9%E3%83%88%E3%83%83%E3%83%97%E3%81%A7%E3%83%8E%E3%83%BC%E3%83%89%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%99%E3%82%8B%E6%89%8B%E9%A0%86/165017a5ca28ade738691b7c4e28bac7f12edba4 Message: Updated Droongaクラスタにノンストップでノードを追加する手順 (markdown) Modified files: Droongaクラスタにノンストップでノードを追加する手順.md Modified: Droongaクラスタにノンストップでノードを追加する手順.md (+28 -20) =================================================================== --- Droongaクラスタにノンストップでノードを追加する手順.md 2014-05-20 19:09:49 +0900 (cda61d6) +++ Droongaクラスタにノンストップでノードを追加する手順.md 2014-05-20 19:17:14 +0900 (c28f0a4) @@ -43,28 +43,12 @@ droonga-engineは以下の挙動になるよう変更を行っておく。 ## 基本方針 - 1. node1をクラスタから切り離す。 - 2. node2をクラスタに仮追加する。 + 1. node2をクラスタに仮追加する。 + 2. node1をクラスタから切り離す。 3. node1からnode2へデータを複製する。 4. node1, node2を元のクラスタに戻す。 -## step1: node1をクラスタから切り離す - -node1のcatalog.jsonのノード構成を変更し、クラスタから切り離す。 - - node1% droonga-catalog-modify-replicas --dataset=Starbucks \ - --add-hosts="" \ - --remove-hosts=192.168.100.50,192.168.100.52 \ - --source=~/droonga/catalog.json \ - --output=~/droonga/staging-catalog/catalog.json - -この時点で、 - - * node1は、生存ノードから見た時は死んだノードとして扱われるようになる。 - * node1自身から見た時は、node1だけのクラスタとなっている。 - * 生存ノードからnode1へ配送される予定だったwriteなメッセージが、バッファに溜まり始める。 - -## step2: node2をクラスタに仮追加する +## step1: node2をクラスタに仮追加する 複製作業に関わらないノード(生存ノード、ここではnode0のみ)のcatalog.jsonに、node2の情報を加えて、最終的な構成の状態にあたるcatalog.jsonを用意する。 @@ -88,6 +72,23 @@ node1のcatalog.jsonのノード構成を変更し、クラスタから切り離 * 生存ノードからnode2へ配送される予定だったwriteなメッセージが、バッファに溜まり始める。 +## step2: node1をクラスタから切り離す + +node1のcatalog.jsonのノード構成を変更し、クラスタから切り離す。 + + node1% droonga-catalog-modify-replicas --dataset=Starbucks \ + --add-hosts="" \ + --remove-hosts=192.168.100.50,192.168.100.52 \ + --source=~/droonga/catalog.json \ + --output=~/droonga/staging-catalog/catalog.json + +この時点で、 + + * node1は、生存ノードから見た時は死んだノードとして扱われるようになる。 + * node1自身から見た時は、node1だけのクラスタとなっている。 + * 生存ノードからnode1へ配送される予定だったwriteなメッセージが、バッファに溜まり始める。 + + ## step3: node1からnode2へデータを複製する。 drndumpでデータを複製する。 @@ -107,6 +108,11 @@ drndumpでデータを複製する。 --datasets=Starbacks \ --tag=starbacks +この時、 + + * node1は、drndumpの結果の一部として、drndumpの開始時刻を送出する。 + * node2は、drndumpから受け取った「drndumpの開始時刻」を、「有効期限切れと見なすメッセージの時刻」として保持する。 + ## step4: node1, node2を元のクラスタに戻す。 最終的な構成のクラスタのためのcatalog.jsonをnode1, node2に展開する。 @@ -119,8 +125,10 @@ droonga-engineが自動的に新しいcatalog.jsonを認識する。 ここで、node1とnode2は、生存ノードから見た時に、ステータスが「死んでいるノード」から「復帰中のノード」に切り替わる。 * 生存ノードはバッファに溜め込んでおいたwriteなメッセージを、復帰中のノード(node1とnode2)に配送し始める。 + * node2は、保持している「有効期限切れと見なすメッセージの時刻」に基づいて、バッファから配送されてきたメッセージのうち、node1には渡されていないがnode2には渡されていたというメッセージ(=すでにdrndumpを通じてnode1から結果を受け取っているメッセージ)を破棄する。 * バッファが空になるまでは、復帰中のノード宛のメッセージはバッファに貯まっていく。 * バッファが空になったら、復帰中のノードは「生きている」状態に戻る。 - * 生存ノードの状態に戻った後は、通常通りメッセージが流れてくるようになる。 + * 生存ノードの状態に戻った後は、通常通りメッセージが流れてくるようになる。 + * 「有効期限切れと見なすメッセージの時刻」はもう不要なので、破棄する。 以上でノードの追加は完了である。 \ No newline at end of file -------------- next part -------------- HTML����������������������������...Download