intra-mart Accel Platform Cassandra管理者ガイド 第15版 2018-12-01

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台以上 にすることを強く推奨します。
クラスタ構成でCassandraを構築する場合、「Cassandraの設定 - 他のCassandraとの通信用アドレスの指定」を参照して listen_addressrpc_addressを設定してください。

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を起動します。

以下のコマンドを実行すると各ノードの情報が表示されます。Owns(Effective-Ownership)の合計値が「RF * 100%」の値となっていることを確認できれば完了です。

# /usr/local/cassandra/bin/nodetool ring
 (windowsの場合:C:/ > %CASSANDRA_HOME%/bin/nodetool ring)

Datacenter: datacenter1
=======================
Replicas: 1
|/ State=Normal/Leaving/Joining/Moving
Address      DC          Rack      Status   State    Load         Effective-Ownership   Token
192.168.0.1  datacenter1 rack1     Up       Normal   550.14 KB    100.0%                82389416039062679366789129285745111778
192.168.0.2  datacenter1 rack1     Up       Normal   522.27 KB    100.0%                12435848436441025856657894230405668892
192.168.0.3  datacenter1 rack1     Up       Normal   455.95 KB    100.0%                59208578228297542987320156056687160295

コラム

Cassandraでは、デフォルトで以下のポートを利用して他のCassandraと通信を行います。
Linuxの場合、iptablesやSElinux、Windowsの場合、ファイアーウォールの設定を必要に応じて設定変更してください。
  • 9160 : クライアント接続ポート(rpc_port) [1]
  • 7000 : ノード間通信ポート(storage_port)
  • 7001 : ノード間通信ポート(ssl_storage_port) [2]
  • 7199 : JMX接続ポート(JMX_PORT)
クライアント接続ポート および ノード間通信ポート は、 <%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環境を構築している場合は以下の手順を行ってください。
  1. 以下のディレクトリでcassandra-cliを実行します。

    # %CASSANDRA_HOME%/bin/cassandra-cli.sh(または、cassandra-cli.bat)
    
  2. 以下のコマンドでCassandraに接続します。

    [default@unknown] connect 127.0.0.1/9160;
    
  3. 以下のコマンドで IMBoxで使用しているKeyspaceを指定します。

    [default@unknown] use default;
    
  4. 以下のコマンドでreplication_factorを変更します。

    [default@default] update keyspace default with strategy_options={replication_factor:2};
    
  5. 以下のメッセ―ジが表示されれば成功です。

    Waiting for schema agreement...
    ... schemas agree across the cluster
    
  6. 以下のコマンドでcassandra-cliを終了し、Cassandraを再起動してください。

    [default@default] exit;
    
  7. 再起動後、以下のコマンドを実行してください。

    # /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)