intra-mart Accel Platform Cassandra管理者ガイド 第15版 2018-12-01

8. Cassandra の操作

ここでは Cassandra の操作方法を説明します。
本書では以下の説明は【表1. Cassandra接続情報設定例】を元に記載しています。
  • 【表1. Cassandra接続情報設定例】

    クラスタ名 IMBox Cluster
    ホストのIPアドレス localhost
    ホストのポート番号 9160
    認証設定の有効化 false
    キースペース default

8.1. キースペースの作成方法

  1. Cassandra を起動します。

  2. Cassandra が起動していることを確認し、cassandra-cliを起動します。

    • Windowsの場合、<%CASSANDRA_HOME%/bin/cassandra-cli.bat>をダブルクリックします。
    • Linuxの場合、以下のコマンドで起動します。
    /usr/local/cassandra/bin/cassandra-cli
    
  3. コンソールが立ち上がったら、以下のコマンドを入力してください。

    connect localhost/9160;
    
  4. 接続に成功したことを確認し、以下のコマンドを入力してください。

    create keyspace default;
    
  5. 以下のメッセージが表示され、キースペース「default」の作成に成功したことが確認できます。

    ... schemas agree across the cluster
    

8.2. キースペースの作成方法(認証設定ありの場合)

Cassandra に以下の条件でキースペースを作成する手順を紹介します。
  • 接続ユーザ名 : aoyagi
  • パスワード : aoyagi_pwd
  • キースペース名 : imbox_keyspace
  1. 接続認証設定 (passwd.properties)にパスワードを追加します。

    admin=admin_pwd
    user=user_pwd
    aoyagi=aoyagi_pwd
    
  2. アクセス権設定 (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で設定したキースペース以外のキースペースは作成することができません。
  3. Cassandra を起動します。

  4. 次に、認証情報を指定しcassandra-cliを起動します。

    • Windowsの場合、コマンドプロンプトを起動し、以下のコマンドを実行します。

      %CASSANDRA_HOME%/bin/cassandra-cli -u aoyagi -pw aoyagi_pwd
      
    • Linuxの場合、以下のコマンドで起動します。

      /usr/local/cassandra/bin/cassandra-cli -u aoyagi -pw aoyagi_pwd
      

      コラム

      認証情報の指定方法は、「接続認証の確認方法」を参照してください。
  5. 接続に成功したことを確認し、以下のコマンドを入力し、「imbox_keyspace」を作成します。

    create keyspace imbox_keyspace;
    
  6. 以下のメッセージが表示され、キースペース「imbox_keyspace」が追加されたことが確認できます。

    ... schemas agree across the cluster
    

    コラム

    クラスタを構築し複数のCassandraにキースペースを作成したい場合、シードノードのCassandraにキースペースを作成後にnodetool repairコマンドを実行することで他のノードにもキースペースが作成されるため、すべてのノードでキースペースを作成する必要はありません。

8.3. キースペースの削除方法

  1. Cassandra を起動します。

  2. Cassandra が起動していることを確認し、cassandra-cliを起動します。

    cassandra-cliの起動方法は以下の通りです。
    • Windowsの場合、<%CASSANDRA_HOME%/bin/cassandra-cli.bat>をダブルクリックします。

    • Linuxの場合、以下のコマンドで起動します。

      /usr/local/cassandra/bin/cassandra-cli
      
  3. コンソールが立ち上がったら、以下のコマンドを入力してください。

    connect localhost/9160;
    
  4. コンソールに「Connected to: “IMBox Cluster” on localhost/9160」と表示されるので、以下のコマンドを入力してください。

    drop keyspace default;
    
  5. コンソールに「... 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アドレス] flush
    
  • Linuxの場合、以下のコマンドを実行します。

    # /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の場合
  1. Cassandra を停止
  2. commitlog(例:%CASSANDRA_HOME%/commit_log)のファイルを削除
  3. SSTableを削除
    • 実データ(例:C:/cassandra/data/default/(カラムファミリー名)/ の各dbファイル)を削除
    • システム情報(例:C:/cassandra/data/system/(カラムファミリー名)/ の各dbファイル)を削除
  4. スナップショットの各dbファイルをコピー
    • スナップショットで取得した実データをC:/cassandra/data/default/(カラムファミリー名)にコピー
    • スナップショットで取得したシステム情報をC:/cassandra/data/system/(カラムファミリー名)にコピー
  5. Cassandra を起動
  • Linuxの場合
  1. Cassandra を停止
  2. commitlog(例:/var/lib/cassandra/commit_log)のファイルを削除
  3. SSTableを削除
    • 実データ(例:/var/lib/cassandra/data/default/(カラムファミリー名)/ の各dbファイル)を削除
    • システム情報(例:/var/lib/cassandra/data/system/(カラムファミリー名)/ の各dbファイル)を削除
  4. スナップショットの各dbファイルをコピー
    • スナップショットで取得した実データを/var/lib/cassandra/data/default/(カラムファミリー名)にコピー
    • スナップショットで取得したシステム情報を/var/lib/cassandra/data/system/(カラムファミリー名)にコピー
  5. Cassandra を起動