今週は忙しいな。週末は酒飲みたい…。ええと、3台でRiakクラスタを組んでみる。



0. クラスタ構築に必要な設定

設定ファイルが次のようになっている必要がある。

・/etc/riak/vm.argsの-nameが「riak@そのノードのIP」となっていること(「riak」の部分はなんでもいいんじゃねーかな)。

1
-name riak@xxx.xxx.xxx.xxx

ちなみに、もしデフォルトの「riak@127.0.0.1」で起動してしまった場合は、vm.argsを編集した上で次のコマンドを叩いて、リネームした旨をクラスタに通知してやらなアカンらしい。このreplaceコマンドは、ノード置き換えのときなどにも使うっぽい。

1
2
3
4
5
6
7
8
9
10
11
# リネーム

/usr/sbin/riak-admin cluster replace riak@127.0.0.1 riak@xxx.xxx.xxx.xxx

# 確認(このフェーズは省略できない)

/usr/sbin/riak-admin cluster plan

# 実行

/usr/sbin/riak-admin cluster commit

・/etc/riak/app.configに下記の設定がされていること(riak_apiとかriak_coreと同じレベルの階層に書く)。これは、6000〜7999のTCPポートを使って、Riakノード同士がおしゃべりするよ、みたいな設定。

1
2
3
4
{ kernel, [
{inet_dist_listen_min, 6000},
{inet_dist_listen_max, 7999}
]}

1. クラスタ構築手順

コンフィグが正しく設定されたら、あとはコマンドを叩いてクラスタを作ってやる。クラスタを作るにはriak-adminコマンドを使って次の手順でおk。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# あるノードで、別のマシンの/etc/riak/vm.args「-name」で指定した名前を使ってjoinする。
# 例えば、2号機で次のコマンドを叩く(riak@111.111.111.111は1号機の-nameと思ってもらえれば)

/usr/sbin/riak-admin cluster join riak@111.111.111.111

# 確認
# planを実行せずに、commitを打つと「You must verify the plan with 'riak-admin cluster plan' before committing」
# ってRiakに怒られる。

/usr/sbin/riak-admin cluster plan

# クラスタへの追加実施

/usr/sbin/riak-admin cluster commit

で、実際にやってみたときの作業ログ。

/usr/sbin/riak-admin cluster join riak@111.111.111.111を、2号機(riak@222.222.222.222)を実行。続いて、riak-admin member-statusを打つと、joiningというステータスになっていることが確認できる。この時点ではまだクラスタに追加されてない模様。

1
2
3
4
5
6
7
============= Membership ================
Status Ring Pending Node
-------------------------------------------------------------------------------
joining 0.0% -- 'riak@222.222.222.222'
valid 100.0% -- 'riak@111.111.111.111'
-------------------------------------------------------------------------------
Valid:1 / Leaving:0 / Exiting:0 / Joining:1 / Down:0

/usr/sbin/riak-admin cluster planを叩くと次の出力が得られる。「これから2号機をクラスタに追加するけどおk?」ってのと、「追加後はこうなるよ」って感じのメッセージが出てる。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
=========== Staged Changes ==================
Action Nodes(s)
-------------------------------------------------------------------------------
join 'riak@222.222.222.222'
-------------------------------------------------------------------------------
NOTE: Applying these changes will result in 1 cluster transition

#################################################
After cluster transition 1/1
#################################################

================ Membership ==============
Status Ring Pending Node
-------------------------------------------------------------------------------
valid 0.0% 50.0% 'riak@222.222.222.222'
valid 100.0% 50.0% 'riak@111.111.111.111'
-------------------------------------------------------------------------------
Valid:2 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

WARNING: Not all replicas will be on distinct nodes

Transfers resulting from cluster changes: 32
32 transfers from 'riak@111.111.111.111' to 'riak@222.222.222.222'

/usr/sbin/riak-admin cluster commitを実行。続いて、riak-admin member-statusを打つと、2号機がクラスタに参加できていることが確認できる。

1
2
3
4
5
6
7
=============== Membership ==================
Status Ring Pending Node
-------------------------------------------------------------------------------
valid 50.0% -- 'riak@111.111.111.111'
valid 50.0% -- 'riak@222.222.222.222'
-------------------------------------------------------------------------------
Valid:2 / Leaving:0 / Exiting:0 / Joining:0 / Down:0

2. クラスタからのノード除去

ノードをクラスタから除けるにはleaveコマンドを使う。作業ログのヒストリは整形が面倒だから省略。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 2号機をleave。

/usr/sbin/riak-admin cluster leave riak@222.222.222.222

# 確認

/usr/sbin/riak-admin cluster plan

# で、コミット

/usr/sbin/riak-admin cluster commit

# メンバーから除けられていることが確認できる。
# しばらく「leaving」ってステータスになってるけどいずれ消える。
# データをいっぱい持ってると時間かかると思う。

/usr/sbin/riak-admin member-status

leaveされたノードは勝手にプロセスが落ちる。

3. 死んだノードのクラスタからの除去

例えば障害が発生して、ハードウェアごと死んだノードをクラスタから除ける場合は、生きてるノードで、死んだノードをforce-removeする。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 死んだ2号機を除ける場合、他のノードで次のコマンドを叩く。

/usr/sbin/riak-admin cluster force-remove riak@222.222.222.222

# 確認

/usr/sbin/riak-admin cluster plan

# で、コミット

/usr/sbin/riak-admin cluster commit

# メンバーから除けられていることが確認できる。
# しばらく「leaving」ってステータスになってるけどいずれ消える。
# データをいっぱい持ってると時間かかると思う。

/usr/sbin/riak-admin member-status

要領は一緒だね。

4. まとめ
  • クラスタへの追加はcluster join→cluster plan→cluster commit
  • クラスタからのノード除去はcluster leave→cluster plan→cluster commit
  • 死んだノードをクラスタから 除去するにはcluster force-remove→cluster plan→cluster commit
次回はクラスタ構成時のオブジェクト保存/取得についてやってみるか。どうせまたCassandraと同じだろ、と思いきや「dw」とか「pr」とか「pw」とかwwwなんなんだろなコレ。「w」がいわゆる書き込み時の一貫性レベルに対して、「dw」はDurable Write、つまりディスクレベルへの書き込みの一貫性?つまり永続層への書き込みをいくつ完了したかどうか???「dw (durable write quorum) how many replicas to commit to durable storage before returning a successful response」まあいいやw次回ww

 

One Response to Riak 03 クラスタ構築

  1. Kath より:

    簡潔なマトメありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Set your Twitter account name in your settings to use the TwitterBar Section.