DSE Advanced Replicationの使用

DSE Advanced Replicationの開始、停止、構成などの操作。

DSE Advanced Replicationの開始、停止、構成などの操作。

  1. DSE Advanced Replicationを開始する
  2. DSE Advanced Replicationを停止する
  3. グローバル設定を構成する
  4. チャネル設定を構成する
  5. ドライバーのパスワードを暗号化する
  6. データ挿入方法

DSE Advanced Replicationを開始する 

DSE Advanced Replicationを開始して使用する前に、エッジ・クラスターおよびハブ・クラスターに、ユーザーのキースペースおよびテーブルを作成する必要があります。

エッジ・クラスターのすべてのノードで、次のようにします。
  1. dse.yamlファイルで、レプリケーションを有効にします。
    ファイルの最後で、advanced_replication_optionsのすべてのエントリーのコメントを解除し、enabled: trueを設定します。
    # Advanced Replication configuration settings
    advanced_replication_options:
    enabled:true
  2. ローリング再起動を実行します。他のノードがオンラインで稼働し続けている状態で、エッジ・クラスターのノードを1つずつ再起動します。

DSE Advanced Replicationを無効にする 

レプリケーションが有効になっていない場合、データはレプリケーション・ログに書き込まれません。エッジ・クラスターのすべてのノードで、次のようにします。
  1. レプリケーションを無効にするために、dse.yamlファイルを編集します。
    advanced_replication_optionsセクションで、enabled: falseを設定します。
    # Advanced Replication configuration settings
    advanced_replication_options:
    enabled:false
  2. ローリング再起動を実行します。他のノードがオンラインで稼働し続けている状態で、エッジ・クラスターのノードを1つずつ再起動します。
  3. DSE Advanced Replication用に使用されたデータを消去するために、次のキースペースを削除します。
    cqlsh> drop table dse_system.advrep_conf;
    cqlsh> drop table dse_system.advrep_table_conf;
    cqlsh> drop keyspace advrep;

グローバル設定を構成する 

グローバル設定は、エッジ・クラスター全体に適用されます。これらのグローバル設定は、自動作成されるCQLテーブルdse_system.advrep_confに保存されます。

グローバル設定は、CQLテーブルに直接書き込むことにより、変更できます。例:
cqlsh>INSERT INTO dse_system.advrep_conf (conf_key, conf_val) 
VALUES ('edge_replication', 'true');
または、次の構文のdse advrepコマンドライン・ツールを使用してグローバル設定を変更することもできます。
dse advrep edge conf ...
認証情報を複数の方法で提供できます。「認証情報」を参照してください。

下の表は、構成キー、そのデフォルト値、および変更を認識するためにエッジ・ノードの再起動が必要かどうかを示します。グローバル設定を変更するには構成キーを使用します。 グローバル設定は、エッジ・クラスター全体に適用されます。これらのグローバル設定は、自動作成されるCQLテーブルdse_system.advrep_confに保存されます。

dse advrepコマンドライン・ツールは、これらの構成キーを、dse advrepコマンドライン・ツールのコマンド引数として使用します。
構成キー デフォルト値 説明 再起動の必要
hub-ip-addresses none 必須。Cassandraドライバーを使用してハブ・クラスターに接続するために使用する、IPアドレスのコンマ区切りリスト。 なし
hub-port none ハブ・クラスターのノードを接続する、デフォルト以外のポートを指定します。
デフォルト以外のポートを指定するには、次のようにします。
dse advrep edge conf --hub-port 9999
Set replication config hub_port from None to 9999
デフォルト以外のポートを削除するには、次のようにします。
dse advrep edge remove-conf --hub-port
あり
debug-output False レプリケーション・ログに関する内部デバッグ出力を印刷します。 なし
cql-refresh-row-limit      
driver-allow-remote-dcs-for-local-cl False 複数のデータ・センターを持つハブ・クラスターについて自動フェイルオーバーを有効にする場合、trueに設定します。driver-consistency-levelパラメーターの値は、LOCAL_ONEまたはLOCAL_QUORUMでなければなりません。 あり
driver-compression lz4 エッジからハブへのデータの送信のためにドライバーが使用する圧縮アルゴリズム。サポートされる値は、lz4およびsnappyです。 あり
driver-connect-timeout 15000 サーバーに接続するためにドライバーが待機する時間(ミリ秒)。 なし
driver-connections 32 Cassandraドライバーが作成する接続の数。 あり
driver-connections-max 256 Cassandraドライバーが作成する接続の最大数。 あり
driver-consistency-level ONE ハブへのデータのレプリケーションのための文を実行するときに、ドライバーが使用する整合性レベル。有効なCassandra整合性レベル、ANY、ONE、TWO、THREE、QUORUM、ALL、LOCAL_QUORUM、EACH_QUORUM、SERIAL、LOCAL_SERIAL、またはLOCAL_ONEを指定します。 なし
driver-local-dc なし 複数のデータ・センターを持つハブ・クラスターの場合、ローカルと見なすデータ・センターの名前を明示的に定義できます。通常は、エッジ・クラスターに最も近いデータ・センターです。この値は、複数のデータ・センターを持つクラスターにのみ使用されます。 あり
driver-pwd none 接続するために、ユーザーおよびパスワードがハブで必要な場合の、ドライバーのパスワード。
注: デフォルトでは、ドライバーのユーザー名およびパスワードはプレーン・テキストです。DataStaxでは、CQLテーブルに追加する前にドライバーのパスワードを暗号化することを推奨します。
あり
driver-read-timeout 15000 サーバーからの応答を読み取るためにドライバーが待機する時間(ミリ秒)。 なし
driver-used-hosts-per-remote-dc 0 複数のデータ・センターを持つハブ・クラスターについての自動フェイルオーバーを使用するには、データ・センター認識ラウンド・ロビン・ポリシー(DCAwareRoundRobinPolicy)が使用可能と見なす、リモート・データ・センターごとのホストの数を定義する必要があります。 あり
driver-user none 接続するために、ユーザーおよびパスワードがハブで必要な場合の、ドライバーのユーザー名。 あり
edge-id なし エッジ・クラスターおよびそのクラスターからのすべての挿入を識別します。edge-idの自動データ追加が発生するには、ハブのプライマリ・キーにもedge-idがあることが必要です。 なし
edge-id-col-name edge-id 更新の一環としてedge idを挿入するために、リモート・テーブルで使用するカラム。更新されているテーブルにこのカラムが存在しない場合、edge idの値は無視されます。 なし
edge-replication False trueである場合は、レプリケーションが開始します。falseでありレプリケーションが実行中である場合は、レプリケーションが停止します。レプリケーション・ログはそのまま残ります。 なし
invalid-message-log SYSTEM_LOG 無効なメッセージが破棄された場合に適用するロギング・ストラテジを以下のいずれかから選択します。

SYSTEM_LOG:CQLクエリーおよびエラー・メッセージを、ハブのシステム・ログに記録します。

TABLE_LOG:CQLクエリーおよびエラー・メッセージを、ハブのdse_advrep.advrep_invalid_messages_log Cassandraテーブルに保存します。

NONE:ロギングを実行しません。

無効なメッセージの管理」を参照してください。
なし
invalid-message-max-retries 15 無効なメッセージを破棄してレプリケーション・ログから削除するまでに、リトライする最大回数 なし
replication-log-audit-log-enabled false 監査ログを保存するかどうかを指定します。 あり
replication-log-audit-log-file /tmp/advrep_rl_audit.log 監査ログ・ファイルのファイル名プレフィックス・テンプレートを指定します。gzipを使用して圧縮した場合は、ファイル名に.gzが追加されます。 あり
replication-log-audit-log-file-gzipped true gzip圧縮を使用して監査ログ出力ファイルを圧縮する場合に指定します。 あり
replication-log-audit-log-file-rotate-time-max-lifespan-mins 0
監査ログ・ファイルの最大有効期間を指定します。周期的に、ログ・ファイルがローテートされたとき、次の場合に監査ログ・ファイルがパージされます。
  • replication-log-audit-log-fileテンプレートに一致する
  • 指定された最大有効期間を過ぎても書き込まれていない
パージを無効にする場合は、0に設定します。
あり
replication-log-audit-log-file-rotate-time-mins 60 監査ログ・ファイルをローテートする時間間隔を指定します。ローテーションでは、ローテートされたファイルに、[0]から始まって増加するログ・カウンター.[logcounter]が追加されます。ローテーションを無効にするには、0に設定します。 あり
replication-log-buckets 512:128:DAYS:1 メッセージが書き込まれるバケットの数量および可用性を定義します。

num_random_buckets:num_time_buckets:time_unit:num_time_unit

num_random_bucketsおよびnum_time_bucketsの値は、2の累乗に丸められます。

メッセージはレプリケーション・バケットに書き込まれます。バケットの行は、時間バケットにより決定されます。各バケットはtime_unit * num_time_unitです。一度に存在するバケットの数はnum_time_bucketsです。

メッセージは、メッセージの時刻に基づいてシーケンシャルに書き込まれます。1つの時間バケットには、特定の期間のメッセージを含めることができます。また、num_time_buckets * time_unit * num_time_unitより前の期間のメッセージを含めることもできます。

時間ベースの行では、バケットのクラスター化を最小化し、パフォーマンスを向上させ、エッジ・クラスターのノードへのバランスの取れた分散を維持するために、実際の時間バケットがランダムに選択されます。
なし
replication-max-permits 5000 レプリケーションに使用できる許可の最大数。 Cassandraドライバーに送信される同時操作の数の制限を許可します。メッセージをハブに送信する前に、許可を取得する必要があります。 あり
replication-min-permits 100 レプリケーションに使用できる許可の最小数。 あり
replication-permit-timeout-ms 2000 許可がない場合、許可を取得するためにレプリケーション・チャネルが待機する最大時間。スロー・トラックにより送信されるメッセージにのみ適用されます。 あり
replication-permits-tuning-delta-percentage 20 許可が再調整されるまでの時間間隔(ミリ秒)を指定します。 なし
replication-permits-tuning-window-ms 60000 許可が再調整されるまでの時間間隔(ミリ秒)を指定します。 なし
replication-timeouts-lower-bound-ratio 3 「タイムアウトした要求/要求総数」の割合がこの割合より小さい場合、使用可能な許可の数がデルタにより自動的に増加されます。 なし
replication-timeouts-upper-bound-ratio 15 「タイムアウトした要求/要求総数」の割合がこの割合より大きい場合、使用可能な許可の数がデルタにより自動的に減少されます。 なし
replog-consumer-buffer 100000 1つのノードがレプリケーション・ログから一度に読み取るメッセージの数。パフォーマンスを向上させるには、低いメモリー使用率、少ないレプリケーション・パフォーマンスとなるように、この構成値を減少させます。 あり
slow-track-min-bandwidth-percentage 10 スロー・トラックを使用してメッセージを送信するために使用できる許可の最小保証割合。 あり
エッジ・ノードの構成設定を表示するには、次のようにします。
dse advrep edge list-conf
次のように表示されます。
field            | value         
--------------------------------------------------
debug_output                      | true          
driver_connections                | 16            
replog_consumer_buffer            | 20000         
replication_log_audit_log_enabled | true          
rep_channel_permits               | 30000         
hub_ip_addresses                  | 10.200.241.156
remote_logging_ipaddress          | 10.200.164.72 
edge_replication                  | true          
driver_connections_max            | 256   

チャネル設定を構成する 

レプリケーション・チャネルは、エッジ・クラスターとハブ・クラスターとの間でデータを交換する、定義済みチャネル。です。各チャネル(一意のキースペースおよびテーブル)のレプリケーションは、自動作成されるCQLテーブルdse_system.advrep_table_confに保存されます。
CREATE TABLE dse_system.advrep_table_conf (
keyspace_name text,
table_name text,
edge_id text,
edge_id_col_name text,
enabled boolean,
hub_keyspace_name text,
hub_table_name text,
priority int,
truncate_timestamp timestamp,
PRIMARY KEY (keyspace_name, table_name)
)
変更する前に、チャネル構成を確認できます。例:
cqlsh> select * from dse_system.advrep_table_conf;
次のように表示されます。
keyspace_name | table_name | edge_id | edge_id_col_name | enabled | hub_keyspace_name | hub_table_name | ...
---------------+------------+---------+------------------+---------+-------------------+----------------+-...
foo            | bar        | null    | null             | True    | foo               | bar            | ...
(1 rows)
設定は、CQLテーブルに直接書き込むか、次の構文のdse advrepコマンドライン・ツールを使用して変更できます。
dse advrep edge channel ...
認証情報を複数の方法で提供できます。「認証情報」を参照してください。
プロパティはメタデータから継続的に読み取られるため、構成変更の完了後に再起動する必要はありません。次の表では、構成の設定について説明します。
カラム名 説明
keyspace-name レプリケートするテーブルのエッジにあるキースペース。
table-name レプリケートするエッジにあるテーブル名。
enabled trueに設定されている場合は、このテーブルのレプリケーションが開始します。falseに設定されている場合は、このテーブルからメッセージがレプリケーション・ログに保存されることはありません。
hub-keyspace-name レプリケートされるテーブルのハブにあるキースペース。
hub-table-name レプリケートされるテーブルのハブにあるテーブル名。
priority メッセージは優先順位DESCによりマークされます。
edge-id advrep_confメタデータで定義されるedge-idをオーバーライドするためのプレースホルダー。
edge-id-col-name advrep_confメタデータで定義されるedge-id-col-nameをオーバーライドするためのプレースホルダー。
truncate-timestamp このタイムスタンプより古い、このチャネルのレプリケーション・ログのデータのTRUNCATEを行います。TRUNCATEされたデータはレプリケートされません。
レプリケーション・チャネルを構成した後、チャネルのステータスを表示できます。
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
--------------------------------------------------------------------------------------------------------------------------------------
advrep        | loki       |         |                  | True    | advrep            | loki           | 2        | None              
advrep        | thor       |         |                  | True    | advrep            | thor           | 1        | None       

ドライバーのパスワードを暗号化する 

ドライバーのパスワードはCQLテーブルに保存されます。デフォルトでは、ドライバーのパスワードはプレーン・テキストです。DataStaxでは、CQLテーブルに追加する前にドライバーのパスワードを暗号化することを推奨します。SSTable 暗号化のための、システム・キーと呼ばれるグローバル暗号化キーが作成されます。エッジ・クラスターの各ノードには、同じシステム・キーが必要です。ハブにはこのキーは必要ありません。
  1. dse.yamlファイルで、次の操作を行います。
    • config_encryption_activeプロパティがfalseであることを確認します。
      config_encryption_active:false
    • conf_driver_password_encryption_enabledプロパティにより、ドライバーのパスワード暗号化を有効にします。
      conf_driver_password_encryption_enabled:true
    • system_key_directoryプロパティにより、システム・キーを保存するディスク上の場所を定義します。
      system_key_directory:/etc/dse/conf
      デフォルト値は/etc/dse/confです。
    • config_encryption_key_nameプロパティにより、暗号化キーがシステム・キーとして生成されることを指定します。
      config_encryption_key_name:system_key
  2. システム・キーを生成します。
    サーバー内:
    dsetool createsystemkey cipher strength system_key_file
    サーバー外:
    dsetool createsystemkey cipher strength system_key_file -kmip=kmip_groupname
    例:
    dsetool createsystemkey 'AES/ECB/PKCS5Padding' 128 system_key_file
    system_key_fileは、生成されたシステム・キー・ファイルの一意のファイル名です。createsystemkeyを参照してください。

    結果: グローバル暗号化キーは、dse.yamlファイルのsystem_key_directoryで指定されている場所に作成できます。このデフォルトのグローバル暗号化キーは、system_key_fileサブプロパティが指定されていない場合に使用されます。

  3. 返された値をコピーします。
  4. エッジ・クラスターの任意のノードでdseコマンドを使用し、DSE Advanced Replication環境用に暗号化されたパスワードを設定します。
    dse advrep edge conf --driver-pwd "Sa9xOVaym7bddjXUT/eeOQ==" --driver-user "username"
  5. dse.yamlで、conf_driver_password_encryption_enabledプロパティをtrueに設定します。
    conf_driver_password_encryption_enabled:true
  6. dseを起動します

データ挿入方法 

DataStax Enterpriseクラスターにデータを挿入するにはいくつかの方法があります。DSE Advanced ReplicationはCassandraトリガーに依存しているため、通常のパスによるデータ挿入がサポートされています。Cassandraトリガーを使用しない方法では、データ・レプリケーションは発生しません。

サポートされるデータ挿入方法は次のとおりです。
  • CQLの挿入(cqlsh、標準的なCassandraドライバーを使用するアプリケーションを含む)
  • CSVファイルからのコピー
  • Solr HTTPまたはCQL
  • Spark saveToCassandra
サポートされないデータ挿入方法は次のとおりです。
  • コンパクト・ストレージ用に定義されたテーブル
  • Sstableloader(Cassandraバルク・ローダー
  • バックアップからのOpsCenter復元
  • Spark bulkSaveToCassandra
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