はじめに
Cassandraは高度な内容を含んでいます。簡単に物事を進めることができるよう作業を続けていますが、初めて環境構築をして実行するまで何度もくじけそうになるでしょう。このドキュメントはCassandraのインストールからクラスタの構築・運用までのいくつかの簡単なステップを初心者向けに提供することを目的としています。
ステップ0: コミュニティとのつながり
プロジェクトの最新の情報、リリース、安定性、バグ、そして新機能を常にキャッチアップする一番の方法は、ユーザーメーリングリスト(登録はこちら)へ登録し、IRC上の#cassandraチャンネルへ参加することです。
ステップ1: バージョンを選ぶ
Cassandraは常時複数のバージョンが提供されています。
安定版
Cassandraの安定版は十分テストされており、深刻な問題がない(もしくは問題があってもきちんとドキュメント化されている)バージョンです。本番環境の構築には安定版を使うのが良いでしょう。
最新の安定版へのダウンロードリンクはウェブサイト上に有ります。
ベータ版とリリース候補版
ベータ版はユーザーテストを開始できると考えられる最初のリリースです。リリース候補版は次の安定版のリリース候補となります。これらのリリースは機能的に最新のものなので、Cassandraを始めるには最適なバージョンです。APIやディスク上のストレージフォーマットがメジャーバージョン間で変わることがあるため、このリリースを使用することでアップグレード時の手間を減らすことも可能です。テストとフィードバックをお願いします。
ナイトリービルド版
ナイトリービルド版はビルド時点における現在の開発状況を表します。前日に追加された新しい機能や修正を含んでいますが、新たなバグも含んでいます。単にビルドが成功してユニットテストをパスたことだけを保証します。ナイトリービルド版は直近で追加された変更を試すには手軽な方法です。また、ベータ版やリリース候補版にはない最新の機能や修正が含まれています。しかしいくつかのバグが含まれているリスクが有ります。
直近のナイトリービルド版はここからダウンロードできます。
Subversion
CassandraはSubversionレポジトリ上で活発に開発が行われています。プロジェクトへの貢献を考えている開発者はTrunkをチェックアウトしてください。Subversionの更新はこまめに行ない、開発者メーリングリストに登録して、最新の開発状況をチェックしてください。
ソースコードのチェックアウト方法はウェブサイト上に有ります。
ステップ2: 単独のノードで実行する
Cassandraはクラスタ化されたノードで実行されるよう設計されていますが、1台のマシンでも同じように実行することができます。したがって、より大きなシステムで実行した場合に発生する複雑性を考えることなく、ソフトウェアに親しむことができます。
Cassandraには特に決まったインストール方法はありません。一番簡単な方法はアーカイブから解凍したり、SVNからチェックアウトした(バージョンを選ぶを参照)Cassandraを単に実行することです1。バイナリ版をダウンロードしていない場合は、一番上のディレクトリ内でantを実行してコンパイルする必要があります。
配布物に含まれるサンプルの設定ファイルconf/cassandra.yamlには、単一ノードで実行するために十分なデフォルト値がすでに設定されています。ただしcommitlog_directoryとdata_file_directories、saved_caches_directoryへのパスが存在することを確認してください。また、conf/log4j.propertiesにあるログの設定を確認し、ログファイルが格納されるディレクトリが存在することを確認してください。
OS Xを使用しているユーザーから、Java 6を実行するのに苦労したとの報告があります。Appleからのアップデートを常時適用している場合は、Java 6がすでにインストールされているはずです(Mac OS X 10.5 Update 1でインストールされます)。 しかしデフォルトで使用するようには設定されていないため、JAVA_HOME環境変数を/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Homeと設定し、PATH環境変数の最初に/System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/binを追加する必要があります。
さあ、コマンドラインからbin/cassandra -fを実行してCassandraを起動してみましょう2。サービスがフォアグラウンドで起動し、標準出力にログが出力されはじめます。"error"や"fatal"といった恐ろしい単語やJavaのスタックトレースが出力に現れていないなら、起動成功です。起動したことを確認するため、次のステップに進む前にCassandraCliやThriftInterfaceを試してみてください。もし何か問題が発生した場合でも、落ち着いて、もしうまくいかなかった場合を参照してください。
Step 3: クラスタ環境を構築する
Cassandraクラスタの構築は、クラスタ内の個々のノードに関してはステップ2とほぼ同じくらいシンプルです。ただし少しだけ違いが有ります。
Cassandraのノードはゴシップと呼ばれる方法を用いてお互いの情報を交換します。しかし情報交換がうまく回り始めるに、新しく開始されたノードは最低1つは別のノードの事をあらかじめ知っておく必要があります。そのノードのことをシード(Seed)と呼びます。
シードの他にゴシップとThriftの接続を受け付けるためのIPインターフェースを設定する必要があります(それぞれ設定ファイル内のListenAddressとThriftAddress)。ほかのノードからはListenAddressに、クライアントからはThriftAddressに対してアクセスが行われます。それぞれ他のノードやクライアントからアクセスが可能なように設定してください。
すべてのノードを設定して起動すると、bin/nodetoolユーティリティを用いてクラスタの接続性を検証できます。例えば:
eevans@achilles:~$ bin/nodetool -host 98.139.220.175 ring
Address Status Load Range Ring
169048975998562660269742699624378098572
98.139.220.175 Up 0.02 GB 14183696824377310051808173385764689249 |<--|
98.139.169.152 Up 0.4 GB 28356863910078205288614550619314017621 | ^
98.139.220.176 Up 0.13 GB 42530828068625072228863933889289238187 |-->|より高度なクラスタ管理方法はOperations_JPで解説しています。
Cassandraクラスタを構成するのに十分なハードウェアを準備出来ない場合でも、Cassandra EC2を参考にEC2上に構築することもできます。
Step 4: アプリケーションを作成する
CassandraはThriftをクライアントAPIとして使用します。CassandraのAPI/RPC/Thriftポートは9160です。Thriftは様々なプログラミング言語をサポートします。直接Thriftを使ってコーディングしたり、より高度な機能をもったクライアントを利用することもできます。取り掛かる前にThriftのwikiにあるドキュメントやThriftExamplesにある例に一通り目を通す事をおすすめします。
CassandraのAPI/RPC/Thriftポートは9160です。APIクライアントが誤ってJMXのポートに接続しようとすることがよくあるので注意してください。
Twissandra(Python + Django)のようなデモアプリケーションを確認してみるのも有効です。
もしもうまくいかなかった場合
このガイドにあるステップにしたがってもうまくいかなかった場合、Cassandraコミュニティは喜んでヘルプします。その際に必要なステップは、
- 安定版以外を実行している場合、最新の状態に更新してみて、問題が継続して発生するかどうかを確認してください。
デバッグログを有効にし(ヒント: conf/log4j.properties)、出力内容を保存しておいて下さい。
メーリングリストのアーカイブ内を検索して、類似の問題が投稿され、それが解決されているかを確認してください。
バグトラッキングシステムに対しても同様のことを行ってください。
- ユニットテスト、スクリプト、もしくは問題を再現できるアプリケーションを作成できるか検討してください。
最後に、問題の詳細をメーリングリスト(登録が必要)に投稿するか、IRC(ネットワーク: irc.freenode.net、チャンネル: #cassandra)で知らせてください。
脚注:
DebianやDebianベースのディストリビューションを使用しているユーザーは最新の安定版をパッケージ形式でインストールできます。詳しくはDebianPackagingを参照してください。 (1)
起動スクリプトの制御の詳細については、RunningCassandra_JPを参照してください。 (2)