4.4. Cassandraのセットアップ for Linux¶
ここでは Linux環境へのCassandraのセットアップ方法を説明します。
4.4.1. ファイルの展開¶
「Apache Cassandra の取得」でダウンロードした、<apache-cassandra-1.1.12-bin.tar.gz>ファイルを任意のパスに展開します。コラム
本書では、例として次のディレクトリを指定します。
「/usr/local/cassandra」
コラム
/usr/local/apache-cassandra-1.1.12として展開されたものを/usr/local/cassandraにシンボリックリンクしておくと、バージョンアップの際などにアクセスが容易です。# ln -s /usr/local/apache-cassandra-1.1.12 /usr/local/cassandra
4.4.2. 各種設定¶
- Cassandraを起動する前に、以下の設定が必要です。
4.4.2.1. Cassandraの設定¶
- Cassandraの設定が記載されている、</usr/local/cassandra/conf/cassandra.yaml>ファイルをエディタで開き、編集を行います。
- <cassandra.yaml>ファイルに関する詳細は、「Cassandra の参考情報」-「cassandra.yaml 主な項目一覧」を参照してください。
クラスタ名の指定
「cluster_name」プロパティに任意のクラスタの名称を指定します。cluster_name: 'IMBox Cluster'注意
Cassandraサーバが複数存在する場合、クラスタ名で同一クラスタのCassandraであるか判断され、クラスタが組まれてしまう場合があります。新規に intra-mart Accel Platform を構築する場合、初期値を変更することを推奨します。データの保存場所の指定
「data_file_directories」プロパティに任意のパスを指定します。指定したディレクトリが無い場合、起動時に自動で作成されます。data_file_directories: - /var/lib/cassandra/dataコミットログの保存場所の指定
「commitlog_directory」プロパティに任意のパスを指定します。指定したディレクトリが無い場合、起動時に自動で作成されます。# commit log commitlog_directory: /var/lib/cassandra/commit_log/1.1.12キャッシュデータの保存場所の指定
「saved_caches_directory」プロパティに任意のパスを指定します。指定したディレクトリが無い場合、起動時に自動で作成されます。# saved caches saved_caches_directory: /var/lib/cassandra/saved_caches/1.1.12他のCassandraとの通信用アドレスの指定
Cassandraでは、JavaのInetAddress.getLocalHost()で取得されたIPアドレスで他のCassandraとの通信を受け付けますが、複数のアドレスがある場合、明示的に通信に利用するIPアドレスを指定する必要があります。listen_address: 192.168.xxx.xxx(任意のIPアドレス) rpc_address: 192.168.xxx.xxx(任意のIPアドレス)システムログの指定
</usr/local/cassandra/conf/log4j-server.properties>ファイルをエディタで開き、「log4j.appender.R.File」プロパティに任意のパスを指定しますlog4j.appender.R.File=/var/log/cassandra/1.1.12/system.log
注意
設定上の注意
OSとJDKバージョンの組み合わせにより、JVMパラメータのXssが不足し、Cassandraの起動に失敗する場合があります。以下の組み合わせにおいて発生することを確認しています。
- OS: Linux系OS
- JDK: Oracle JDK 1.7u40 , Oracle JDK 1.7u45
回避方法
上記の事象は、${cassandra}/conf/cassandra-env.shに設定されているXssの値を変更することで回避可能です。
Cassandraのバージョンが、1.1.4の場合
if [ "`uname`" = "Linux" ] ; then # reduce the per-thread stack size to minimize the impact of Thrift # thread-per-client. (Best practice is for client connections to # be pooled anyway.) Only do so on Linux where it is known to be # supported. if startswith "$JVM_VERSION" '1.7.' then # JVM_OPTS="$JVM_OPTS -Xss160k" JVM_OPTS="$JVM_OPTS -Xss228k" else JVM_OPTS="$JVM_OPTS -Xss128k" fi fiCassandraのバージョンが、1.1.12の場合
if [ "`uname`" = "Linux" ] ; then # reduce the per-thread stack size to minimize the impact of Thrift # thread-per-client. (Best practice is for client connections to # be pooled anyway.) Only do so on Linux where it is known to be # supported. # u34 and greater need 180k # JVM_OPTS="$JVM_OPTS -Xss180k" JVM_OPTS="$JVM_OPTS -Xss228k" fiコラム
Java 17 で運用を行う場合、<${cassandra}/conf/cassandra-env.sh> ファイルをエディタで開き、下記 2 箇所の設定を変更してください1 箇所目
- 変更前
# GC tuning options # JVM_OPTS="$JVM_OPTS -XX:+UseParNewGC" JVM_OPTS="$JVM_OPTS -XX:+UseConcMarkSweepGC" JVM_OPTS="$JVM_OPTS -XX:+CMSParallelRemarkEnabled" JVM_OPTS="$JVM_OPTS -XX:SurvivorRatio=8" JVM_OPTS="$JVM_OPTS -XX:MaxTenuringThreshold=1" JVM_OPTS="$JVM_OPTS -XX:CMSInitiatingOccupancyFraction=75" JVM_OPTS="$JVM_OPTS -XX:+UseCMSInitiatingOccupancyOnly" JVM_OPTS="$JVM_OPTS -XX:+UseTLAB"
- 変更後
# GC tuning options # JVM_OPTS="$JVM_OPTS -XX:+UseParNewGC" # JVM_OPTS="$JVM_OPTS -XX:+UseConcMarkSweepGC" # JVM_OPTS="$JVM_OPTS -XX:+CMSParallelRemarkEnabled" # JVM_OPTS="$JVM_OPTS -XX:SurvivorRatio=8" # JVM_OPTS="$JVM_OPTS -XX:MaxTenuringThreshold=1" # JVM_OPTS="$JVM_OPTS -XX:CMSInitiatingOccupancyFraction=75" # JVM_OPTS="$JVM_OPTS -XX:+UseCMSInitiatingOccupancyOnly" JVM_OPTS="$JVM_OPTS -XX:+UseTLAB" JVM_OPTS="$JVM_OPTS -XX:+UseG1GC" JVM_OPTS="$JVM_OPTS -XX:MaxGCPauseMillis=200" JVM_OPTS="$JVM_OPTS -XX:InitiatingHeapOccupancyPercent=30"2 箇所目
- 変更前
JVM_OPTS="$JVM_OPTS --add-exports java.base/jdk.internal.ref=ALL-UNNAMED"
- 変更後
# JVM_OPTS="$JVM_OPTS --add-exports java.base/jdk.internal.ref=ALL-UNNAMED" JVM_OPTS="$JVM_OPTS --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/jdk.internal.ref=ALL-UNNAMED --add-opens=java.base/java.math=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.locks=ALL-UNNAMED"
4.4.2.2. ファイルディスクリプタ数の変更¶
OSの設定により、運用中にIOException, FileNotFoundException 等が発生し、Cassandraが正常に動作しなくなる場合があります。原因は、Cassandraのプロセスが利用(オープン)できるファイル数の上限がOSにより制限されている上限を超える為に発生します。つまり、/etc/system/limits.conf または/etc/security/limits.confで設定されるOSのファイルディスクリプタ数を環境に合わせた以下の数を追加することにより、回避できますので、適切な値に変更してください。* soft nofile 32768 * hard nofile 32768 root soft nofile 32768 root hard nofile 32768※ ユーザ、および、値はサンプルです、環境に合わせて適切な値を設定してください。
コラム
ファイルディスクリプタの現在の設定値は、
ulimit -nで確認できます。
4.4.2.3. メモリの設定¶
Linux環境の場合、最大ヒープサイズ(Xmx)は</usr/local/cassandra/conf/cassandra-env.sh>により起動時に以下の値で自動設定されます。
- 搭載メモリ量が、2048MB以下の場合、搭載メモリの半分
- 搭載メモリ量が、2049MB以上、4099MB以下の場合、1024MB
- 搭載メモリ量が、4100MB以上、32768MB以下の場合、搭載メモリ量の1/4
- 搭載メモリ量が、32769MB以上の場合、8196MB
任意に設定したい場合は、 </usr/local/cassandra/conf/cassandra-env.sh>の以下の項目のコメントアウトを外し、任意の値を設定してください。#MAX_HEAP_SIZE="4G" #HEAP_NEWSIZE="800M"注意
MAX_HEAP_SIZEに設定する値は「512M」以上にしてください。「512M」より小さい値を設定した場合、正常に動作しない恐れがあります。Cassandraとしては1GB以上に設定することを推奨されています。HEAP_NEWSIZEはMAX_HEAP_SIZEの設定値に応じて適切な値を設定してください。
4.4.2.4. 環境変数の設定¶
環境変数に JDKをインストールしたホームディレクトリを追加します。Cassandraを実行するユーザの環境変数に、次のように設定します。
変数 JAVA_HOME 値 JDK をインストールしたホームディレクトリ コラム
事前にJDKがインストールされている必要があります。JDKのバージョンは「 リリースノート 」-「 Apache Cassandra システム要件 」に準拠します。