そろそろ、他の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.yamlとlog4j-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は外しておきましょう…。