Couchbase Server 機能解説 XDCR (Xross Data Center Replication) 応用編

## XDCR (Xross Data Center Replication)概要

### XDCR (Xross Data Center Replication)とは何か？

XDCRは、Couchbase　Serverクラスター間でデータを複製するために使用されるテクノロジーです。
XDCRを使用すると、ベアメタル、VM、プライベートクラウド、パブリッククラウド、ハイブリッド、コンテナなどのプラットフォームに関係なく、任意のCouchbase Serverクラスター間でデータを複製できます。

### XDCRの特徴

XDCRは**非同期レプリケーションによる結果整合性**を介して、サイト間でデータの一貫性を維持します。

XDCRは、**クラスター内部の構成変更に対して透過的**に動作します。計画的ないし障害によるノードの追加・削除（トポロジー変更）発生時も、継続して動作し続け、マニュアルの対応は不要です。

**ネットワーク障害が発生した場合**、XDCRは**中断された場所からレプリケーションを再開**できます。

XDCRは**チェックポイント**を維持します。ネットワーク障害やソースクラスターのフェイルオーバーなどが原因でレプリケーションが中断されると、XDCRは最後のチェックポイントからレプリケーションを再開します。XDCRは、レプリケーションが成功するまで継続的に再試行します。

### Couchbase Server内部のXDCRのメカニズム

Couchbase　Serverは、**データベー・スチェンジ・プロトコル（DCP）**と呼ばれる独自のストリーミングプロトコルを持ち、順序付けられたキューを使用してデータの変更を通信します。XDCRはDCPのコンシューマーとして動作します。

XDCRは、**並列化**されています。レプリケーションキューの数は、帯域幅の可用性と必要なパフォーマンスに応じて、2〜100の間で調整できます。

XDCRは、**ノード間で処理を分散**します。XDCRワーカースレッドは**全てのDataサービスノードで稼働**しており、**ノード上の物理データ（vbucket）の変更を取得し、リモートクラスターの対応する物理データ（vbucket）を維持しているノードに変更を伝達**します。



## XDCR (Xross Data Center Replication)機能詳細

### 基本設定

#### 設定粒度

XDCRは、Couchbase Serverにおけるドキュメントの論理コンテナであるバケットのレベルで設定できます。

#### レプリケーション優先度

設定項目「Replication Priority」が、レプリケーションの作成および編集画面から設定可能です。変更は、CLI / RESTAPIを介して行うこともできます。

ユーザーはレプリケーションストリームに優先順位を割り当てます。選択肢は、`HIGH` 、`MEDIUM` 、または `LOW` です。 

新規に作成したレプリケーションでは、バケット内の既存のすべてのドキュメントをストリーミングする必要があるため、進行中のミューテーションよりも高いミューテーション率を示します。そのため、新規レプリケーションはより多くのリソースを使用し、その間に既存のレプリケーションのスループットに悪影響を与える場合があります。XDCRのレプリケーション優先度設定により、ユーザーは新規レプリケーションよりも進行中のレプリケーションを優先することができます。その場合、XDCRワーカースレッドへのリソースの割り当ては、指定された優先度に基づいて行われます。 


優先順位の割り当てによるリソース管理の更新は、レプリケーションの再起動などを行うことなく、将来いつでも変更できます。



##### レプリケーション優先度ユースケース

新しいレプリケーションを作成する際のシナリオを以下に検討します。
レプリケーションはバケット単位で設定されますが、同じバケットを複数のクラスターに対してレプリケーションを行うことができます。

`HIGH`：

この新規レプリケーションに対して、ソースバケット内のすべてのミューテーションがターゲットバケットにレプリケートされる期間（バックフィル期間）、最大のリソースが割り当てられます。これは、既存のレプリケーションのパフォーマンスに悪影響を与える可能性があります。

`HIGH`は、デフォルトの構成になります。既存のレプリケーションが `HIGH` であっても、バックフィル期間のリソース負荷に対して特別の調整が行われるわけではないため、上記のような影響関係が発生します。

これは、ユーザーが新規レプリケーションを追加し、そのクラスター（バケット）間の一貫性をできるだけ早く確保したいというユースケースで最適な設定です。


`MEDIUM`：

新規レプリケーションには、バックフィル期間中、最小限のリソースが与えられ、進行中のレプリケーションと同レベルになるまで、ゆっくりと追いつきます。レプリケーションがすべてキャッチされると、このレプリケーションストリームの優先度は自動的に `HIGH` に変更され、リソースの分散はすべての` HIGH` レプリケーションで均一になります。 

これは、高可用性とディザスタリカバリのユースケースに役立つ設定です。既存のレプリケーションに悪影響を与えたくない場合（そして新規レプリケーションのバックフィルが既存レプリケーションに追いつくのを待つ余裕がある場合）、これは最適な設定です（例えば、新たにバケットを追加した場合）。

`LOW`：

新規レプリケーションには、レプリケーションプロセス全体を通じて最小限のリソースが割り当てられます。バックフィル期間中およびバックフィル終了後の通常のレプリケーション期間を通じて、このストリームの優先度は低くなります。

これは、利用者がホットクラスターとコールドクラスターをセットアップする場合に便利な設定です。この場合、最小限のリソース割り当てでコールドクラスターのレプリケーションパフォーマンスを低下させることができます（例えば、レプリケーション先のクラスターが複数ある場合）。 


### 信頼性のための設定

#### チェックポイント

チェックポイント作成のインターバルを秒単位で指定します。この期間ごとに、XDCRは、ターゲットクラスターに正常にレプリケートされた各vBucketのシーケンス番号を含むチェックポイントを計算して永続化します。

デフォルト値は600です。最小値は60、最大値は14400です。

ユーザーがレプリケーションを停止・再開した場合、またはエラーから回復した場合は、チェックポイントドキュメントを使用してレプリケーションの開始点を決定します。間隔が短いほど、レプリケーションの再開時に必要な作業量が少なくなりますが、チェックポイント作成にはシステムリソースを使用するため、期間が短いほど、その影響を考慮する必要があります。

### ネットワーク帯域幅節約のための最適化設定

XDCRは、圧縮、ネットワークスロットリング（帯域幅使用制限）、オプティミスティックレプリケーションなどの機能を介して帯域幅を節約するために最適化されています。

#### オプティミスティックレプリケーション

オプティミスティックレプリケーションでは、しきい値を設けて、ドキュメントをレプリケートする方法をコントロールできます。

指定されたサイズよりも大きいドキュメントの場合、XDCRは、レプリケーションの前にソースクラスターで競合解決を実行するために、ターゲットクラスターからメタデータをフェッチします。小さいドキュメントの場合、XDCRは、ソースクラスターで競合解決を実行せずにドキュメントをターゲットクラスターに複製します（その結果、競合解決はターゲットクラスターでのみ実行されます）。

設定を低くすると、フェッチ数またはメタデータフェッチが増えるため、レイテンシが増加するリスクがあることに注意してください。ただし、必要な複製の数を減らすこともできます（ソースとターゲットがドキュメントの同一のコピーを持っているため）。設定を高くすると、メタデータフェッチの数が減るため、レプリケーション中の待ち時間が短くなります。ただし、レプリケーションレートが過度に上昇し、ネットワークまたはターゲットクラスターのいずれかが圧倒される可能性もあります。

#### ドキュメント圧縮サイズ

圧縮ドキュメントのサイズを0〜20MBの範囲でバイト単位で指定します。デフォルトは256バイトです。




**参考情報**

[Understanding Cross Datacenter Replication (XDCR) – Part 1](https://blog.couchbase.com/understanding-xdcr-part-1/)
[]()

[XDCR Advanced Settings](https://docs.couchbase.com/server/current/xdcr-reference/xdcr-advanced-settings.html)