6. Cassandra のクラスタ構築¶
ここでは Cassandra のクラスタ構築方法を紹介します。本書では以下の説明は【表1. Cassandra接続情報設定例】を元に記載しています。
【表1. Cassandra接続情報設定例】
1台目のノード(シードノード) 192.168.0.1 2台目のノード 192.168.0.2 3台目のノード 192.168.0.3 キースペース default 警告
クラスタ構築のため、replication-factorやhostの変更を行った場合、intra-mart Accel Platform のセットアップ時に設定が必要となります。詳しくは、「 intra-mart Accel Platform セットアップガイド 」-「 Apache Cassandra接続情報 」を参照してください。
6.1. クラスタの構成¶
Cassandraは、1台のみでの運用も可能ですが、大量のメッセージを扱う場合での負荷分散や冗長化を実現するため、クラスタ構成を構築することが可能です。Cassandra の一貫性保証 での通り、 IMBox では「Quorum((ノード数+1)/2の数分の一貫性を保証)」を採用しているため、クラスタのノード数は 3台以上 にすることを強く推奨します。
6.2. ノードの追加¶
replication-factor とhostの変更
replication-factor (以下、RFと表記)とは、クラスタ内部でデータのレプリカを何個持つかという設定です。標準の1のままだと、該当のノードを持っているノードがダウンした場合にデータが参照できなくなります。IMBox では先述の通り一貫性の保証にQuorumを採用しているため、一貫性を保証するために下記表にあるRFの値を推奨します。
ノード数 RF値(推奨値) 説明 1 1 3 3 RF値を2とした場合、どれか1ノードが停止した時点で一貫性が保証できなくなるため、 IMBox が動作しなくなります。 4 以上 3 以上でノード数以下 対障害性とノード毎のデータサイズを考慮のうえ、任意の値を設定してください。 シードノードを指定します。
各ノードの<%CASSANDRA_HOME%/conf/cassandra.yaml>ファイルをエディタで開き、「seeds」プロパティに1台目のノード(192.168.0.1)をシードノードとして指定します。seed_provider: # Addresses of hosts that are deemed contact points. # Cassandra nodes use this list of hosts to find each other and learn # the topology of the ring. You must change this if you are running # multiple nodes! - class_name: org.apache.cassandra.locator.SimpleSeedProvider parameters: # seeds is actually a comma-delimited list of addresses. # Ex: "<ip1>,<ip2>,<ip3>" - seeds: "192.168.0.1"各ノードで設定を行ったのち、 Cassandra を起動します。
以下のコマンドを実行し次のように各ノードが表示され、Effective-Ownershipの合計値が「RF * 100%」の値となっていることを確認できれば完了です。
# /usr/local/cassandra/bin/nodetool ring (windowsの場合:C:/ > %CASSANDRA_HOME%/bin/nodetool ring) Starting NodeTool Address DC Rack Status State Load Effective-Ownership Token 134073324684581098149220982299151052417 192.168.0.1 datacenter1 rack1 Up Normal 117.33 KB 88.35% 72029913264419379591431889264009303469 192.168.0.2 datacenter1 rack1 Up Normal 225.3 KB 59.54% 110436698385580468589163673403640885580 192.168.0.3 datacenter1 rack1 Up Normal 213.4 KB 52.11% 134073324684581098149220982299151052417ノート
Cassandra では、デフォルトで以下のポートを利用して他の Cassandra と通信を行います。Linuxの場合、iptablesやSElinux、Windowsの場合、ファイアーウォールの設定を必要に応じて設定変更してください。クライアント接続ポート および ノード間通信ポート は、 <%CASSANDRA_HOME%/conf/cassandra.yaml> で設定されています。JMX接続ポート は、Linuxの場合には <%CASSANDRA_HOME%/conf/cassandra-env.sh> に、Windowsの場合には <%CASSANDRA_HOME%/bin/cassandra.bat> で設定されています。
[1] 変更不可
[2] ノード間通信にSSLを利用した場合 警告
クライアント接続ポートに9160以外を指定した場合、新規ノードの検出機能にてエラーが発生します。初期値の9160から値を変更せずにご利用ください。ノート
「シードノード」とは?
Cassandra クラスタ上で中心(ハブ)のように機能し、新規にクラスタに参加したノードは、 シードノードから、他のノードの状態情報を取得したり、クラスタ全体の情報を取得します。 シードノードがなくても、動作自体には問題ありませんので、シードノード自体が単一障害点にはなりませんが、 クラスタ内のノードの状態の変化の検出に時間がかかるようになります。
6.2.1. 既にIMBox環境を構築している場合¶
テナント環境セットアップを既に実行して、IMBox環境を構築している場合は以下の手順を行ってください。
以下のディレクトリでcassandra-cliを実行します。
# %CASSANDRA_HOME%/bin/cassandra-cli.sh(または、cassandra-cli.bat)以下のコマンドで Cassandra に接続します。
[default@unknown] connect 127.0.0.1/9160;以下のコマンドで IMBoxで使用しているKeyspaceを指定します。
[default@unknown] use default;以下のコマンドで IMBoxでreplication_factorを変更します。
[default@default] update keyspace default with strategy_options={replication_factor:2};以下のメッセ―ジが表示されれば成功です。
Waiting for schema agreement... ... schemas agree across the cluster以下のコマンドでcassandra-cliを終了し、 Cassandra を再起動してください。
[default@default] exit;再起動後、以下のコマンドを実行してください。
# /usr/local/cassandra/bin/nodetool repair (windowsの場合:C:/ > %CASSANDRA_HOME%/bin/nodetool repair)
6.3. ノードの削除¶
クラスタから任意のノードを削除したい場合、削除したいノードで、decommissionを実行します。削除するノードのデータを他のノードに転送を行うため、終了するまでしばらく時間がかかります。# /usr/local/cassandra/bin/nodetool -h [削除したいノードのIPアドレス] decommission (windowsの場合:C:/ > %CASSANDRA_HOME%/bin/nodetool -h [削除したいノードのIPアドレス] decommission)