Riakでのrについて

7つのデータベース7つの世界 第3章Riak2日目でハマるポイントについて中の人 @takabow さんの解説。主にフォールバックノードについて。 http://qiita.com/akm/items/d33472936f6fccf6b26b
4
akimatter @akimatter

N=3で、dev3をstopして、?r=3 でGETしたら 404が返されるはずですよね? 200で返ってきちゃうんですけど、何かおかしい? #riak #fukuoka7db

2014-06-30 20:58:46
takabow @takabow

@akimatter 200が返るのが正しいです。停止サーバーが本来担っていたvnodeへのアクセスは、生存ノードが肩代わりしますので。 slideshare.net/takahikosato/d… slideshare.net/takahikosato/d… docs.basho.com/riak/latest/th…

2014-07-01 00:09:37
akimatter @akimatter

@takabow ありがとうございます! なるほどです。ではa,b,cというノードがあって、cがダウンしている際の、r=3の内訳としては、 a と b と フォールバックノード(a or b) の3つということになるんでしょうか?

2014-07-01 00:25:10
takabow @takabow

@akimatter その場合はそうですね、ノードaかbのどちらかのvnodeが、フォールバックノードとして動作します。単にノードcをstopしたあとgetした場合、フォールバックノードはデータを持っていませんのでフォールバックは空っぽのvalueを返すはずですが、

2014-07-01 00:28:28
takabow @takabow

@akimatter a,bからの応答に正しい最新のvalueが入ってるので、それがクライアントには返されます。

2014-07-01 00:28:54
takabow @takabow

@akimatter rではなくprという設定が別途存在します。これはフォールバックノードからの応答を許さない設定です。pr=3をでgetすると違いが見えると思います。

2014-07-01 00:31:07
akimatter @akimatter

@takabow なるほど! フォールバックノードというものをわかってなかったのでprの意味もよくわからなかったんですが、お陰様で分かった気がしたんですが、 qiita.com/akm/items/d334… の環境でpr=3 だと 503が返ってくるんですがこれはこれでOKですか?

2014-07-01 00:36:26
takabow @takabow

@akimatter はい、n=3,pr=3なので、3つのプライマリ(ここでの意味は本来レプリカが格納される3つのサーバー)全てから応答が返らないとread requestが受理できないという意味です。受理できないので503ですね。404は受理したうえでデータが無いという意味です

2014-07-01 00:39:44
akimatter @akimatter

@takabow 良かったw やっと納得できました。本当ありがとうございます!

2014-07-01 00:41:49
takabow @takabow

@akimatter さっきの503ですが、503 の http bodyには "PR-value unsatisfied: 1/3" と入ってると思うので、併せてそれもご確認を〜

2014-07-01 00:52:56
akimatter @akimatter

@takabow ホントだ、来てました。ありがとうございます!

2014-07-01 00:57:20