DSE Advanced Replicationの使用開始

DSE Advanced Replicationをテストするために、DataStax Enterpriseのエッジおよびハブのクラスターを設定する、使用開始手順。

Advanced Replicationをテストするには、エッジ・クラスターおよびハブ・クラスターを設定する必要があります。以下の手順では、各クラスターに1つのノードを設定します。

使用開始の概要:
  1. ハブ・クラスター・ノードを設定する
  2. エッジ・クラスターを設定する
  3. サンプル・キースペースおよびテーブルを作成する
  4. エッジ・ノードでレプリケーションを構成する
  5. レプリケーション・チャネルを作成する
  6. エッジからハブへのレプリケーションを開始する
  7. エッジにデータを挿入する
  8. 接続の切断をテストする
  9. レプリケーションの開始および停止をテストする
注: Cassandra-11363のため、リスト挿入はべき等ではない(変更なし)可能性があります。DSE Advanced Replicationはハブに同じメッセージを複数回配信することがあるため、1つのカラム・ファミリー・スキーマでリストが使用されている場合、このCassandraのバグによりデータの不整合が発生する可能性があります。DataStaxでは、セット(順序が重要でない場合)、frozenリストなど、他のコレクション型を使用することを推奨します。

ハブ・クラスター・ノードを設定する 

ハブ・クラスターでは、DataStax Enterprise 4.8以降が必要です。ハブ・ノードで以下のようにします。
  1. DataStax Enterprise 5.0または4.8以降をインストールします。
  2. インストール方法に適したコマンドを使用し、DataStax EnterpriseをTransactionalノードとして開始します。
  3. ハブ・ノードのパブリックIPアドレスをメモします。

エッジ・クラスターを設定する 

エッジ・クラスターでは、DataStax Enterprise 5.0以降が必要です。エッジ・ノードで以下のようにします。
  1. DataStax Enterprise 5.0以降をインストールします。
  2. レプリケーションを有効にするために、dse.yamlファイルを編集します。
    ファイルの最後で、advanced_replication_optionsの設定およびオプションのコメントを解除し、enabled: trueを設定します。
    # Advanced Replication configuration settings
    advanced_replication_options:
    enabled:true
  3. インストール方法に適したコマンドを使用し、DataStax EnterpriseをTransactionalノードとして開始します。

サンプル・キースペースおよびテーブルを作成する 

以下の手順では、デモンストレーション用のキースペースおよびテーブルを作成する方法を示します。

  1. エッジ・ノードおよびハブ・ノードで、サンプル・キースペースおよびテーブルを作成します。
    cqlsh> create keyspace foo with replication = {'class':'SimpleStrategy', 'replication_factor':1};
  2. エッジ・ノードで以下のようにします。
    cqlsh> create table foo.bar (name text, val text, scalar int, primary key (name));
  3. ハブ・ノードで以下のようにします。
    cqlsh> create table foo.bar (name text, val text, scalar int, edge_id text, primary key (name, edge_id));
    注: ハブ・ノードでは、edge_idカラムは必須です。

エッジ・ノードでレプリケーションを構成する 

DSE Advanced Replicationでは、すべての設定をCQLテーブルに保存します。レプリケーションを構成するには、テーブルに値を直接読み込むか、dse advrepコマンドライン・ツールを使用します。

エッジ・ノードでレプリケーションを構成する場合、以下のようにします
  • エッジ・ノードは、前に保存したパブリックIPアドレスを使用してハブを参照します。
  • edge-idの値は、この特定のエッジ・ノードから来るすべてのデータの一意識別子です。
  • edge-idの一意識別子は、foo.barテーブルがハブ・ノードに作成されたときに含められた、edge-id-col-nameに書き込まれます。
レプリケーションを構成するには、以下のコマンドを実行します。
dse advrep edge conf --edge-id "edge1" --edge-id-col-name "edge_id" --hub-ip-addresses "10.200.177.184"
Set replication config edge_id_col_name from None to edge_id
Set replication config hub_ip_addresses from None to 10.200.177.184
Set replication config edge_id from None to edge1
構成を確認するには、以下のコマンドを実行します。
dse advrep edge list-conf
field            | value
--------------------------------
edge_id          | edge1
hub_ip_addresses | 10.200.181.55
edge_id_col_name | edge_id

レプリケーション・チャネルを作成する 

レプリケーション・チャネルはエッジ・クラスターとハブ・クラスターとの間でデータを交換する、定義済みチャネル。です

ハブのキースペースおよびテーブルの各名前はエッジ上のものと別の名前にすることができますが、この例では、同じ名前を使用します。また、edge-idおよびedge-id-col-nameもグローバル設定とは別に設定できます。

キースペースおよびテーブルのレプリケーション・チャネルを作成するには、以下のようにします。
dse advrep edge channel create --keyspace foo --table bar --hub-keyspace foo --hub-table bar --priority 1 --edge-id edge1 --edge-id-col-name edge_id --enabled
Created Replication Channel foo:bar
dse advrep edge channel status
keyspace_name | table_name | edge_id | edge_id_col_name | enabled | hub_keyspace_name | hub_table_name | priority | truncate_timestamp
--------------------------------------------------------------------------------------------------------------------------------------
foo           | bar        | edge1   | edge_id          | True    | foo               | bar            | 1        | None

エッジからハブへのレプリケーションを開始する 

これで、レプリケーションが構成され、レプリケーション・チャネルが有効になりました。レプリケーションが開始するまで、何も発生しません。
  1. ハブで、cqlshを使用してデータが存在していないことを確認します。
    cqlsh:foo> select * from foo.bar;
    name | edge_id | scalar | val
    ------+---------+--------+-----
    (0 rows)
  2. エッジで、ハブへのレプリケーションを開始します。
    dse advrep edge start
    edge replication started
    dse advrep edge status
    edge replication is running
  3. レプリケーション・ログにあるレコードの数を確認します。まだデータが挿入されていないため、レプリケーション・ログのレコード・カウントは0です。
    dse advrep edge rl-count
    0

エッジにデータを挿入する 

ハブへのレプリケーションのためのデータをエッジで挿入します。
  1. エッジで、cqlshを使用してデータを挿入します。
    cqlsh> insert into foo.bar (name, val, scalar) values ('a', '1', 1);
    cqlsh> insert into foo.bar (name, val, scalar) values ('b', '2', 2);
  2. ハブで、レプリケートされたデータを確認します。
    cqlsh:foo> select * from foo.bar;
    name | edge_id | scalar | val
    ------+---------+--------+-----
    a     | edge1   | 1      | 1
    b     | edge1   | 2      | 2
    (2 rows)

接続の切断をテストする 

ハブへの接続の切断をテストするために、ハブのDataStax Enterpriseプロセスを停止してから、さらにデータをエッジに挿入します。期待される結果は、ハブ・クラスターの再開後ただちに、データがレプリケートされることです。
  1. ハブで、DataStax Enterpriseを停止します。
    dse cassandra-stop
  2. エッジで、さらにデータを挿入します。
    cqlsh> insert into foo.bar (name, val, scalar) values ('c', '3', 3);
    cqlsh> insert into foo.bar (name, val, scalar) values ('d', '4', 4);
  3. レプリケーション・ログにあるレコードの数を確認します。レプリケーション・ログには2つのエントリーがあります。
    dse advrep edge rl-count
    2
  4. ハブで、DataStax Enterpriseを再開します。
    dse cassandra

    通信およびデータ・レプリケーションが再開し、エッジからハブに新しいレコードがレプリケートされるまで少し待ちます。

    cqlsh> select * from foo.bar;
    name | edge_id | scalar | val
    ------+---------+--------+-----
    a     | edge1   | 1      | 1
    c     | edge1   | 3      | 3
    d     | edge1   | 4      | 4
    b     | edge1   | 2      | 2
    4 rows(s)
  5. エッジで、レプリケーション・ログ・カウントが0に戻ります。
    dse advrep edge rl-count
    
    0

レプリケーションの開始および停止をテストする 

接続の切断のテストと同様に、advrepコマンドライン・ツールを使用して、個別のレプリケーション・チャネルを一時停止および再開できます。期待される結果は、新たに挿入したデータがレプリケーション・ログに保存されず、ハブにも送信されないことです。
  1. エッジで、レプリケーション・チャネルを一時停止します。
    dse advrep edge channel pause --keyspace foo --table bar
  2. データをさらに挿入します。
  3. エッジで、レプリケーション・チャネルを再開します。
    dse advrep edge channel resume --keyspace foo --table bar
ハブでも、すべてのレプリケーションの停止および開始を実施できます。期待される結果は、新たに挿入したデータが、レプリケーションの停止時にレプリケーション・ログに保存され、レプリケーションの再開後にハブに送信されることです。
  1. ハブで、レプリケーションを停止します。
    dse advrep edge stop
  2. データをさらに挿入します。
  3. ハブで、レプリケーションを開始します。
    dse advrep edge start
dse.yamlファイルの場所は、インストールのタイプによって異なります。
Installer-Services /etc/dse/dse.yaml
パッケージ・インストール /etc/dse/dse.yaml
Installer-No Services install_location/resources/dse/conf/dse.yaml
tarボール・インストール install_location/resources/dse/conf/dse.yaml