20. $ ./nodeprobe -host localhost ring
Address Status Load Range Ring
124039723817946554142311632841015584374
192.168.0.97 Up 0 bytes 54726667172133563740938363913892816149 |<--|
192.168.0.99 Up 0 bytes 85116141055809869248935675462381407463 | |
192.168.0.91 Up 0 bytes 124039723817946554142311632841015584374 |-->|
このようにクラスタが組めていることがわかる。
・ データ操作(投入、更新、削除)
バックアップだが、SSTable のバックアップを JSON 形式で IMPORT/EXPORT するツール
が用意されている 。
。
・ データ操作(投入、更新、削除)
データ操作用に cassandra-cli というコマンドラインツールが存在している。
20
21. $ $ ./cassandra-cli
Welcome to cassandra CLI.
Type 'help' or '?' for help. Type 'quit' or 'exit' to quit.
cassandra>
cassandra> get KsName1.CfByte1['test807837']
=> (column=testdata1, value=807837, timestamp=1269433560)
Returned 1 results.
# データ取得
cassandra> get KsName1.CfByte1['test807837']
=> (column=testdata1, value=807837, timestamp=1269433560)
Returned 1 results.
# データ書き込み
.cassandra> set KsName1.CfByte1['testtest']['CfByte1'] = '123456'
Value inserted.
cassandra> get KsName1.CfByte1['testtest']
=> (column=CfByte1, value=123456, timestamp=1269587633646)
Returned 1 results.
# データ上書
cassandra> set KsName1.CfByte1['testtest']['CfByte1'] = '1234567'
Value inserted.
cassandra> get KsName1.CfByte1['testtest']
=> (column=CfByte1, value=1234567, timestamp=1269587649878)
Returned 1 results.
・ ノード追加(とその後のデータの配置され方について)
クラスタに存在しているサーバの追加も行ってみた。
まず、新しいサーバ 4 台目の storage-conf.xml を以下のように seed の設定に 4 台目
を追加してクラスタに参加させてみた。
21
22. $ vi ../conf/storage-conf.xml
<Seeds>
<Seed>cass-test01</Seed>
<Seed>cass-test02</Seed>
<Seed>cass-test03</Seed>
<Seed>cass-test04</Seed>
</Seeds>
$ ./cassandra -p ./cassandra.pid
INFO - Replaying /var/lib/cassandra/commitlog/CommitLog-1269269853066.log
INFO - Log replay complete
INFO - Saved Token not found. Using 97147856872319332778007596849029295064
INFO - Starting up server gossip
この状態で、クラスタの状態を確認してみると以下のようになっている。
$ ./nodeprobe -host cass-test01 ring
Address Status Load Range Ring
124039723817946554142311632841015584374
192.168.0.97 Down 1.5 GB 54726667172133563740938363913892816149 |<--|
192.168.0.99 Up 767 MB 85116141055809869248935675462381407463 | |
192.168.0.94 Up 1.47 KB 97147856872319332778007596849029295064 | |
192.168.0.91 Up 643.61 MB 124039723817946554142311632841015584374 |-->|
この結果から、すべてのサーバに対して seed の設定を行わなくとも Gossip 経由での
情報伝達が行われることがわかった。
追加検証としてその後に 100 万件のデータ追加をしてみてどのような動きをするか
を確認してみた。
22
23. $ ./nodeprobe -host cass-test01 ring
Address Status Load Range Ring
124039723817946554142311632841015584374
192.168.0.97 Up 1.9 GB 54726667172133563740938363913892816149 |<--|
192.168.0.99 Up 1.02 GB 85116141055809869248935675462381407463 | |
192.168.0.94 Up 120.55 MB 97147856872319332778007596849029295064 | |
192.168.0.91 Up 768.39 MB 124039723817946554142311632841015584374 |-->|
この結果を受けると、特にサーバを追加したことによりそのサーバに負荷が集中する
ことはないが、今までのデータの再配置の様な物も行われないため、先に追加したサー
バのキャパが先に枯渇する様なことがありうる。
・ バックアップ/リストア
SSTable を JSON 形式で IMPORT/EXPORT するツールが用意されている 。
。
○バックアップ
# su - cassandra
$ cd /usr/local/apache-cassandra/bin
$ ./sstable2json -f CfByte1-36-Data.json /var/lib/cassandra/data/KsName1/CfByte1-36-Data.db
INFO - Sampling index for /var/lib/cassandra/data/KsName1/CfByte1-36-Data.db
$ cat CfByte1-36-Data.json
{
"test843352": [["746573746461746131", "383433333532", 1269433709, false]],
"test768227": [["746573746461746131", "373638323237", 1269433388, false]],
"test784089": [["746573746461746131", "373834303839", 1269433462, false]],
(snip)
"test851643": [["746573746461746131", "383531363433", 1269433743, false]]
}
$
23