DSE Advanced Replication(DSE拡張レプリケーション)の使用開始
DSE Advanced Replication(DSE拡張レプリケーション)をテストするためのDataStax Enterpriseのソース・クラスターとデスティネーション・クラスターの設定手順。
cassandra.yaml
cassandra.yamlファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/cassandra/cassandra.yaml |
tarボール・インストール | installation_location/resources/cassandra/conf/cassandra.yaml |
dse.yaml
dse.yamlファイルの場所は、インストールのタイプによって異なります。パッケージ・インストール | /etc/dse/dse.yaml |
tarボール・インストール | installation_location/resources/dse/conf/dse.yaml |
Advanced Replication(拡張レプリケーション)をテストするには、ソース・クラスターとデスティネーション・クラスターを設定する必要があります。以下の手順では、各クラスターに1つのノードを設定します。
使用開始の概要:
- デスティネーション・クラスター・ノードを設定する
- ソース・クラスターを設定する
- サンプル・キースペースとテーブルを作成する
- ソース・ノードでレプリケーションを構成する
- レプリケーション・チャネルを作成する
- ソースからデスティネーションへのレプリケーションを開始する
- ソースにデータを挿入する
- 接続の切断をテストする
- レプリケーションの開始と停止をテストする
注: Cassandra-11368のため、リスト挿入はべき等でない(変更なし)可能性があります。DSE Advanced Replication(DSE拡張レプリケーション)は、同じメッセージをデスティネーションに複数回配信することがあるため、カラム・ファミリー・スキーマでリストが使用されている場合、このCassandraのバグによりデータの不整合が発生する可能性があります。順序が重要でない場合は、セットやfrozenリストなどの他のコレクション型を使用すること推奨します。
デスティネーション・クラスター・ノードを設定する
重要: 前提条件:DSE 5.0のAdvanced Replication(拡張レプリケーション)V1を使用している場合は、DSE 5.1にアップグレードし、Advanced Replication(拡張レプリケーション)V2に移行する必要があります。
デスティネーション・ノードで以下の手順を実行します。
- DataStax Enterpriseをインストールします。
- インストール方法に適したコマンドを使用して、DataStax Enterpriseをトランザクション・ノードとして起動します。
- デスティネーション・ノードのパブリックIPアドレスを書き留めておきます。
ソース・クラスターを設定する
拡張レプリケーションは、バージョンが混在している環境で操作できます。ソース・クラスターには、DataStax Enterprise 5.1以降が必要です。ソース・ノードで以下のコマンドを実行します。
- DataStax Enterprise 5.1以降をインストールします。
- レプリケーションを有効にするには、 dse.yamlファイルを編集します。ファイルの最後にある
advanced_replication_options
設定とオプションをコメント解除し、enabled: true
を設定します。# Advanced Replication configuration settings advanced_replication_options: enabled: true
- Capture-Data-Change(CDC)をcassandra.yaml ファイルで各ソースのノードごとに有効にします。
cdc_enabled: true
注: 機能を実装するためにCDCログが使用されるため、CDCが有効になっていない場合、Advanced Replication(拡張レプリケーション)は起動しません。 - 負荷に応じて、デフォルトのCDCディスク領域を増やすことを検討してください(デフォルト:4096、または
cdc_raw_directory
が存在する領域の合計容量の1/8)。cdc_total_space_in_mb: 16384
- commitlog圧縮の以下の値を確認します。
commitlog_compression: - class_name: LZ4Compressor
- インストール方法に適したコマンドを使用して、DataStax Enterpriseをトランザクション・ノードとして起動します。
- クラスターでAdvanced Replication(拡張レプリケーション)が起動すると、ソース・ノードは変更が必要なキースペースとテーブルを作成します。詳細については、「キースペース」を参照してください。
サンプル・キースペースとテーブルを作成する
以下の手順では、デモ用のキースペースとテーブルを作成する方法を示します。
- ソース・ノードとデスティネーション・ノードで、サンプルのキースペースとテーブルを作成します。
CREATE KEYSPACE foo WITH REPLICATION = { 'class': 'SimpleStrategy', 'replication_factor':1};
要確認: 大文字と小文字の区別を保持するには、コマンドライン引数のキースペースとテーブル名をエスケープした引用符で囲むことを忘れないでください。dse advrep create --keyspace \"keyspaceName\" --table \"tableName\"
- ソース・ノードで以下のコマンドを実行します。
CREATE TABLE foo.bar ( name TEXT, val TEXT, scalar INT, PRIMARY KEY (name));
- デスティネーション・ノードで以下の手順を実行します。
CREATE TABLE foo.bar ( name TEXT, val TEXT, scalar INT, source_id TEXT, PRIMARY KEY (name, source_id));
注: デスティネーション・ノードにはsource_id
カラムが必要です。
ソース・ノードでレプリケーション・デスティネーションを構成する
DSE Advanced Replication(DSE拡張レプリケーション)では、すべての設定がCQLテーブルに格納されます。レプリケーションを構成するには、dse advrepコマンドライン・ツールを使用します。
ソース・ノードでレプリケーションを構成する場合:
- ソース・ノードは、先に保存してあるパブリックIPアドレスを使用してデスティネーションを参照します。
source-id
値は、このソース・ノードから取得するすべてのデータの一意識別子です。source-id
一意識別子は、デスティネーション・ノードでfoo.barテーブルが作成されたときに含められたsource-id-column
に書き込まれます。
dse advrep --verbose destination create --name mydest --addresses 10.200.182.148 --transmission-enabled true
Destination mydest created
構成を確認するには、以下のコマンドを実行します。dse advrep destination list-conf
--------------------------------------------------------------------------------------------
|destination|name |value |
--------------------------------------------------------------------------------------------
|mydest |driver_ssl_enabled |false |
--------------------------------------------------------------------------------------------
|mydest |addresses |10.200.182.148 |
--------------------------------------------------------------------------------------------
|mydest |driver_read_timeout |15000 |
--------------------------------------------------------------------------------------------
|mydest |driver_connections_max |8 |
--------------------------------------------------------------------------------------------
|mydest |source_id_column |source_id |
--------------------------------------------------------------------------------------------
|mydest |driver_connect_timeout |15000 |
--------------------------------------------------------------------------------------------
|mydest |driver_ssl_protocol |TLS |
--------------------------------------------------------------------------------------------
|mydest |driver_consistency_level |QUORUM |
--------------------------------------------------------------------------------------------
|mydest |driver_used_hosts_per_remote_dc |0 |
--------------------------------------------------------------------------------------------
|mydest |driver_allow_remote_dcs_for_local_cl|false |
--------------------------------------------------------------------------------------------
|mydest |driver_compression |lz4 |
--------------------------------------------------------------------------------------------
|mydest |driver_connections |1 |
--------------------------------------------------------------------------------------------
|mydest |driver_ssl_cipher_suites |[TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,|
| | |, |
| | |TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, |
| | |, |
| | |TLS_RSA_WITH_AES_256_CBC_SHA256, |
| | |, |
| | |TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384, |
| | |, |
| | |TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384, |
| | |, |
| | |TLS_DHE_RSA_WITH_AES_256_CBC_SHA256, |
| | |, |
| | |TLS_DHE_DSS_WITH_AES_256_CBC_SHA256, |
| | |, |
| | |TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA, |
| | |, |
| | |TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, |
| | |, |
| | |TLS_RSA_WITH_AES_256_CBC_SHA, |
| | |, |
| | |TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA, |
| | |, |
| | |TLS_ECDH_RSA_WITH_AES_256_CBC_SHA, |
| | |, |
| | |TLS_DHE_RSA_WITH_AES_256_CBC_SHA, |
| | |, |
| | |TLS_DHE_DSS_WITH_AES_256_CBC_SHA, |
| | |, |
| | |TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256, |
| | |, |
| | |TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, |
| | |, |
| | |TLS_RSA_WITH_AES_128_CBC_SHA256, |
| | |, |
| | |TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256, |
| | |, |
| | |TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256, |
| | |, |
| | |TLS_DHE_RSA_WITH_AES_128_CBC_SHA256, |
| | |, |
| | |TLS_DHE_DSS_WITH_AES_128_CBC_SHA256, |
| | |, |
| | |TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, |
| | |, |
| | |TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, |
| | |, |
| | |TLS_RSA_WITH_AES_128_CBC_SHA, |
| | |, |
| | |TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, |
| | |, |
| | |TLS_ECDH_RSA_WITH_AES_128_CBC_SHA, |
| | |, |
| | |TLS_DHE_RSA_WITH_AES_128_CBC_SHA, |
| | |, |
| | |TLS_DHE_DSS_WITH_AES_128_CBC_SHA, |
| | |, |
| | |TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384, |
| | |, |
| | |TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256, |
| | |, |
| | |TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, |
| | |, |
| | |TLS_RSA_WITH_AES_256_GCM_SHA384, |
| | |, |
| | |TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384, |
| | |, |
| | |TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384, |
| | |, |
| | |TLS_DHE_RSA_WITH_AES_256_GCM_SHA384, |
| | |, |
| | |TLS_DHE_DSS_WITH_AES_256_GCM_SHA384, |
| | |, |
| | |TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, |
| | |, |
| | |TLS_RSA_WITH_AES_128_GCM_SHA256, |
| | |, |
| | |TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256, |
| | |, |
| | |TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256, |
| | |, |
| | |TLS_DHE_RSA_WITH_AES_128_GCM_SHA256, |
| | |, |
| | |TLS_DHE_DSS_WITH_AES_128_GCM_SHA256, |
| | |, |
| | |TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, |
| | |, |
| | |TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA, |
| | |, |
| | |SSL_RSA_WITH_3DES_EDE_CBC_SHA, |
| | |, |
| | |TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, |
| | |, |
| | |TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA, |
| | |, |
| | |SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, |
| | |, |
| | |SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, |
| | |, |
| | |TLS_ECDHE_ECDSA_WITH_RC4_128_SHA, |
| | |, |
| | |TLS_ECDHE_RSA_WITH_RC4_128_SHA, |
| | |, |
| | |SSL_RSA_WITH_RC4_128_SHA, |
| | |, |
| | |TLS_ECDH_ECDSA_WITH_RC4_128_SHA, |
| | |, |
| | |TLS_ECDH_RSA_WITH_RC4_128_SHA, |
| | |, |
| | |SSL_RSA_WITH_RC4_128_MD5, |
| | |, |
| | |TLS_EMPTY_RENEGOTIATION_INFO_SCSV] |
--------------------------------------------------------------------------------------------
|mydest |source_id |source1 |
--------------------------------------------------------------------------------------------
|mydest |transmission_enabled |true |
--------------------------------------------------------------------------------------------
レプリケーション・チャネルを作成する
レプリケーション・チャネルは、ソース・クラスターとデスティネーション・クラスター間のデータ変更に定義されているチャネルです。レプリケーション・チャネルは、ソース・クラスター、ソース・キースペース、ソース・テーブル名、デスティネーション・クラスター、デスティネーション・キースペース、およびデスティネーション・テーブル名によって定義されます。ソース・クラスターはマルチ・データ・センター・クラスターに含めることができますが、レプリケーション・チャネルは1つのデータ・センターがその処理を行うように構成します。デスティネーションのキースペースとテーブルにはソースと異なる名前を指定できますが、この例では同じ名前を使用しています。また、source-id
とsource-id-column
は、グローバル設定とは異なる値に設定することもできます。
dse advrep channel create --source-keyspace foo --source-table bar --source-id source1 --source-id-column source_id --destination mydest --destination-keyspace foo --destination-table bar --collection-enabled true --transmission-enabled true --priority 1
Created channel dc=Cassandra keyspace=foo table=bar to mydest
dse advrep channel status
------------------------------------------------------------------------------------------------------------------------------------------------------
|dc |keyspace|table |collecting|transmitting|replication order|priority|dest ks|dest table |src id |src id col|dest |dest enabled|
------------------------------------------------------------------------------------------------------------------------------------------------------
|Cassandra|foo |bar |true |true |FIFO |1 |foo |bar |source1|source_id |mydest|true |
------------------------------------------------------------------------------------------------------------------------------------------------------
警告: レプリケーション・チャネルの指定のキースペースでは、永続性のある書き込みが有効である必要があります。
durable_writes = false
の場合、エラー・メッセージが表示され、チャネルは作成されません。レプリケーション・チャネルの作成後に永続性のある書き込みが変更されると、コミット・ログにテーブルが書き込まれず、CDCは機能しません。データがレプリケーション・チャネルから取り込まれず、警告は記録されますが、障害が検出されません。ソースからデスティネーションへのレプリケーションを開始する
この時点で、レプリケーションが構成され、レプリケーション・チャネルは有効になっていて、レプリケーションが開始されています。
- デスティネーションで、cqlshを使用してデータが存在しないことを確認します。
SELECT * FROM foo.bar;
name | source_id | scalar | val ------+---------+--------+----- (0 rows)
- ソースでは、デスティネーションへのレプリケーションを一時停止または再開することができます。ここでは、再開する方法を示します。
dse advrep channel resume --source-keyspace foo --source-table bar --transmission
Channel dc=Cassandra keyspace=foo table=bar collection to mydest was resumed
--transmission
を指定してソースからデスティネーションへの送信を再開することも、--collection
を指定してソースでデータの収集を再開することもできます。 - レプリケーション・ログに記録されているレコードの数を確認します。まだデータが挿入されていないため、レプリケーション・ログのレコード数は0です。
dse advrep replog count --destination mydest --source-keyspace foo --source-table bar
0
ソースにデータを挿入する
デスティネーションにレプリケーションするためのデータをソースで挿入します。
- ソースで、cqlshを使用してデータを挿入します。
INSERT INTO foo.bar (name, val, scalar) VALUES ('a', '1', 1); INSERT INTO foo.bar (name, val, scalar) VALUES ('b', '2', 2);
- デスティネーションで、データがレプリケートされたことを確認します。
SELECT * FROM foo.bar;
name | source_id | scalar | val ------+---------+--------+----- a | source1 | 1 | 1 b | source1 | 2 | 2 (2 rows)
デスティネーションでデータを確認する
デスティネーションでデータを確認します。
- デスティネーションで、データがレプリケートされたことを確認します。
SELECT * FROM foo.bar;
name | source_id | scalar | val ------+---------+--------+----- a | source1 | 1 | 1 b | source1 | 2 | 2 (2 rows)
接続の切断をテストする
デスティネーションへの接続の切断をテストするには、デスティネーションでDataStax Enterpriseプロセスを停止し、ソースでさらにデータを挿入します。予想される結果は、デスティネーション・クラスターの再開後、ただちにデータがレプリケートされることです。
- デスティネーション・クラスターで、DataStax Enterpriseを停止します。
dse cassandra-stop
- ソースで、さらにデータを挿入します。
INSERT INTO foo.bar (name, val, scalar) VALUES ('c', '3', 3); INSERT INTO foo.bar (name, val, scalar) VALUES ('d', '4', 4);
- レプリケーション・ログに記録されているレコードの数を確認します。レプリケーション・ログには2つのエントリーがあります。
dse advrep replog count --destination mydest --source-keyspace foo --source-table bar
2
- デスティネーションで、DataStax Enterpriseを再起動します。
dse cassandra
通信とデータ・レプリケーションが再開され、新しいレコードがソースからデスティネーションにレプリケートされるのを待ちます。SELECT * FROM foo.bar;
name | source_id | scalar | val ------+---------+--------+----- a | source1 | 1 | 1 c | source1 | 3 | 3 d | source1 | 4 | 4 b | source1 | 2 | 2 4 rows(s)
- ソースで、レプリケーション・ログの数は0に戻ります。
dse advrep replog count --destination mydest --source-keyspace foo --source-table bar
0
レプリケーションの開始と停止をテストする
接続の切断をテストする場合と同様に、advrepコマンドライン・ツールを使用して個々のレプリケーション・チャネルの一時停止や再開を実行できます。予想される結果は、新しく挿入されたデータがレプリケーション・ログに保存されず、デスティネーションに送信されないことです。
- ソースで、レプリケーション・チャネルを一時停止します。
dse advrep --verbose channel pause --keyspace foo --table bar --collection
- さらにデータを挿入します。
- ソースで、レプリケーション・チャネルを再開します。
dse advrep --verbose channel resume --keyspace foo --table bar --collection