8. Cassandra の操作¶
ここでは Cassandra の操作方法を説明します。本書では以下の説明は【表1. Cassandra接続情報設定例】を元に記載しています。
【表1. Cassandra接続情報設定例】
クラスタ名 IMBox Cluster ホストのIPアドレス localhost ホストのポート番号 9160 認証設定の有効化 false キースペース default
8.1. キースペースの作成方法¶
Cassandra を起動します。
Cassandra が起動していることを確認し、cassandra-cliを起動します。
- Windowsの場合、<%CASSANDRA_HOME%/bin/cassandra-cli.bat>をダブルクリックします。
- Linuxの場合、以下のコマンドで起動します。
/usr/local/cassandra/bin/cassandra-cliコンソールが立ち上がったら、以下のコマンドを入力してください。
connect localhost/9160;接続に成功したことを確認し、以下のコマンドを入力してください。
create keyspace default;以下のメッセージが表示され、キースペース「default」の作成に成功したことが確認できます。
... schemas agree across the cluster
8.2. キースペースの作成方法(認証設定ありの場合)¶
Cassandra に以下の条件でキースペースを作成する手順を紹介します。
- 接続ユーザ名 : aoyagi
- パスワード : aoyagi_pwd
- キースペース名 : imbox_keyspace
接続認証設定 (passwd.properties)にパスワードを追加します。
admin=admin_pwd user=user_pwd aoyagi=aoyagi_pwdアクセス権設定 (access.properties)にaoyagiがアクセスできるキースペースを追加します。
# The magical '<modify-keyspaces>' property lists users who can modify the # list of keyspaces: all users will be able to view the list of keyspaces. <modify-keyspaces>=admin # Access to Keyspace 'default' default.<rw>=admin default.<ro>=user # Access to all ColumnFamily default.*.<rw>=admin default.*.<ro>=user # Access to Keyspace 'imbox_keyspace' imbox_keyspace.<rw>=aoyagi imbox_keyspace.<ro>=user # Access to all ColumnFamily imbox_keyspace.*.<rw>=aoyagi imbox_keyspace.*.<ro>=user注意
認証設定を使用している場合は、access.propertiesで設定したキースペース以外のキースペースは作成することができません。Cassandra を起動します。
次に、認証情報を指定しcassandra-cliを起動します。
Windowsの場合、コマンドプロンプトを起動し、以下のコマンドを実行します。
%CASSANDRA_HOME%/bin/cassandra-cli -u aoyagi -pw aoyagi_pwdLinuxの場合、以下のコマンドで起動します。
/usr/local/cassandra/bin/cassandra-cli -u aoyagi -pw aoyagi_pwdコラム
認証情報の指定方法は、「接続認証の確認方法」を参照してください。接続に成功したことを確認し、以下のコマンドを入力し、「imbox_keyspace」を作成します。
create keyspace imbox_keyspace;以下のメッセージが表示され、キースペース「imbox_keyspace」が追加されたことが確認できます。
... schemas agree across the clusterコラム
クラスタを構築し複数のCassandraにキースペースを作成したい場合、シードノードのCassandraにキースペースを作成後にnodetool repairコマンドを実行することで他のノードにもキースペースが作成されるため、すべてのノードでキースペースを作成する必要はありません。
8.3. キースペースの削除方法¶
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」が表示されたら削除完了です。
コラム
上記の手順にてキースペースの削除を行っても、保存されたデータは残った状態となります。削除したキースペースのデータを完全に削除する場合は、「data_file_directories」プロパティで指定した保存先ディレクトリ内にある、該当キースペース名のディレクトリを削除する必要があります。
- Windowsの場合
C:/cassandra/data/default
- Linuxの場合
/var/lib/cassandra/data/default
8.4. フラッシュ¶
Cassandra では、データは、memtableというメモリ上に保存されています。cassandra.yamlの「data_file_directories」プロパティで設定したファイルシステム上のSStableへデータを書き込むには、nodetoolのflushコマンドを実行する必要があります。冗長化していない場合などにmemtableのデータが、SStableに書かれる前にサーバが停止した場合にデータが損失する恐れがありますので、定期的にフラッシュすることを推奨します。
Windowsの場合、コマンドプロンプトを起動し、以下のコマンドを実行します。
%CASSANDRA_HOME%/bin/nodetool -h [実行したいノードのIPアドレス] flushLinuxの場合、以下のコマンドを実行します。
# /usr/local/cassandra/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)
8.5. スナップショット¶
Cassandra のデータをバックアップするには、nodetoolのsnapshotコマンドでスナップショットを取得することが必要です。ただし、 Cassandra のスナップショットは、SStableというファイルのみをコピーするだけですので、スナップショットを実行する前に、フラッシュコマンドを実行することが必須です。スナップショットの手順は以下の通りです。
Windowsの場合、コマンドプロンプトを起動し、以下のコマンドを実行します。
%CASSANDRA_HOME%/bin/nodetool -h [実行したいノードのIPアドレス] flush %CASSANDRA_HOME%/bin/nodetool -h [実行したいノードのIPアドレス] snapshot -t (任意のスナップショット名)Linuxの場合、以下のコマンドを実行します。
# /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環境の場合には上記の問題は発生しません。
8.6. スナップショットデータによる復旧(リストア)¶
スナップショットによりデータを退避していた場合、以下の手順で、スナップショット時点に復旧(リストア)することが可能です。
- Windowsの場合
- Cassandra を停止
- commitlog(例:%CASSANDRA_HOME%/commit_log)のファイルを削除
- SSTableを削除
- 実データ(例:C:/cassandra/data/default/(カラムファミリー名)/ の各dbファイル)を削除
- システム情報(例:C:/cassandra/data/system/(カラムファミリー名)/ の各dbファイル)を削除
- スナップショットの各dbファイルをコピー
- スナップショットで取得した実データをC:/cassandra/data/default/(カラムファミリー名)にコピー
- スナップショットで取得したシステム情報をC:/cassandra/data/system/(カラムファミリー名)にコピー
- Cassandra を起動
- Linuxの場合
- Cassandra を停止
- commitlog(例:/var/lib/cassandra/commit_log)のファイルを削除
- SSTableを削除
- 実データ(例:/var/lib/cassandra/data/default/(カラムファミリー名)/ の各dbファイル)を削除
- システム情報(例:/var/lib/cassandra/data/system/(カラムファミリー名)/ の各dbファイル)を削除
- スナップショットの各dbファイルをコピー
- スナップショットで取得した実データを/var/lib/cassandra/data/default/(カラムファミリー名)にコピー
- スナップショットで取得したシステム情報を/var/lib/cassandra/data/system/(カラムファミリー名)にコピー
- Cassandra を起動