CentOS5.4にJDK6やらCassandraやらZooKeeperをインストール

ほぼまっさらなCentOS5.5にkumofsをインストール - DenkiYagiに続けてセットアップ。Java製アプリはインストールが楽ちんですね。
ここではCassandraとZooKeeperの2つをインストールしていますが、単に私が2つのソフトウェアを使いたかっただけです。Cassandraだけが必要であればZooKeeperを入れる必要はないですし、その逆もまた然り。

手順

JDK6.0のインストール

Java SE DownloadsからJDK(rpmの方)をダウンロードしてきて、以下のコマンドを実行。

chmod +x jdk-6u20-linux-i586-rpm.bin
./jdk-6u20-linux-i586-rpm.bin

インストールが完了したら/etc/profileを開いてJAVA_HOMEを設定する。

export JAVA_HOME=/usr/java/default
Cassandra 0.6.xのインストール

The Apache Cassandra Projectからapache-cassandra-0.6.x-bin.tar.gzをダウンロードしてきて、以下のコマンドを実行。

tar xvf apache-cassandra-0.6.0-bin.tar.gz
mv apache-cassandra-0.6.0-bin /usr/local/apache-cassandra-0.6.0
ln -s /usr/local/apache-cassandra-0.6.0/ /usr/local/cassandra

cassandra/binにパスを通す。エディタで/etc/profileを開いて以下を追加する。

export PATH=$PATH:/usr/local/cassandra/bin

Cassandraのデータフォルダを設定する。エディタで/usr/local/cassandra/conf/storage-conf.xmlを開いて以下のように設定する。(これは好みなので別にデフォルトのままでもいいかも)

  <CommitLogDirectory>/var/cassandra/commitlog</CommitLogDirectory>
  <DataFileDirectories>
      <DataFileDirectory>/var/cassandra/data</DataFileDirectory>
  </DataFileDirectories>

どのホストからでもThrift APIにアクセスできるようにする(デフォルトではlocalhostからしかアクセスできない)。エディタで/usr/local/cassandra/conf/storage-conf.xmlを開いて以下のように設定する。

  <ThriftAddress>0.0.0.0</ThriftAddress>

GCのタイミング(クロック)設定する。これも/usr/local/cassandra/conf/storage-conf.xmlに定義がある。デフォルトでは10日(864000)になっているが、特に開発を行う際に10日では長すぎるので、1日(86400)とか12時間(43200)とかにしておくといいかも。

  <GCGraceSeconds>43200</GCGraceSeconds>

なお、シングルノードであればゼロにすることも可能なのだが、実運用でゼロにすることはあり得ないので、やめておいた方が良い。CassandraのGCは重要なポイントなので、Cassandra 分散データベースでの削除とは? « Agile Cat — in the cloudはてなダイアリーを読んでおくことをお勧めする。

ログの出力先をConsoleからファイルへ変更する。エディタで/usr/local/cassandra/conf/log4j.propertiesを開いて以下のように修正する。

log4j.rootLogger=INFO,R

JMXポートを8080から他のポート(8081など)に変更しておく。8080のままでも良いのだが、何かとポートがバッティングして困るので修正しておいた方が良いと思う。
エディタでcassandra/bin/cassandra.in.shを開き、-Dcom.sun.management.jmxremote.portを修正する。

        -Dcom.sun.management.jmxremote.port=8081 \

Cassandraのヒープサイズを変更する。これもcassandra/bin/cassandra.in.shで設定する。ヒープサイズをどの程度の値を設定した方が良いのかは、CassandraHardware_JP - Cassandra Wikiに書いてある。仮想マシンでも最低1GBぐらいは用意した方が良いと書いてあるが、そんなリッチな開発環境は持ってないので、うちでは512MBにしている…。

        -Xms128M \
        -Xmx1G \
Cassandra起動スクリプトを用意する

やっぱり開発の際には用意しておかないと面倒なので、やっつけで起動スクリプトを作成。うちでは/usr/local/bin/casactlに保存している。

#!/bin/sh
case "$1" in
    start)
        if [ ! -d /var/cassandra ]; then
            mkdir /var/cassandra
        fi
        cassandra -p /var/cassandra/cassandra.pid
        echo "running cassandra"
        ;;
    stop)
        kill `cat /var/cassandra/cassandra.pid`
        rm -f /var/cassandra/cassandra.pid
        echo "stopped cassandra"
        ;;
    *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac
exit 0
Cassandraの動作確認

Cassandra Serverを起動する。

cassandra -p cassandra.pid

先程作ったスクリプトを利用して起動する場合は以下のようにする。

casactl start

起動時にjava.net.MalformedURLExceptionというエラーが表示される場合、自ホストの名前解決ができていないので、DNS周りや/etc/hostsの設定を見直す。(うちでも/etc/hostsの設定を忘れててハマった)

Serverが起動したらCLIで接続する。

cassandra-cli -host localhost -port 9160

CLI上でshow keyspacesでKeySpace一覧(デフォルトではKeyspace1とかsystemとか)が表示されたら動作しているはず。

show keyspaces

CLIから抜けるときはexit。ちなみにCLIで使えるコマンドはhelpで確認できる。

exit

動作確認できたらServerを停止する。

kill `cat cassandra.pid`
rm -f cassandra.pid

先程作ったスクリプトで終了する場合は以下のようになる。

casactl stop
ZooKeeper3.3.xのインストール

Apache ZooKeeper - Releasesからzookeeper-3.3.x.tar.gzをダウンロードしてきて以下のコマンドを実行。

tar xvf zookeeper-3.3.0.tar.gz
mv zookeeper-3.3.0 /usr/local/apache-zookeeper-3.3.0
ln -s /usr/local/apache-zookeeper-3.3.0/ /usr/local/zookeeper

zookeeper/binにパスを通す。エディタで/etc/profileを開いて以下を追加する。

export PATH=$PATH:/usr/local/zookeeper/bin

ダウンロードしてきたままの状態ではZooKeeperの設定ファイルが存在しないので作成する。

cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg

エディタで/usr/local/zookeeper/conf/zoo.cfgを開き、dataDir(データフォルダ)を修正する。ここでは/var/zookeeperにしておく。

dataDir=/var/zookeeper

dataDirで設定したディレクトリを作成する。

mkdir /var/zookeeper

デフォルトのZooKeeperログ出力先がConsoleになっているので、ファイル出力に変更する。変更しないと何かあるコンソールに表示されてくるので邪魔くさい。
エディタで/usr/local/zookeeper/conf/log4j.propertiesを開き、log4j.rootLoggerを「INFO, CONSOLE」から「INFO, ROLLINGFILE」へ修正する。

log4j.rootLogger=INFO, ROLLINGFILE

続けてlog4j.appender.ROLLINGFILE.Fileを修正する。

log4j.appender.ROLLINGFILE.File=/var/log/zookeeper/zookeeper.log
ZooKeeperの動作確認

Serverを起動する。

zkServer.sh start

ncコマンドでruok(Are you OK?)をServerに送ってみる。imokと返ってきたら、ちゃんとServerが動作している。

echo ruok | nc localhost 2181

動作確認ができたのでServerを停止する。

zkServer.sh stop