CassandraをSnow Leopardで動かす

CassandraSnow Leopardで動かす方法。

Javaの設定

~/.zshrcに次の記述を追加する。

export JAVA_HOME=$(/usr/libexec/java_home)
export PATH=$JAVA_HOME/bin:$PATH

Cassandraのインストール

まずディレクトリを掘る。

1つはログ用ディレクトリ。

mkdir -p /var/log/cassandra
touch /var/log/cassandra/system.log
chown -R `whoami` /var/log/cassandra

2つ目はデータ用ディレクトリ。デフォルトらしい。

mkdir -p /var/lib/cassandra
chown -R `whoami` /var/lib/cassandra

今回はコンパイル済みバイナリを落としてそれを使う。

tar xf apache-cassandra-0.5.1-bin.tar.gz
mv apache-cassandra-0.5.1-bin /usr/local
ln -s /usr/local/apache-cassandra-0.5.1-bin /usr/local/cassandra

サーバを立ち上げる。

/usr/local/cassandra/bin/cassandra

デフォルトではシングルモードで動作し、8888番ポートを使用する。 詳細な設定はconf/storage-conf.xmlに記述する。

クライアントはbin/cassandra-cliを使用する。

/usr/local/cassandra/bin/cassandra-cli -host localhost -port 8888
/usr/local/cassandra/bin/cassandra-cli -host localhost -port 9160

対話形式で起動し、helpコマンドでヘルプを見ることができる。

プロセスの実行権限所有者とかログの書き込み権限とか

参考にしたサイトではどこもログやデータディレクトリの所有者が端末の利用者に設定されていてちょっと気持ち悪かった(whoamiの部分)。

なので、試しに_cassandraユーザを作って次のことをやってみた。

  • 各ディレクトリの所有者を_cassandraユーザに設定
  • サーバをcassandraユーザで起動(sudo -u cassandra /usr/local/cassandra/bin/cassandra)
  • cassandra-cliを上と同様に起動(ユーザはwhoami

そしたら、サーバを起動したところまではうまくいったけど、クライアントを起動する際に/var/log/cassandra/system.logに書き込み権限が無いとエラーが出た。 そこに書き込むのはサーバのプロセス所有者である_cassandraなのに…。

そこで、今度はcassandra-cliもサーバと同じように_cassandraユーザで起動してみたら、ホームディレクトリに作られるクライアントの履歴ファイルの書き込み権限が無いと怒られた。これは確かにその通りだよね、という感じ。

なので、最終手段として_cassandraグループを作って次のことをやってみた。

  • cassandraグループにcassandraユーザとwhoamiを追加する
  • ログディレクトリとデータディレクトリ、実行ファイルの所有グループを_cassandraグループに設定する
  • ログディレクトリとデータディレクトリの所有グループに書き込み権限を与える
  • サーバを_cassandraユーザで起動
  • cassandra-cliは今まで通り普通に起動(ユーザはwhoami

そしたら、問題なくサーバに接続できた。 ログファイルはクライアントのユーザ権限で書き込みにいっているのかも?なんか変な気がするけど。

参考文献

追記1: クライアントの接続先ポート

cassandraサーバを起動したときに8888と出てるからそっちに接続するのかと思ったら、どうやら違うらしい。 「列指向データベースCassandraにPythonで接続する」によると、conf/storage-conf.xmlに記述しているThriftPortに指定している値(デフォルトでは9160)に接続することになる。