Cassandra の操作¶
ここでは Cassandra の操作方法を説明します。
データ(keyspace)の削除¶
- 設定例
以下の説明は【表1. cassandra-config.xml設定例】を元に実行しています。
【表1. cassandra-config.xml設定例】
クラスタ名
IMBox Cluster
ホストのIPアドレス
localhost
ホストのポート番号
9160
認証設定の有効化
false
キースペース
default
Cassandra を起動します。
Cassandra が起動していることを確認し、cassandra-cliを起動します。
cassandra-cliの起動方法は以下の通りです。
Windowsの場合、<%CASSANDRA_HOME%/bin/cassandra-cli.bat>をダブルクリックします。
Linuxの場合、以下のコマンドで起動します。
/usr/local/cassandra/bin/cassandra-cliコンソールが立ち上がったら、以下のコマンドを入力ください。
connect localhost/9160;コンソールに「Connected to: “IMBox Cluster” on localhost/9160」と表示されるので、以下のコマンドを入力ください。
drop keyspace default;コンソールに「... schemas agree across the cluster」が表示されたら削除完了です。
フラッシュ¶
Cassandra では、データは、memtableというメモリ上に保存されています。cassandra.yamlの「data_file_directories」プロパティで設定したファイルシステム上のSStableへデータを書き込むには、nodetoolのflushコマンドを実行する必要があります。冗長化していない場合などにmemtableのデータが、SStableに書かれる前にサーバが停止した場合にデータが損失する恐れがありますので、定期的にフラッシュすることを推奨します。# /usr/local/cassandra/bin/nodetool -h [実行したいノードのIPアドレス] flush (windowsの場合:C:/ > %CASSANDRA_HOME%/bin/nodetool -h [実行したいノードのIPアドレス] flush)実行すると、Cassandra 上で、以下のようなログが出力されます。
INFO 15:12:11,104 Enqueuing flush of Memtable-Versions@2895088(83/103 serialized/live bytes, 3 ops) INFO 15:12:11,105 Writing Memtable-Versions@2895088(83/103 serialized/live bytes, 3 ops) INFO 15:12:11,258 Completed flushing %CASSANDRA_HOME%\data\system\Versions\system-Versions-he-3-Data.db (247 bytes) for commitlog position ReplayPosition(segmentId=42805933509718, position=544)
スナップショット¶
Cassandra のデータをバックアップするには、nodetoolのsnapshotコマンドでスナップショットを取得することが必要です。ただし、 Cassandra のスナップショットは、SStableというファイルのみをコピーするだけですので、スナップショットを実行する前に、フラッシュコマンドを実行することが必須です。スナップショットの手順は以下のとおりです。# /usr/local/cassandra/bin/nodetool -h [実行したいノードのIPアドレス] flush # /usr/local/cassandra/bin/nodetool -h [実行したいノードのIPアドレス] snapshot -t (任意のスナップショット名)コラム
スナップショットされたデータは、conf/cassandra.yamlの「data_file_directories」プロパティで指定されたディレクトリの配下に格納されます。詳細は以下を参照してください。以下、%CASSANDRA_HOME%/conf/cassandra.yamlの「data_file_directories」が/var/lib/cassandra/data/ の場合
Cassandra のシステム情報 /var/lib/cassandra/data/system/(カラムファミリー名)/snapshot/(スナップショット名) IMBoxのデータ /var/lib/cassandra/data/default/(カラムファミリー名)/snapshot/(スナップショット名) コラム
スナップショットの削除
snapshot ディレクトリすべてを削除します。
# /usr/local/cassandra/bin/nodetool -h [実行したいノードのIPアドレス] clearsnapshot任意のsnapshotを削除します。
# /usr/local/cassandra/bin/nodetool -h [実行したいノードのIPアドレス] clearsnapshot -t (任意のスナップショット名)注意
Windows環境にて clearsnapshot コマンドを実行した場合、削除対象のファイルがCassandraのプロセスに握られているため削除処理に失敗します。以下のコマンドを実行することでSSTableが再生成され、その過程でファイルへの参照が外れます。nodetool upgradesstablesその後 clearsnapshot を実行することで、スナップショットが正常に削除されます。なお、Linux環境の場合には上記の問題は発生しません。
スナップショットデータによる復旧(リストア)¶
スナップショットによりデータを退避していた場合、以下の手順で、スナップショット時点に復旧(リストア)することが可能です。
- Cassandra を停止
- commitlog(例:/var/lib/cassandra/commit_log)のファイルを削除
- SSTableを削除(/var/lib/cassandra/data/default/(カラムファミリー名)/ の各dbファイルを削除)
- スナップショットの各dbファイルを/var/lib/cassandra/data/default/(カラムファミリー名)にコピー。
- Cassandra を起動