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