Riakクラスターでノードが失われた時の挙動

Riakのクラスターを構成してみました。

Riakのクラスターを構成する手順(ノードの追加と削除)
http://symfoware.blog68.fc2.com/blog-entry-1161.html

せっかくなので、クラスター内のノードが失われた時の挙動について見てみます。




データ登録



サンプルとして、簡単なデータを100件ほど登録してみました。
使用したソースは以下のとおり。


  1. package com.fc2.blog68.symfoware;
  2. import com.basho.riak.client.IRiakClient;
  3. import com.basho.riak.client.RiakFactory;
  4. import com.basho.riak.client.bucket.Bucket;
  5. public class RiakSample {
  6.     
  7.     public static void main(String[] args) throws Exception {
  8.         
  9.         IRiakClient riakClient = RiakFactory.pbcClient("192.168.1.5", 8087);
  10.         
  11.         // バケットを作成
  12.         Bucket myBucket = riakClient.createBucket("myBucket").execute();
  13.         
  14.         // key001-value001からkey100-value100まで登録
  15.         for(int i = 1; i <= 100; i++) {
  16.             String num = String.format("%03d", i);
  17.             myBucket.store("key" + num, "value" + num).execute();
  18.         }
  19.         
  20.         // サーバーとの接続終了
  21.         riakClient.shutdown();
  22.     }
  23. }





プログラムを実行した後、Node 1、Node 2でそれぞれ「riak-admin vnode-status」を
実行してみました。結果は以下のようになります。


Node 1


# riak-admin vnode-status
Vnode status information
-------------------------------------------

VNode: 0
Backend: riak_kv_bitcask_backend
Status:
[{key_count,2},{status,[]}]

VNode: 22835963083295358096932575511191922182123945984
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 91343852333181432387730302044767688728495783936
Backend: riak_kv_bitcask_backend
Status:
[{key_count,4},{status,[]}]

VNode: 114179815416476790484662877555959610910619729920
Backend: riak_kv_bitcask_backend
Status:
[{key_count,4},{status,[]}]

VNode: 182687704666362864775460604089535377456991567872
Backend: riak_kv_bitcask_backend
Status:
[{key_count,5},{status,[]}]

VNode: 205523667749658222872393179600727299639115513856
Backend: riak_kv_bitcask_backend
Status:
[{key_count,5},{status,[]}]

VNode: 274031556999544297163190906134303066185487351808
Backend: riak_kv_bitcask_backend
Status:
[{key_count,4},{status,[]}]

VNode: 296867520082839655260123481645494988367611297792
Backend: riak_kv_bitcask_backend
Status:
[{key_count,5},{status,[]}]

VNode: 365375409332725729550921208179070754913983135744
Backend: riak_kv_bitcask_backend
Status:
[{key_count,3},{status,[]}]

VNode: 388211372416021087647853783690262677096107081728
Backend: riak_kv_bitcask_backend
Status:
[{key_count,4},{status,[]}]

VNode: 456719261665907161938651510223838443642478919680
Backend: riak_kv_bitcask_backend
Status:
[{key_count,1},{status,[]}]

VNode: 479555224749202520035584085735030365824602865664
Backend: riak_kv_bitcask_backend
Status:
[{key_count,2},{status,[]}]

VNode: 548063113999088594326381812268606132370974703616
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 570899077082383952423314387779798054553098649600
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 639406966332270026714112114313373821099470487552
Backend: riak_kv_bitcask_backend
Status:
[{key_count,4},{status,[]}]

VNode: 662242929415565384811044689824565743281594433536
Backend: riak_kv_bitcask_backend
Status:
[{key_count,4},{status,[]}]

VNode: 730750818665451459101842416358141509827966271488
Backend: riak_kv_bitcask_backend
Status:
[{key_count,8},{status,[]}]

VNode: 753586781748746817198774991869333432010090217472
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 822094670998632891489572718402909198556462055424
Backend: riak_kv_bitcask_backend
Status:
[{key_count,3},{status,[]}]

VNode: 844930634081928249586505293914101120738586001408
Backend: riak_kv_bitcask_backend
Status:
[{key_count,7},{status,[]}]

VNode: 913438523331814323877303020447676887284957839360
Backend: riak_kv_bitcask_backend
Status:
[{key_count,3},{status,[]}]

VNode: 936274486415109681974235595958868809467081785344
Backend: riak_kv_bitcask_backend
Status:
[{key_count,4},{status,[]}]

VNode: 1004782375664995756265033322492444576013453623296
Backend: riak_kv_bitcask_backend
Status:
[{key_count,7},{status,[]}]

VNode: 1027618338748291114361965898003636498195577569280
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 1096126227998177188652763624537212264741949407232
Backend: riak_kv_bitcask_backend
Status:
[{key_count,4},{status,[]}]

VNode: 1118962191081472546749696200048404186924073353216
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 1187470080331358621040493926581979953470445191168
Backend: riak_kv_bitcask_backend
Status:
[{key_count,5},{status,[]}]

VNode: 1210306043414653979137426502093171875652569137152
Backend: riak_kv_bitcask_backend
Status:
[{key_count,9},{status,[]}]

VNode: 1278813932664540053428224228626747642198940975104
Backend: riak_kv_bitcask_backend
Status:
[{key_count,5},{status,[]}]

VNode: 1301649895747835411525156804137939564381064921088
Backend: riak_kv_bitcask_backend
Status:
[{key_count,8},{status,[]}]

VNode: 1370157784997721485815954530671515330927436759040
Backend: riak_kv_bitcask_backend
Status:
[{key_count,4},{status,[]}]

VNode: 1392993748081016843912887106182707253109560705024
Backend: riak_kv_bitcask_backend
Status:
[{key_count,2},{status,[]}]






Node 2


# riak-admin vnode-status
Vnode status information
-------------------------------------------

VNode: 45671926166590716193865151022383844364247891968
Backend: riak_kv_bitcask_backend
Status:
[{key_count,7},{status,[]}]

VNode: 68507889249886074290797726533575766546371837952
Backend: riak_kv_bitcask_backend
Status:
[{key_count,7},{status,[]}]

VNode: 137015778499772148581595453067151533092743675904
Backend: riak_kv_bitcask_backend
Status:
[{key_count,3},{status,[]}]

VNode: 159851741583067506678528028578343455274867621888
Backend: riak_kv_bitcask_backend
Status:
[{key_count,5},{status,[]}]

VNode: 228359630832953580969325755111919221821239459840
Backend: riak_kv_bitcask_backend
Status:
[{key_count,3},{status,[]}]

VNode: 251195593916248939066258330623111144003363405824
Backend: riak_kv_bitcask_backend
Status:
[{key_count,4},{status,[]}]

VNode: 319703483166135013357056057156686910549735243776
Backend: riak_kv_bitcask_backend
Status:
[{key_count,3},{status,[]}]

VNode: 342539446249430371453988632667878832731859189760
Backend: riak_kv_bitcask_backend
Status:
[{key_count,2},{status,[]}]

VNode: 411047335499316445744786359201454599278231027712
Backend: riak_kv_bitcask_backend
Status:
[{key_count,4},{status,[]}]

VNode: 433883298582611803841718934712646521460354973696
Backend: riak_kv_bitcask_backend
Status:
[{key_count,2},{status,[]}]

VNode: 502391187832497878132516661246222288006726811648
Backend: riak_kv_bitcask_backend
Status:
[{key_count,2},{status,[]}]

VNode: 525227150915793236229449236757414210188850757632
Backend: riak_kv_bitcask_backend
Status:
[{key_count,3},{status,[]}]

VNode: 593735040165679310520246963290989976735222595584
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 616571003248974668617179538802181898917346541568
Backend: riak_kv_bitcask_backend
Status:
[{key_count,5},{status,[]}]

VNode: 685078892498860742907977265335757665463718379520
Backend: riak_kv_bitcask_backend
Status:
[{key_count,4},{status,[]}]

VNode: 707914855582156101004909840846949587645842325504
Backend: riak_kv_bitcask_backend
Status:
[{key_count,5},{status,[]}]

VNode: 776422744832042175295707567380525354192214163456
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 799258707915337533392640142891717276374338109440
Backend: riak_kv_bitcask_backend
Status:
[{key_count,3},{status,[]}]

VNode: 867766597165223607683437869425293042920709947392
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 890602560248518965780370444936484965102833893376
Backend: riak_kv_bitcask_backend
Status:
[{key_count,7},{status,[]}]

VNode: 959110449498405040071168171470060731649205731328
Backend: riak_kv_bitcask_backend
Status:
[{key_count,5},{status,[]}]

VNode: 981946412581700398168100746981252653831329677312
Backend: riak_kv_bitcask_backend
Status:
[{key_count,5},{status,[]}]

VNode: 1050454301831586472458898473514828420377701515264
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 1073290264914881830555831049026020342559825461248
Backend: riak_kv_bitcask_backend
Status:
[{key_count,4},{status,[]}]

VNode: 1141798154164767904846628775559596109106197299200
Backend: riak_kv_bitcask_backend
Status:
[{key_count,5},{status,[]}]

VNode: 1164634117248063262943561351070788031288321245184
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 1233142006497949337234359077604363797834693083136
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 1255977969581244695331291653115555720016817029120
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 1324485858831130769622089379649131486563188867072
Backend: riak_kv_bitcask_backend
Status:
[{key_count,9},{status,[]}]

VNode: 1347321821914426127719021955160323408745312813056
Backend: riak_kv_bitcask_backend
Status:
[{key_count,6},{status,[]}]

VNode: 1415829711164312202009819681693899175291684651008
Backend: riak_kv_bitcask_backend
Status:
[{key_count,2},{status,[]}]

VNode: 1438665674247607560106752257205091097473808596992
Backend: riak_kv_bitcask_backend
Status:
[{key_count,1},{status,[]}]




key_countで表示された値を足すと、100か200になるんだろと思っていたのですが、

Node 1:152
Node 2:148

となり、合計300件のキーが登録されています。






Node 2の停止



Node 2(192.168.1.6)のriakを停止します。


# riak stop




停止した時の管理画面はこんな表示になりました。

241_01.png

241_02.png


先ほど登録したデータを検索するプログラムを実行してみます。


  1. package com.fc2.blog68.symfoware;
  2. import com.basho.riak.client.IRiakClient;
  3. import com.basho.riak.client.IRiakObject;
  4. import com.basho.riak.client.RiakFactory;
  5. import com.basho.riak.client.bucket.Bucket;
  6. public class RiakSample {
  7.     
  8.     public static void main(String[] args) throws Exception {
  9.         
  10.         IRiakClient riakClient = RiakFactory.pbcClient("192.168.1.5", 8087);
  11.         
  12.         // バケットを作成
  13.         Bucket myBucket = riakClient.createBucket("myBucket").execute();
  14.         
  15.         int notfound = 0;
  16.         
  17.         // key001からkey100まで検索
  18.         for(int i = 1; i <= 100; i++) {
  19.             String key = String.format("key%03d", i);
  20.             IRiakObject fetched = myBucket.fetch(key).execute();
  21.             
  22.             if (fetched == null) {
  23.                 notfound++;
  24.             } else {
  25.                 System.out.println(fetched.getValueAsString());
  26.             }
  27.             
  28.         }
  29.         
  30.         // サーバーとの接続終了
  31.         riakClient.shutdown();
  32.         
  33.         System.out.println(notfound);
  34.     }
  35. }





停止した直後の実行結果はこうなりました。


value001
value002
value003
value004
value005
value006
value007
value008
value009
value011
value012
value013
value015
value016
value019
value021
value022
value023
value024
value025
value026
value027
value028
value029
value030
value031
value032
value033
value034
value035
value038
value039
value040
value041
value042
value043
value044
value045
value048
value053
value057
value060
value061
value062
value065
value067
value069
value072
value074
value076
value077
value079
value082
value083
value085
value087
value089
value090
value091
value092
value094
value095
value096
value097
36




100件中、36件検索できないデータがあります。
あれっ?冗長構成取れてないのかなと思ったのですが、ほんの5秒後ぐらいに
再度同じプログラムを実行すると、


value001
value002
value003
value004
value005
value006
value007
value008
value009
value010
value011
value012
value013
value014
value015
value016
value017
value018
value019
value020
value021
value022
value023
value024
value025
value026
value027
value028
value029
value030
value031
value032
value033
value034
value035
value036
value037
value038
value039
value040
value041
value042
value043
value044
value045
value046
value047
value048
value049
value050
value051
value052
value053
value054
value055
value056
value057
value058
value059
value060
value061
value062
value063
value064
value065
value066
value067
value068
value069
value070
value071
value072
value073
value074
value075
value076
value077
value078
value079
value080
value081
value082
value083
value084
value085
value086
value087
value088
value089
value090
value091
value092
value093
value094
value095
value096
value097
value098
value099
value100
0




今度は全件検索可能に。
ダウン検知後、自動的に復旧が行われるようです。



関連記事

コメント

非公開コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ