LoginSignup
6
6

More than 5 years have passed since last update.

CentOS 6.4 に Cassandra 2.0.0-beta1 を構築する

Posted at

はじめに

CentOS 6.4 環境に Cassandra 2.0.0-beta1 を tarball からインストールする手順メモを残しておく。とりあえず動作することを確認するところまで。今回は 5 台の物理サーバ (cassandra[01-05].domain.local) を使用し、それぞれ CentOS 6.4 がクリーンインストールされている。

★ Kernel を確認する
[cassandra[01-05]]# uname -a
Linux localhost 2.6.32-358.11.1.el6.x86_64 #1 SMP Wed Jun 12 03:34:52 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

★ ディストリビューションを確認する
[cassandra[01-05]]# cat /etc/redhat-release
CentOS release 6.4 (Final)

インストール

Cassandra の動作に必要な Java をインストールする。今回インストールを行なう Cassandra 2.0.0-beta1 では、JDK-1.7 が必須となっているため、Oracle が提供している SunJDK 1.7.0_25 を使用する。もし JDK-1.6 で動かそうとしたら /var/log/cassandra/cassandra.log に "Unsupported major.minor version 51.0" と出力されます。

★ SunJDK をインストールする
[cassandra[01-05]]# rpm -e $(rpm -qa | grep java) jdk
[cassandra[01-05]]# rpm -ihv ~/jdk-7u25-linux-x64.rpm

★ バージョンを確認する
[cassandra[01-05]]# java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) 64-Bit Server VM (build 23.25-b01, mixed mode)

Cassandra をインストールする。今回は tarball から /opt/cassandra 以下にインストールする。

★ 展開後に /opt/cassandra 以下に移動する
[cassandra[01-05]]# tar xvzf ~/apache-cassandra-2.0.0-beta1-bin.tar.gz
[cassandra[01-05]]# mv apache-cassandra-2.0.0-beta1 /opt/
[cassandra[01-05]]# rm -f /opt/cassandra
[cassandra[01-05]]# ln -s /opt/apache-cassandra-2.0.0-beta1 /opt/cassandra

★ ログとデータディレクトリを作成する
[cassandra[01-05]]# sudo mkdir -p /var/log/cassandra 
[cassandra[01-05]]# mkdir -p /var/lib/cassandra

設定

Cassandra を設定する。設定項目 "seeds", "listen_address", "rpc_address" の 3 カ所は必ず変更する必要があり、追加で virtualnode に関する設定と、IPv6 環境で動かす設定を行なう。今回は 5 台の物理サーバのうち、3 台を seed とする。また "listen_address" は、互いに接続できる IP アドレスまたは名前解決できるドメインを指定する必要がある。今回は IPv6 環境かつ DNS がある環境で構築する。

★ 設定を変更する
[cassandra[01-05]]# sed -i 's/- seeds: "127.0.0.1"/- seeds: "cassandra01.domain.local, cassandra02.domain.local, cassandra03.domain.local"/g' /opt/cassandra/conf/cassandra.yaml
[cassandra[01-05]]# sed -i "s/listen_address: localhost/listen_address: `hostname`.domain.local/g" /opt/cassandra/conf/cassandra.yaml
[cassandra[01-05]]# sed -i "s/rpc_address: localhost/rpc_address: `hostname`.domain.local/g" /opt/cassandra/conf/cassandra.yaml
[cassandra[01-05]]# sed -i 's/# num_tokens: 256/num_tokens: 4/g' /opt/cassandra/conf/cassandra.yaml
[cassandra[01-05]]# sed -i 's/JVM_OPTS="$JVM_OPTS -Djava.net.preferIPv4Stack=true"/JVM_OPTS="$JVM_OPTS -Djava.net.preferIPv4Stack=false"/g' /opt/cassandra/conf/cassandra-env.sh
[cassandra[01-05]]# echo "::1 localhost localhost.localdomain localhost6 localhost6.localdomain6" > /etc/hosts

Cassandra の起動スクリプトを作成する。結局は /opt/cassandra/bin/cassandra シェルを呼び出すだけだが、いろいろと面倒なので簡易的に作成しておく。Cassandra の PID をファイルで管理し、標準出力および標準エラー出力はログファイルにリダイレクトする。

★ 起動スクリプトを作成する
[cassandra[01-05]]# cat << 'EOS' > /etc/init.d/cassandra && sudo chmod +x /etc/init.d/cassandra
#!/bin/sh
CASSANDRA_ROOT_DIR=/opt/cassandra
CASSANDRA_BIN_DIR=${CASSANDRA_ROOT_DIR}/bin
CASSANDRA_LOG_DIR=/var/log/cassandra
CASSANDRA_RUN_DIR=/var/run/cassandra
case "$1" in
  start)
    if [ ! -d ${CASSANDRA_LOG_DIR} ]; then
      mkdir ${CASSANDRA_LOG_DIR}
    fi
    if [ ! -d ${CASSANDRA_RUN_DIR} ]; then
      mkdir ${CASSANDRA_RUN_DIR}
    fi
    if [ -e ${CASSANDRA_RUN_DIR}/cassandra.pid ]; then
      if [ 1 -ne $(ps $(cat ${CASSANDRA_RUN_DIR}/cassandra.pid) | wc -l) ]; then
        echo "NG: already running (pid=$(cat ${CASSANDRA_RUN_DIR}/cassandra.pid))"
        exit 1
      fi
    fi
    ${CASSANDRA_BIN_DIR}/cassandra -p ${CASSANDRA_RUN_DIR}/cassandra.pid >> ${CASSANDRA_LOG_DIR}/cassandra.log 2>&1
    echo "OK: running cassandra (pid=$(cat ${CASSANDRA_RUN_DIR}/cassandra.pid))"
    ;;
  stop)
    kill $(cat ${CASSANDRA_RUN_DIR}/cassandra.pid)
    echo "OK: stopped cassandra"
    ;;
  restart)
    $0 stop
    sleep 2
    $0 start
    ;;
  *)
    echo "Usage: `basename $0` start|stop|restart"
esac
exit 0
EOS

動作確認

Cassandra ノードを起動する。一番最初に起動するノードは seeds で設定したどれかである必要がある。Cluster 内に seeds に設定した ノードが 1 台でもあれば良いため、次に起動するノードはどれでもかまわない。最後に付属の nodetool コマンドで Cluster の情報が取得する。

★ ノードを起動する (同様に他のサーバでも行なう)
[cassandra[01-05]]# /etc/init.d/cassandra start
OK: running cassandra (pid=24225)

★ 接続されているノードのステータスを表示する
[cassandra[01-05]]# /opt/cassandra/bin/nodetool status
Datacenter: datacenter1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address                             Load       Tokens  Owns (effective)  Host ID                               Rack
UN  2402:4200:1:52:5054:40ff:fe1a:d412  55.16 KB   4       10.5%             40be2f96-9871-45b9-81e8-03364816bd39  rack1
UN  2402:4200:1:52:5054:5eff:fee1:1174  58.55 KB   4       32.9%             36afe480-8b7d-4a42-9dae-979858f9395a  rack1
UN  2402:4200:1:52:5054:60ff:fedb:ae9c  49.23 KB   4       16.1%             3824c783-6282-4615-99d9-58a8fc88bc4b  rack1
UN  2402:4200:1:52:5054:7cff:fe4c:10cf  55.19 KB   4       21.3%             bc53b062-4258-4c03-ad6f-f9d482728c4e  rack1
UN  2402:4200:1:52:5054:6cff:fefc:7aa   49.28 KB   4       19.2%             1a917447-b882-4f39-9b4d-cc87db860d36  rack1

参考にした文献など

6
6
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6