Cassandra推奨ハードウェア
Cassandra インストール
Cassandra のインストール(RHEL・CentOS編)
Cassandra のインストール(Debian・Ubuntu編)
その他サーバーの推奨設定
ユーザーリソースの限界値の設定
Disable Swap の挙動の変更
時間の同期
Cassandraの基本設定
基本的な設定項目
各ノードのリング内の位置設定
JVM のメモリ使用量設定
Cassandra のインストール(RHEL・CentOS編)
Cassandra のインストール(Debian・Ubuntu編)
ユーザーリソースの限界値の設定
Disable Swap の挙動の変更
時間の同期
基本的な設定項目
各ノードのリング内の位置設定
JVM のメモリ使用量設定
以下のコマンドで JAVA(JRE)のバージョンを確認します。
$java -version
JAVA(JRE)が 16.0_19 以上の Oracle の SunJava が推奨されています。また,JAVA(JRE)1.7 は非推奨です。推奨されるバージョンがインストールされていない場合はここでインストールします。
(RHEL 5.x/CentOS 5.x のみ)
以下のコマンドを実行し EPEL をインストールします。EPEL は jna の実行に必要にな
ります。
$sudo rpm –Uvh \
http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
yum で使用する/etc /yum.repos.d を作成して Datastax のリポジトリを追加します。
$sudo vi /etc/yum.repos.d/datastax.repo
[datastax]
name=DataStax Repo for Apache Cassandra baseurl=http://rpm.datastax.com/community enabled=1 gpgcheck=0
以下のコマンドを実行し Cassandra をインストールします。 この時 Cassandra ユーザーが作成され、Cassandra の起動時に使用されます。
yum install apache-cassandra11
yum でインストールした後は OpenJDK が入ってしまうので、alternatives コマンドでSunJava を使用するように変更します。
sudo alternatives --install /usr/bin/java java /usr/java/jre1.6.0_25/bin/java 20000 sudo alternatives --config java
以下のコマンドを実行しcassandraを起動します。
sudo /etc/init.d/Cassandra start
設定は conf/cassandra.yaml で設定します。 debianは/etc/cassandra内、CentOS などはインストールされた先/etc/cassandra/conf 内、他は任意で設置 したconf ディレクトリに存在します。
全体のクラスター名を設定します。
cluster_name: 'Test Cluster'
data_file_directories: - /var/lib/cassandra/data
commitlog_directory: /var/lib/cassandra/commitlog
saved_caches_directory: /var/lib/cassandra/saved_caches
※上記3つのデータ格納先ディレクトリはそれぞれデフォルトの設定です。cassandra を実行するユーザーで書き込めるディレクトリを指定してください。パスの部分を変えれば変更が可能です。
seeds はノード初回起動時に keyspace などのメタ情報等を seeds に設定されたホストに問い合わせに行き、その後はノードの生き死にの確認をする際に利用されます。リング構築時最初に起動するノードには、そのノードの自アドレスを設定して起動してください。また、そのリングの中で最初に起動するノードでは無い場合、生きているノードのアドレスを指定してください。
seed_provider: - class_name: org.apache.cassandra.locator.SimpleSeedProvider - seeds: "127.0.0.1"
listen_address はリングを構築する上での、自ノードのアドレスです。基本的に自ノードのアドレスを設定します。また NIC が複数存在する場合などは、複数あるアドレスのうち、いずれかを指定してください。
listen_address: localhost
rpc_address はデータをやり取りする際に使用されるアドレスです。基本的に、0.0.0.0(全ての NIC で使用する)を設定します
rpc_address: localhost
rpcで使用するポートが rpc_port、ノード間で使用するのが strage_portです。そのノードで使用できるポート番号をそれぞれ設定してください。
rpc_port: 9160 storage_port: 7000
一つのリングにリングの位置として一周 0~2^127 までのレンジがありますいずれかのレンジをノードに指定する事で、そのレンジ位置から次のノードまでのレンジに対応するデータがそのノードに入る事になります。(データがどのレンジ位置になるかはデフォルトの場合 rowkey を hash にした値が使用されます)また、このレンジ位置をノードではトークンと言います。複数のノードでリングを構成する際はこのトークンの値を均等に分けて設定する事により各ノードに入るデータの割合を均等にする事が出来ます。 以下のような5つのノードでリング構成を構築しました。
192.168.1.10 192.168.1.11 192.168.1.12 192.168.1.13 192.168.1.14
この5つのノードの位置を均等にします。この時、トークンの値を自動的に生成してくれるツールを使うと便利です。今回はそのトークン値生成ツールを使用して設定を行います。
$wget https://raw.github.com/riptano/ComboAMI/2.2/tokentoolv2.py
$python tokentoolv2.py 5 { "0": { "0": 0, "1": 34028236692093846346337460743176821145, "2": 68056473384187692692674921486353642291, "3": 102084710076281539039012382229530463436, "4": 136112946768375385385349842972707284582 } }
取得した値をそれぞれのノードに設定します。(nodetool は cassandra の bin 配下、又はパッケージでインストールした場合は/usr/bin/nodetoolにあります)
$ nodetool -h 192.168.1.10 move 0 $ nodetool -h 192.168.1.11 move 34028236692093846346337460743176821145 $ nodetool -h 192.168.1.12 move 68056473384187692692674921486353642291 $ nodetool -h 192.168.1.13 move 102084710076281539039012382229530463436 $ nodetool -h 192.168.1.14 move 136112946768375385385349842972707284582
$ nodetool -h 192.168.1.10 ring
それぞれのノードに Token が設定されているか、データが均等に配置されているか確認してください。データが均等になっていなければ nodetool の move で Token を変更することで調節が可能です。
Cassandra はデフォルトでJVMが使用するヒープメモリを自動的に計算して設定していますが非常に小さな値となってしまう場合があります。JVMのメモリ使用量を確認しOSの搭載メモリの半分に満たない場合は手動にて設定変更を行います。
#vim cassandra-env.sh
MAX_HEAP_SIZE=”4G” ←コメントアウトをはずし指定(搭載メモリの半分以上)
HEAP_NEWSIZE=”800M” ←コメントアウトをはずし指定(CPU core * 100MB)
$java -versionJAVA(JRE)が 16.0_19 以上の Oracle の SunJava が推奨されています。また,JAVA(JRE)1.7 は非推奨です。推奨されるバージョンがインストールされていない場合はここでインストールします。
$wget http://www.ring.gr.jp/archives/net/apache/cassandra/1.1.6/apache-cassandra-1.1.6-bin.tar.gz
$tar zxvf apache-cassandra-1.1.6-bin.tar.gz
$rm apache-cassandra-1.1.6-bin.tar.gz
例)
・/usr/local にファイルを配置した後、シンボリックリンクを貼る
$sudo mv apache-cassandra-1.1.6 /usr/local
$cd /usr/local
$sudo ln –s apache-cassandra-1.1.6 cassandra
・cassandraユーザーの作成
$groupadd cassandra
$useradd -g cassandra -s /usr/sbin/nologin cassandra
・ログディレクトリ・データディレクトリの作成
$mkdir /var/lib/cassandra
$mkdir /var/log/cassandra
$chmod cassandra:cassandra /var/lib/cassandra /var/log/cassandra
以下のコマンドを実行します。
$sudo -u cassandra /usr/local/cassandra/bin/cassandra
Cassandra はデフォルトのユーザーリソースより多くのリソースが必要になります。以下 のように /etc/security/limits.conf へ書き込み設定を行います
cassandra soft nofile 32768
cassandra hard nofile 32768
root soft nofile 32768
root hard nofile 32768
cassandra soft memlock unlimited
cassandra hard memlock unlimited
root soft memlock unlimited
root hard memlock unlimited
cassandra soft as unlimited
cassandra hard as unlimited
root soft as unlimited
root hard as unlimited
さらに次のコマンドを実行しリソースを増やす必要がある場合もあります。
sysctl -w vm.max_map_count=131072
このコマンドで大量のマップが使用できます。永続化させる場合には/etc/sysctl.confに以下を追記してください。
vm.max_map_count=131072
CentOS, RHEL, OEL Sysems の場合は /etc/security/limits.d/90-nproc.conf のlimit 値 も 以下のように 1024 から 10240 へ変更してください
soft nproc 10240
$sudo swapoof --all
以下のコマンドで JAVA(JRE)のバージョンを確認します。
$java -version
JAVA(JRE)が 16.0_19 以上の Oracle の SunJava が推奨されています。また,JAVA(JRE)1.7 は非推奨です。 推奨されるバージョンがインストールされていない場合はここでインストールします。
apt-get を使用してCassandraをインストールするため、インストール用のリポジトリを設定ファイルに記載します。
$vi /etc/apt/source.list.d/Cassandra.source.list
deb http://www.apache.org/dist/cassandra/debian 11x main
deb-src http://www.apache.org/dist/cassandra/debian 11x main
以下のコマンドを実行し公開キーを追加します。
$gpg –keyserver pgp.mit.edu –recv-keys 4BD736A82B5C1B00
$pgp –export –armor 4BD736A82B5C1B00
apt のリストをアップデートした後、apt-get を使用してインストールします。
$sudo apt-get update
$sudo apt-get install cassandra
Cassandra をインストールすると自動的に Cassandra が起動します。初期設定のまま起動されてしまうので、一度起動したCassandra を停止し初期化を行い、再び起動する必要があります。
$sudo service Cassandra stop
$sudo bash –c ‘rm /var/lib/cassandra/data/system/*
$sudo service Cassandra start
JWT ( Jason Web トークン)を理解する JSON Web Token はオープンスタンダードです。これは、任意の 2 つの機関 ( ユーザー、サーバー)間で情報を転送するために使用されます。 JWT では、ユーザーデー...