Consistency level

14,197 views
14,106 views

Published on

Published in: Technology, Business
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
14,197
On SlideShare
0
From Embeds
0
Number of Embeds
9,656
Actions
Shares
0
Downloads
57
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Consistency level

  1. 1. ConsistencyLevel<br />株式会社ムロドー<br />とみたかずたか<br />
  2. 2. 全回アジェンダ<br />cassandraを複数で立ち上げる<br />コンシステンシーレベルとは<br />ゴシッププロトコル?<br />複数ノードで異なる設定<br />巨大なデータを入れてみる<br />ノードのスプリットブレイン<br />
  3. 3. アジェンダ<br />ConsistencyLevelとは?<br />データは何処にあるのか?<br />データは何処まで書き込まれるのか?<br />データは何時書き込まれるのか?<br />データを読み込む<br />
  4. 4. データは何処にあるのか?(Partition)<br />複数ノードを立ち上げた時に実際データは何処にあるのか<br />storage-conf.xmlのPartitionerがorg.apache.cassandra.dht.RandomPartitionerの場合<br />(デフォルト)、キーをMD5でHash値化した値を整数とみなし、0から2^127の間の<br />各ノードが持つレンジに割り当てる。<br />例)<br />KS「TimeStampSimpleTrees」、CF「SimpleTrees」、<br />key「3」、Column「id」データの場合<br />TimeStampSimpleTrees.SimpleTrees['3']['id']<br />keyをmd5でハッシュ化->「314755909755515592000481005244904880883」<br />Nodetoolより<br />pompadour@zaku2-F-1:~$ nodetool --host 192.168.1.104 ring<br />Address Status Load Range Ring<br /> 123621947362397555094783433836216926846 <br />192.168.1.106 Up 21.53 MB 4368941974377008489670679703283346037 |<--|<br />192.168.1.6 Up 11.01 MB 53716703941129153059732412441632990819 | |<br />192.168.1.104 Up 4.37 MB 72360816833403413813516172818645147903 | |<br />192.168.1.109 Up 10.95 MB 123621947362397555094783433836216926846 |-->|<br />192.168.1.109のキー「123621947362397555094783433836216926846」より大きい<br />よってプライマリレプリカは「192.168.1.106」<br />
  5. 5. データは何処まで書き込まれるのか?<br />複数ノードを立ち上げた時にデータはどのノードに書き込まれるのか?<br />storage-conf.xmlのReplicaPlacementStrategyがRackUnawareStrategyの場合<br />(デフォルト)、 ring上で隣り合うn-1分、右のノードまで書き込む。(next 2-1 nodes)<br />N=ReplicationFactor<br />例)<br />key「3」のハッシュ化->「314755909755515592000481005244904880883」<br />ReplicationFactor=2<br />2-1ノード右まで<br />192.168.1.106<br />4368941974377008489670679703283346037<br />192.168.1.6<br />53716703941129153059732412441632990819<br />192.168.1.109<br /> 123621947362397555094783433836216926846 <br />192.168.1.104<br />72360816833403413813516172818645147903<br />
  6. 6. thriftAPIで見てみる<br />thriftAPIのdescribe_ringを使用してリング情報を取得する。<br />例)<br />KS「TimeStampSimpleTrees」のringを取得<br />ReplicationFactor=2<br />結果を成形<br />[<br />TokenRange(<br />end_token='123621947362397555094783433836216926846',<br />start_token='72360816833403413813516172818645147903', <br /> endpoints=['192.168.1.109', '192.168.1.106']),<br />TokenRange(<br />end_token='72360816833403413813516172818645147903',<br />start_token='53716703941129153059732412441632990819',<br /> endpoints=['192.168.1.104', '192.168.1.109']),<br />TokenRange(<br />end_token='4368941974377008489670679703283346037',<br />start_token='123621947362397555094783433836216926846',<br /> endpoints=['192.168.1.106', '192.168.1.6']),<br />TokenRange(<br />end_token='53716703941129153059732412441632990819',<br />start_token='4368941974377008489670679703283346037',<br /> endpoints=['192.168.1.6', '192.168.1.104'])<br />]<br />「3」のhash値「314755909755515592000481005244904880883」は<br />「 192.168.1.109」, 「192.168.1.6」に格納される。<br />
  7. 7. データは何時書き込まれるのか?<br />複数ノードを立ち上げた時に実際データは何時書き込まれるのか?<br />ReadOP<br />ConsistencyLevelZERO<br />memtable<br />Flush<br />Memory<br />Disk<br />SSTable<br />SSTable<br />SSTable<br />WriteOP<br />CommitLog<br />YES<br />Forlocal<br />No<br />YES<br />Withhints<br />WriteHints<br />No<br />MessageSenttoothernode<br />
  8. 8. データは何時書き込まれるのか?<br />複数ノードを立ち上げた時に実際データは何時書き込まれるのか?<br />ConsistencyLevel その他<br />CommitLog<br />YES<br />Forlocal<br />No<br />YES<br />Withhints<br />WriteHints<br />WriteOP<br />No<br />Sentmessagestoothernode<br />Returnmessagefromothernode<br />
  9. 9. データを読み込む<br />複数ノードの場合データはどの様に呼び出されるのか?<br />対応しているのは現状ConsistencyLevel.ONEとConsistencyLevel. QUORUMのみ。<br />「ONE」:<br />最初に接続要求のあったノードによって返されたレコードを返答。<br /> 一貫性を保持するためにバックグラウンド系で常時チェックを実行。<br /> 最初の要求で古いデータを返答したとしても、その後の呼び出しで<br />正しいデータを返答。(「リードリペア」と呼ばれます。)<br />「QUORUM」:<br />いったん全てのノードに問い合わせを行い、レプリカも含めた<br />返答データの内、 最も新しいTimeStampを持つレコードを返答。<br /> 古いレコードを持つレプリカはバックグラウンドでチェックされる。<br />
  10. 10. 宣伝<br />日経BP様より依頼があって日経Linuxに記事書きました。<br />でも原稿提出してからレスポンスが殆どないので本当に掲載されるか分かりません。W<br />内容はAmazonEC2で複数ノードのCassandraを使うです。<br />質問等有れば連絡ください。<br /> twitter:railute<br />blog:http://www.intheforest.jp/blog/<br /> e-mail:tomitakazutaka@gmail.com<br />

×