Cassandraのクラスタ構成


1、基本配置
まず3台以上のコンピュータを用意しなければなりません。Linuxオペレーティングシステムを実行するコンピュータが3台あると仮定します。IPアドレスはそれぞれ192.168.0.100、192.168.0.101、192.168.0.102です。システムはJavaをインストールして実行する必要があります。その後、ここでダウンロードまで。 0.7バージョンのCassandraバイナリはパッケージを発行します。
その中の1台を選んで配置を開始し、まずcassandraを展開してカバンを発行する:
$ tar -zxvf apache-cassandra-$VERSION.tar.gz
$ cd apache-cassandra-$VERSION
その中のconf/cassandra.yamlファイルは主要な配置ファイルで、0.7版以降はXML形式の配置ファイルを採用しなくなりました。YAML形式に慣れていないなら、まずここに来て知るを使ってください。
Cassandraは配置ファイルにいくつかのディレクトリをデフォルトで設定しました。
data_file_directories: /var/lib/cassandra/data
commitlog_directory: /var/lib/cassandra/commitlog
saved_caches_directory: /var/lib/cassandra/saved_caches
data_file_directoresは一度にいくつかの異なるディレクトリを設定できます。cassandraは全てのディレクトリのデータを自動的に同期します。またログ設定ファイルのロゴ4 j-server.propertiesにもデフォルト設定ログファイルのディレクトリがあります。
log4j.appender.R.File=/var/log/cassandra/system.log
一般的にはデフォルトの設定を採用すればいいです。特別な保存要求がない限り、現在は二つの案があります。一つはデフォルトの設定に従って関連ディレクトリを作成し、もう一つは設定ファイルを修正して自分で指定したディレクトリを採用することです。
以下は簡単のための第一案を採用する。
$ 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
上の‘whomi’はLinux命令で現在登録されているユーザー名を取得します。もし現在ログインしているユーザでCassandraを実行するつもりがないなら、‘whomi’を具体的なユーザー名に置き換える必要があります。
2、クラスタに関する配置
Cassandraはセンター化構造を採用しているので、クラスタ内の1台のマシン(ノード)が起動すると、現在のクラスタ(新しいノードが追加された)に通知するルートが必要です。Cassandraのプロファイルにseedsの設定項目があります。seedsとは、クラスタ内のすべてのノードに連絡できるコンピュータのことです。もしクラスタ内のすべてのノードが同じマシンルームの同じサブネットにあるなら、何台かの比較的に安定したコンピュータを選択すればいいです。現在の例では3台のマシンしかないので、1台目をシードノードとして選んで、下記のように配置します。
 seeds:
- 192.168.0.100
次に、ノードの前に通信するIPアドレスを設定する。
listen_address: 192.168.0.100
ここでは具体的なIPアドレスが必要ですが、0.0.00というアドレスは使えません。
Cassandra Thriftクライアント(アプリケーション)がアクセスするIPアドレスを設定します。
rpc_address: 192.168.0.100
このマシンはすべてのネットワークインターフェースを監視するために0.0.0を使用することができます。
CassandraのKeyspacesとColumn Famiriesはもう配置が必要なくなりました。彼らは運行時に作成とメンテナンスを行います。
配置されたCassandraを第2と第3のマシンにコピーし、関連するディレクトリを作成するとともに、listen_を修正する必要があります。addressとrpc_addressは実際のマシンのIPアドレスです。これですべての設定が完了しました。
 3、Cassandra各ノードを起動し、クラスタ管理を行う
スタート順は大丈夫です。シードノードの起動を保証すればいいです。
$ bin/cassandra -f
パラメータ-fの役割は、Cassandraを以前のエンドプログラム方式で実行させることで、ログ情報を調整して観察することに有利であり、実際の生産環境ではこのパラメータは不要である(すなわち、Cassandraはdaemen方式で実行される)。
すべてのノードが起動した後、クラスタはBin/nodetoolツールで管理されても良い。例えば、すべてのノードの動作状況を確認する。
 
$ bin/nodetool -host 192.168.0.101 ring
運転結果は以下の通りです。
Address Status State Load Owns Token
159559...
192.168.0.100 Up Normal 49.27 KB 39.32% 563215...
192.168.0.101 Up Normal 54.42 KB 16.81% 849292...
192.168.0.102 Up Normal 73.14 KB 43.86% 159559...
コマンド中-hostパラメータは、nodetoolとどのノードが通信しているかを指定するために使用され、nodetool_ringコマンドに対しては、どのノードとの通信も区別されていないので、いずれかのノードを任意に指定することができる。
上記の結果リストから、動作中のノードがオンライン、State、データ負荷量及びノードToken(ノード名として理解できます。これはノードの最初の起動時に自動的に発生するものです。)nodetoolグループtokenを使用して、特定のノードを管理することができます。例えば、指定されたノードの詳細情報を確認することができます。
$ bin/nodetool -host 192.168.0.101 info
運転の結果は大体以下の通りです。
84929280487220726989221251643883950871
Load : 54.42 KB
Generation No : 1302057702
Uptime (seconds) : 591
Heap Memory (MB) : 212.14 / 1877.63
指定されたノードのデータ構造情報を表示します。
 $ bin/nodetool -host 192.168.0.101 cfstats
実行結果:
Keyspace: Keyspace1
Read Count: 0
Write Count: 0
Pending Tasks: 0
Column Family: CF1
SSTable count: 1
下のコマンドを使用して、下のノードを削除できます。例えば、第2台のマシンがオフになったり壊れたりします。
 $ bin/nodetool -host 192.168.0.101 removetoken 84929280487220726989221251643883950871
線を降りたノードはどうやって再出発しますか?何もしなくても、Cassandraプログラムを起動すれば自動的にクラスタに入ります。
実際の操作では、私たちは時間を置いてデータをバックアップする必要があります。(スナップショットを作成します。)この操作は、Cassandraの中でとても簡単です。
$ bin/nodetool -host 192.168.0.101 snapshot
 4、テストデータの読み書き
クライアントコンポーネントプラスユニットを使ってテストすることが優先です。クラスタが正常にデータを読み書きできるかどうかだけを知りたいなら、cassandra-cliで簡単なテストができます。
$ bin/cassandra-cli -host 192.168.0.101
次に次のような文を入力します。
create keyspace Keyspace1;
use Keyspace1;
create column family Users with comparator=UTF8Type and default_validation_class=UTF8Type;
set Users[jsmith][first] = 'John';
set Users[jsmith][last] = 'Smith';
get Users[jsmith];
上記の文で「Keyspace 1」というkeyspaceを作成しました。また「Users」というColumn Familyを作成しました。最後にUsersにitemを追加しました。正常なら次のような結果が見られます。
=> (column=first, value=John, timestamp=1302059332540000)
=> (column=last, value=Smith, timestamp=1300874233834000)
Returned 2 results.
http://archboy.org/2011/08/19/nosql-apache-cassandra-cluster/