CLOVER🍀

That was when it all began.

Apache Cassandraをインストールしてみる

そろそろ、他のNoSQLにも手を出してみようかなと思い、ちょっと考えた末、少しこれを扱ってみることにしました。

Apache Cassandra
http://cassandra.apache.org/

もちろん、仕事では使っていませんし、当面の間使うこともないと思います。単純に興味本位です。

では、インストールしてみます。パッケージインストールはしないので、ここからtarballを落としてきます。
ダウンロードページ
http://cassandra.apache.org/download/

現時点でのCassandraの最新安定版は、1.2.4です。

で、こちらを参考にインストールしてみます。

インストール方法
http://wiki.apache.org/cassandra/GettingStarted

とりあえず、後々面倒なことになりそうなので、OSユーザを作成することにしました。

$ sudo adduser cassandra

Ubuntuの場合は、adduserなのね…。

まずはJavaの設定。Cassandraは、Java 6推奨らしいので。

export JAVA_HOME=/usr/lib/jvm/java-6-oracle
PATH=${JAVA_HOME}/bin:${PATH}
$ . .bashrc
$ java -version
java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01, mixed mode)

はい。

で、tarballを解凍。

$ tar -zxvf apache-cassandra-1.2.4-bin.tar.gz

インストール先は、/usr/local/cassandraとします。

$ cd /usr/local/
$ sudo mkdir cassandra
$ cd cassandra/
$ sudo mv [Cassandraを展開したディレクトリ]/apache-cassandra-1.2.4 ./.
$ sudo ln -s apache-cassandra-1.2.4 current

現在のバージョンを「current」に向けているのは、個人的な趣味です…。

$ ll
合計 12
drwxr-xr-x  3 root  root  4096 Apr 14 16:03 ./
drwxr-xr-x 29 root  root  4096 Apr 14 16:03 ../
drwxrwxr-x  9 cassandra cassandra 4096 Apr 14 16:02 apache-cassandra-1.2.4/
lrwxrwxrwx  1 cassandra  cassandra    22 Apr 14 16:03 current -> apache-cassandra-1.2.4/

以降、「/usr/local/cassandra/current」を$CASSANDRA_HOMEと表記します。
というわけで、パスも通しておきます。

export CASSANDRA_HOME=/usr/local/cassandra/current
PATH=${CASSANDRA_HOME}/bin:${PATH}

追加したのは、.bashrcです。

$CASSANDRA_HOMEディレクトリの中は、こんな感じになっています。

$ ls -l
合計 248
-rw-r--r-- 1 cassandra cassandra 152928 Apr  9 02:21 CHANGES.txt
-rw-r--r-- 1 cassandra cassandra  11609 Apr  9 02:21 LICENSE.txt
-rw-r--r-- 1 cassandra cassandra  47580 Apr  9 02:21 NEWS.txt
-rw-r--r-- 1 cassandra cassandra   1820 Apr  9 02:21 NOTICE.txt
-rw-r--r-- 1 cassandra cassandra   3569 Apr  9 02:21 README.txt
drwxr-xr-x 2 cassandra cassandra   4096 Apr 14 16:02 bin
drwxr-xr-x 2 cassandra cassandra   4096 Apr 14 16:02 conf
drwxr-xr-x 2 cassandra cassandra   4096 Apr 14 16:02 interface
drwxr-xr-x 4 cassandra cassandra   4096 Apr 14 16:02 javadoc
drwxr-xr-x 3 cassandra cassandra   4096 Apr 14 16:02 lib
drwxr-xr-x 3 cassandra cassandra   4096 Apr 14 16:02 pylib
drwxr-xr-x 4 cassandra cassandra   4096 Apr  9 02:21 tools

では、データの保存先やログの配置先をデフォルトのままにはしたくないので、ちょっと変更することにします。

$CASSANDRA_HOME/confディレクトリに移動すると、

$ cd $CASSANDRA_HOME/conf

Cassandraの設定ファイルが置いてあります。

$ ll
合計 80
drwxr-xr-x 2 cassandra cassandra  4096 Apr 14 16:02 ./
drwxrwxr-x 9 cassandra cassandra  4096 Apr 14 16:02 ../
-rw-r--r-- 1 cassandra cassandra   298 Apr  9 02:21 README.txt
-rw-r--r-- 1 cassandra cassandra  9400 Apr  9 02:21 cassandra-env.sh
-rw-r--r-- 1 cassandra cassandra  1055 Apr  9 02:21 cassandra-rackdc.properties
-rw-r--r-- 1 cassandra cassandra  1358 Apr  9 02:21 cassandra-topology.properties
-rw-r--r-- 1 cassandra cassandra 31492 Apr  9 02:21 cassandra.yaml
-rw-r--r-- 1 cassandra cassandra  2328 Apr  9 02:21 commitlog_archiving.properties
-rw-r--r-- 1 cassandra cassandra  1324 Apr  9 02:21 cqlshrc.sample
-rw-r--r-- 1 cassandra cassandra  1850 Apr  9 02:21 log4j-server.properties
-rw-r--r-- 1 cassandra cassandra  1228 Apr  9 02:21 log4j-tools.properties

ここで修正するのは、cassandra.yamllog4j-server.propertiesらしいですね。

$ grep '/var/' *
cassandra-env.sh:# JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/cassandra/gc-`date +%s`.log"
cassandra-env.sh:# JVM_OPTS="$JVM_OPTS -Xloggc:/var/log/cassandra/gc.log"
cassandra.yaml:    - /var/lib/cassandra/data
cassandra.yaml:commitlog_directory: /var/lib/cassandra/commitlog
cassandra.yaml:saved_caches_directory: /var/lib/cassandra/saved_caches
log4j-server.properties:log4j.appender.R.File=/var/log/cassandra/system.log

なるほど…。

今回は、/usr/local/cassandraの下に行ってもらうことにしました。

$ cd /usr/local/cassandra/
$ sudo mkdir vars
$ sudo chown cassandra.cassandra vars
$ cd vars/
$ mkdir commitlog saved_caches data log

では、設定ファイルを変更。

$ cp -p cassandra.yaml cassandra.yaml.org
$ perl -wpi -e 's!/var/lib/cassandra!/usr/local/cassandra/vars!' cassandra.yaml
$ cp -p log4j-server.properties log4j-server.properties.org 
$ perl -wpi -e 's!/var/log/cassandra!/usr/local/cassandra/vars!' log4j-server.properties

はい。

フォアグラウンドモードで起動させてみましょう。

$ cassandra -f
xss =  -ea -javaagent:/usr/local/cassandra/current/lib/jamm-0.2.5.jar -XX:+UseThreadPriorities -XX:ThreadPriorityPolicy=42 -Xms1024M -Xmx1024M -Xmn200M -XX:+HeapDumpOnOutOfMemoryError -Xss180k
 INFO 16:57:52,325 Logging initialized
 INFO 16:57:52,368 JVM vendor/version: Java HotSpot(TM) 64-Bit Server VM/1.6.0_43
 INFO 16:57:52,375 Heap size: 1052770304/1052770304
  〜省略〜
 INFO 16:57:56,045 Not starting native transport as requested. Use JMX (StorageService->startNativeTransport()) or nodetool (enablebinary) to start it
 INFO 16:57:56,049 Binding thrift service to localhost/127.0.0.1:9160
 INFO 16:57:56,091 Using TFramedTransport with a max frame size of 15728640 bytes.
 INFO 16:57:56,101 Using synchronous/threadpool thrift server on localhost : 9160
 INFO 16:57:56,102 Listening for thrift clients...
 INFO 16:58:06,059 Created default superuser 'cassandra'

なんか、起動したっぽいですね。

cassandra-cliコマンドで繋げてみます。

$ cassandra-cli
Connected to: "Test Cluster" on 127.0.0.1/9160
Welcome to Cassandra CLI version 1.2.4

Type 'help;' or '?' for help.
Type 'quit;' or 'exit;' to quit.

[default@unknown] 

とりあえず、動いてそうです。

フォアグラウンドで起動したサーバを終了する時は、Ctrl-Cで。

INFO 17:01:39,003 Stop listening to thrift clients
 INFO 17:01:39,014 Announcing shutdown
 INFO 17:01:41,016 Waiting for messaging service to quiesce
 INFO 17:01:41,019 MessagingService shutting down server thread.

JNAの導入

この手順でインストールしたCassandraは、JNAが入っていません。起動時にも、こんなログが出ています。

 INFO 16:57:52,378 JNA not found. Native methods will be disabled.

JNAを導入した方がパフォーマンスがよいとのことですが、個人的にはあまり問題ありません。

が、せっかくなのでやっておいてみましょう。

JNA
https://github.com/twall/jna

上記サイトから、jna-X.Y.Z.jarを落としてきて、$CASSANDRA_HOME/libの配下にコピーします。

$ cp [JNAをダウンロードしたディレクトリ]jna-3.5.2.jar $CASSANDRA_HOME/lib

で、Cassandraを再起動すると

 WARN 17:08:34,121 Unable to lock JVM memory (ENOMEM). This can result in part of the JVM being swapped out, especially with mmapped I/O enabled. Increase RLIMIT_MEMLOCK or run Cassandra as root.

rootで起動しろとおっしゃっている…。なおのこと、要らない…。

仕方がないので、sudo付けて実行。

$ sudo /usr/local/cassandra/current/bin/cassandra -f

すると、露骨に起動が重くなると共に、ログが以下の様に変化しました。

 INFO 17:20:26,530 JNA mlockall successful

じゃ、JNAは外しておきましょう…。