Cassandra実践入門―Twitter,Facebookが採用するNoSQLシステム

この記事を読むのに必要な時間:およそ 10.5 分

Cassandraのクライアントライブラリ

Thrift

Cassandraでは,クライアントプログラムとの通信にThriftというRPCRemote Procedure Call遠隔手続き呼び出し)ライブラリを採用しています。ThriftもFacebookが開発しApache Foundationに寄贈したライブラリで,独自文法のIDLInterface Description Languageインタフェース定義言語)ファイルからさまざまなプログラミング言語のライブラリを生成できます図4⁠。Java,C++,C#,Perl,PHP,Python,Rubyなど,数多くの言語に対応しています。

図4 Thrift IDLから各種言語用ライブラリの生成

図4 Thrift IDLから各種言語用ライブラリの生成

高水準ライブラリ

Thriftを使って生成される各種言語用のライブラリは,RPCのAPIに沿ってメッセージを組み立て,そのまま送受信するだけの,いわゆる低水準なものです。

より高水準な,たとえばクラスタ内の複数のノードに対して,接続のリトライやロードバランシングなどの機能を持つライブラリが各種言語用に開発されています表3⁠。そのほかのライブラリの情報については,CassandraプロジェクトのWikiにまとめられています。

表3 主な高水準ライブラリ

言語ライブラリURL
JavaHectorhttp://github.com/rantav/hector/
RubyCassandrahttp://github.com/fauna/cassandra/
PythonLazy Boyhttp://github.com/digg/lazyboy/tree/master

今後はThriftからAvroに移行

Cassandraプロジェクトでは,Thriftに関して次のような問題点があるとし,Apache Avroという別のRPCライブラリに移行していく方針を示しています。

  • 開発やメンテナンスの活動があまり活発ではない
  • RPCのAPIが変わると各言語用のライブラリを生成しなおさなければならない

Avroは2009年にApacheプロジェクトに登録されたライブラリで,同じくApacheプロジェクトの分散データストアシステムHBaseや,Dynamoを参考に開発された分散キー・バリューストアシステムVoldemortなどでの採用が進められています

開発環境の構築

開発用ノードのインストール

開発環境で単体のCassandraプロセスを動作させることはそれほど難しくはありません。Java 6のランタイム環境JREJava Runtime Environmentさえそろっていれば,次の4つのステップでプロセスを立ち上げることができます。

  1. Cassandraの公式サイトから最新リリースをダウンロードする
  2. アーカイブを展開する
  3. README.txtに従いデータディレクトリとログディレクトリを作成する
  4. Cassandraをフォアグラウンドモードで起動する(-fオプション)

以下にREADME.txtから手順を抜粋します注4⁠。⁠$VERSION」はダウンロードしたバージョン番号に読み替えてください。

$ tar -zxvf apache-cassandra-$VERSION.tar.gz
$ cd apache-cassandra-$VERSION
$ sudo mkdir -p /var/log/cassandra
$ sudo chown -R `whoami` /var/log/cassandra
$ sudo mkdir -p /var/lib/cassandra
$ sudo chown -R `whoami` /var/lib/cassandra
注4)
この手順はLinuxやMac OS XなどのUNIXライクな環境が前提ですが,適切に設定すればWindowsでも動かすことができます。

起動と停止

Cassandraは,開発に必要なときだけ起動し,不要なときは停止しておくことができます。付属の設定ファイルは単体構成の開発用サーバを前提として記述されており,多くの場合そのままで動作させることができます。

-fオプションを指定してフォアグラウンドモードで起動したCassandraは,標準出力にログを出力しながら動作します。

$ apache-cassandra-$VERSION/bin/cassandra -f

停止は[Ctrl][C]で行います。

設定ファイル

Apache.orgが配布するCassandraのバイナリリリースでは,Cassandraの動作を決める設定ファイルは表4のようになっています。レプリケーションファクタなどの設定項目はほぼすべて,1番めのstorage-conf.xmlに記述します。

表4 Cassandraの設定ファイル

ディレクトリ/ファイル名設定内容
conf/storage-conf.xml参加するクラスタや接続先,格納するデータ構造のスキーマ,使用するディスク領域やバッファなど,Cassandraの動作に関わるほとんどを記述する
conf/passwd.propertiesクライアントからの接続にユーザ認証を行う場合に,ユーザ名とパスワードを記述する
conf/access.propertiesクライアントからの接続にユーザ認証を行う場合に,キースペースごとにアクセスを許可するユーザを記述する
conf/log4j.propertiesCassandraのログファイルに関する設定を記述する
bin/cassandra.in.shCassandra起動時に必要な環境変数や,JVMJava Virtual MachineJava仮想マシン)に渡すオプションを記述する

Cassandraバージョン0.7以降ではcassandra.yamlというYAMLYAML Ain't Markup Language形式のファイルに変更され,スキーマ定義はAPIを通じた動的操作となる予定

著者プロフィール

島田慶樹(しまだけいき)

株式会社ケイビーエムジェイ コマースソリューション事業部 シニアエンジニア。

主にRuby on RailsによるWebシステム開発に従事。大規模ASPサービスの開発・保守を通じてシステムのスケーラビリティやパフォーマンスの問題に取り組み,NoSQLを始めとしたさまざまな技術と格闘する日々。好きなプログラミング言語はSmalltalkとLisp。いつかはPrologをマスターしたいと思いつつ,今はScalaをかじっている。

Twitter:@_shimada