DataStaxによるCassandraドキュメンテーション
DataStaxの最新のCassandra ドキュメント はインストールからトラブルシューティング、クイックスタートガイドまでをカバーしています。古いリリースのドキュメントも入手可能です。
イントロダクション
このドキュメントは、インストールからシングルノードでCassandraを実行するまでのいくつかの簡単な手順と、マルチノードクラスターを構築するための概要を初心者向けに提供することを目的としています。Cassandraはノードのクラスター上での動作を意図されていますが、単一マシン上でも同じように動作します。これは、巨大なシステムの複雑さを避けながらこのソフトウェアについて知識を深めるための便利な方法です。
Step 0: 前提条件とコミュニティとの繋がり
Cassandraは、あなたがデプロイできるJava 1.6の最も安定した、できればOracle/Sun JVMのバージョンを要求します。CassandraはIBM JVMでも動作しますし、jrockit上でも動作するはずです。
- OS X ユーザーへの注意: 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}}を追加する必要があります。
プロジェクトの最新の情報、リリース、安定性、バグ、そして新機能を常にキャッチアップする一番の方法は、ユーザーメーリングリスト(登録はこちら)へ登録し、IRC上の#cassandraチャンネルへ参加することです。
Step 1: Cassandraダウンロード
- 最新の安定版へのダウンロードリンクはいつでもウェブサイトから見つけることができます。
- DebianやDebianベースのディストリビューションを使用しているユーザーは最新の安定版をパッケージ形式でインストールできます。詳しくはDebianPackagingを参照してください。
- RPMベースのディストリビューションのユーザーはDatastaxからパッケージを入手することができます
- もしCassandraをソースからビルドすることに興味があるなら、How to Buildページを参照してください。
その他のビルドに関する詳しい情報は、Cassandra versions and buildsページを参照してください。
Step 2: 基本設定
Cassandra設定ファイルはバイナリまたはソースソースディストリビューションの{{conf}}ディレクトリにあります。debまたはrpmパッケージからインストールした場合、設定ファイルは{{/etc/cassandra}}に配置されているはずです。
Step 2.1: Cassandraが使うディレクトリ
debまたはrpmパッケージでインストールした場合、Cassandraが使うはずのディレクトリはすでに作られ、適切なパーミッションが付与されているはずです。そうでなければ、conf/cassandra.yaml}}から以下のコンフィグ設定を確認してください: {{data_file_directories
(/var/lib/cassandra/data
), commitlog_directory
(/var/lib/cassandra/commitlog
), saved_caches_directory
(/var/lib/cassandra/saved_caches
)。 これらのディレクトリが存在し、書き込み可能なことを確認してください。
デフォルトでは、Cassandraは{{/var/log/cassandra/}}の中にログを書き込みます。このディレクトリが存在して書き込み可能であることを確かめるか、{{conf/log4j-server.properties}}ファイル内のこの行を変更してください:
log4j.appender.R.File=/var/log/cassandra/system.log
ヒープサイズのようなJVMレベルの設定値は{{conf/cassandra-env.sh}}で設定します.
Step 3: Cassandraを起動
さあ、コマンドラインから{{bin/cassandra -f}}を実行してCassandraを起動してみましょう 1 。サービスがフォアグラウンドで起動し、標準出力にログが出力されはじめます。"error"や"fatal"といった恐ろしい単語やJavaのスタックトレースが出力に現れていないなら、起動成功です。
"Control-C"を押してCassandraを停止しましょう。
"-f"オプションなしでCassandraを起動した場合、バックグラウンド実行になります。たとえば'pkill -f CassandraDaemon
'を用いてkillすることでプロセスを停止できます。
- 最近のLinuxディストリビューションとMac OS X Snow Leopardユーザーは単純にuntarしてroot権限で{{bin/cassandra -f}}するだけでCassandraを起動できるはずです。Java 1.6.0同梱のSnow Leopardは{{JAVA_HOME}}環境変数の変更や{{PATH}}へのディレクトリの追加を必要としません。Linuxでは、Ubuntu Lucid Lynx上では{{openjdk-6-jdk}}であるようなインストールされたJava JDKパッケージがあることを単に確認してください。
Step 4: cqlshを使う
{{bin/cqlsh}}はCassandraのインタラクティブなコマンドラインインターフェイスです。これを使ってスキーマを定義し、データを操作することができます。次のコマンドを実行してローカルのCassandraインスタインスに接続してください。
$ bin/cqlsh
成功すれば、次のようなプロンプトを目にするでしょう:
Connected to Test Cluster at localhost:9160. [cqlsh 2.3.0 | Cassandra 1.2.2 | CQL spec 3.0.0 | Thrift protocol 19.35.0] Use HELP for help.
断っておきますが、以降の例ではcqlshプロンプトを省略します。
'help;'コマンドでオンラインヘルプにアクセス可能です。cqlshではコマンドはセミコロン(';')で終端となります。
まずは、キースペース – テーブルの名前空間 を作りましょう。
CREATE KEYSPACE mykeyspace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1 };
次に、新しいキースペースに認証しましょう。
USE mykeyspace;
次に、{{users}}テーブルを作成します:
CREATE TABLE users ( user_id int PRIMARY KEY, fname text, lname text );
これで{{users}}にデータをストアすることができます:
INSERT INTO users (user_id, fname, lname) VALUES (1745, 'john', 'smith'); INSERT INTO users (user_id, fname, lname) VALUES (1744, 'john', 'doe'); INSERT INTO users (user_id, fname, lname) VALUES (1746, 'john', 'smith');
さて、挿入したデータを取得しましょう:
SELECT * FROM users;
あなたの新しい行を反映した出力を目にするはずです:
user_id | fname | lname ---------+-------+------- 1745 | john | smith 1744 | john | doe 1746 | john | smith
インデックスを作成してからテーブルを次のように問い合わせることで、ラストネームがsmithであるユーザーについてのデータを取得できます:
CREATE INDEX ON users (lname); SELECT * FROM users WHERE lname = 'smith'; user_id | fname | lname ---------+-------+------- 1745 | john | smith 1746 | john | smith
複数ノードのクラスターを構築する
ここまでで、単一で動作するCassandraノードを手に入れました。これはたったひとつのノードを持つCassandraクラスターです。ノードを追加することで、これをマルチノードクラスターにすることができます。
Cassandraクラスタの構築は、上記の手順をクラスタ内の個々のノードについて繰り返すのと_ほぼ_同じくらい単純です。ただし少しだけ違いがあります。
Cassandraのノードはゴシップと呼ばれる方法を用いてお互いの情報を交換します。しかし情報交換がうまく回り始めるに、新しく開始されたノードは最低1つは別のノードの事をあらかじめ知っておく必要があります。そのノードのことをシード(Seed
)と呼びます。比較的小数の安定したノードをseedとするのが慣例ですが、厳密なルールはありません。各シードは少なくともひとつ以上のシードと知り合っていている事を確認して、その目的は鶏と卵のシナリオを避け、クラスターの全てのノードがお互いを発見するための手段を提供することであると覚えておいてください。
シードに加えて、ゴシップとCQLのために(それぞれ*listen_address* と rpc_address)リッスンするIPインターフェイスを設定する必要があります。他の全ノードの{{listen_address}}から到達可能な{{listen_address}}とクライアントに利用しやすい {{rpc_address}}を使用してください。
シードの他にゴシップとCQLの接続を受け付けるためのIPインターフェースを設定する必要があります(それぞれ*listen_address*と*rpc_address*)。ほかのノードからはlisten_addressに、クライアントからはrpc_addressに対してアクセスが行われます。それぞれ他のノードやクライアントからアクセスが可能なように設定してください。
すべてのノードを設定して起動すると、{{bin/nodetool status}}ユーティリティを用いてクラスタの接続性を検証できます。例えば:
eevans@achilles:‾$ bin/nodetool -host 192.168.0.10 -p 7199 status Datacenter: datacenter1 ======================= Status=Up/Down |/ State=Normal/Leaving/Joining/Moving -- Address Load Tokens Owns Host ID Rack UN 127.0.0.3 30.99 KB 256 32.4% 92b20e08-9ddd-4f55-9173-8516e74d27f5 rack1 UN 127.0.0.2 31 KB 256 31.5% b9616658-c744-48fb-b64f-83f96b007d93 rack1 UN 127.0.0.1 30.96 KB 256 36.1% f7a08973-85bd-460f-8176-d6f9df8c23f4 rack1
高度なクラスタ管理はOperationsに記載されています。
もしまだあなたが本物のCassandraクラスターのためのハードウェアを持っていなければ、
ccm (Cassandra Cluster Manager)で簡単にローカルクラスターを管理できます。
マルチノードクラスタの設定については、MultinodeCluster を参照してください。
アプリケーションを書く
DataModeling 上のリソースをレビューしてください。完全なCQLドキュメントはこちらです。
DataStaxは、https://github.com/datastax にてCQLドライバーの開発を援助しています。CQLドライバーの完全なリストは ClientOptions ページにあります。
もしもうまくいかなかった場合
このガイドにあるステップにしたがってもうまくいかなかった場合、Cassandraコミュニティは喜んでヘルプします。その際に必要なステップは、
- 安定版以外を実行している場合、最新の状態に更新してみて、問題が継続して発生するかどうかを確認してください。
- デバッグログを有効にし(ヒント:
conf/log4j.properties
)、出力内容を保存しておいて下さい。 - メーリングリストのアーカイブ内を検索して、類似の問題が投稿され、それが解決されているかを確認してください。
- バグトラッキングシステムに対しても同様のことを行ってください。
- ユニットテスト、スクリプト、もしくは問題を再現できるアプリケーションを作成できるか検討してください。
最後に、問題の詳細をメーリングリスト(登録が必要)に投稿するか、IRC(ネットワーク: irc.freenode.net、チャンネル: #cassandra)で知らせてください。
脚注:
https://c.statcounter.com/9397521/0/fe557aad/1/|stats
- 起動スクリプトの制御の詳細については、 RunningCassandra_JP を参照してください。 ↩