MSE Sync は、Nacos、ZooKeeper、Eureka、Consul などのレジストリ間でサービスデータと構成データを同期します。オープンソースの NacosSync プロジェクトをベースに構築された MSE Sync は、双方向同期、自動サービスディスカバリ、ワンクリックでのフルサービス同期をサポートしており、セルフマネージドレジストリから Microservices Engine (MSE) インスタンスへのスムーズな移行を可能にします。
仕組み
MSE Sync は、ソースレジストリとターゲット MSE インスタンス間のブリッジとして機能します。移行中、サービス登録データを継続的に同期するため、両方のレジストリが同一の情報を提供します。どちらかのレジストリに接続されたアプリケーションは、もう一方のレジストリに登録されたサービスをディスカバリできるため、アプリケーションを段階的に移行できます。
次の図では、pub はサービスパブリッシャーを表し、sub はサービスサブスクライバーを表します。

MSE Sync は、高可用性のためにマルチインスタンスデプロイメントアーキテクチャを使用します。いずれかのノードで障害が発生した場合、正常なノードはスケジュールされたリカバリタスクを実行して、障害が発生したノードの同期作業を引き継ぎます。

基本概念
| 概念 | 説明 |
|---|---|
| クラスター | MSE Sync 構成で定義されたソースまたはターゲットレジストリインスタンス。各クラスターには、一意の名前、タイプ (Nacos、ZooKeeper、Eureka、または Consul)、および1つ以上の接続エンドポイントがあります。 |
| タスク | ソースクラスターから宛先クラスターにデータを移動する同期ジョブ。各タスクは、同期タイプ、方向、およびオプションのサービス名フィルターを指定します。 |
| 同期タイプ | 同期されるデータを決定します。Service はサービス登録データを同期します。Config は構成データ (Nacos および ZooKeeper のみ) を同期します。All は、ソースクラスタータイプに基づいてサービス同期タスクと構成同期タスクの両方を作成します。 |
| 同期モード | Unidirectional は、ネイティブに登録されたサービスデータをソースからターゲットにコピーします。Bidirectional は、ネイティブに登録されたサービスデータを両方向に同期します。 |
サポートされている移行パス
MSE Sync は、ZooKeeper、Nacos、Eureka、および Consul のサービス登録ロジックと互換性があります。

| ソースレジストリ | ターゲットレジストリ | 同期される内容 |
|---|---|---|
| Nacos | Nacos | ネイティブ Nacos サービスデータ |
| ZooKeeper | ZooKeeper | サービスと永続構成 |
| Eureka | Nacos | ネイティブ Eureka サービスデータ |
| Consul | Nacos | ネイティブ Consul サービスデータ (正常なインスタンスのみ) |
ZooKeeper
ソースクラスターとターゲットクラスターの両方で同じ Znode を同時に変更しないでください。同時書き込みは、移行中にデータ損失を引き起こす可能性があります。構成同期を使用してサービスまたはエフェメラルノードを同期しないでください。
永続ノードを同期する場合、MSE Sync は各 Znode のソースクラスターに監視を登録します。ソースクラスターに多数のノードが含まれている場合、これにより多数の監視が作成され、大量のメモリを消費します。ソースクラスターの Znode 数とリソースが、MSE Sync からの追加の監視リスナーを処理できることを確認してください。
Eureka から Nacos
Eureka は、デフォルトでサービス名を大文字で登録します (例: SERVICE-1)。MSE Sync は、Nacos に同期する際にこれらの名前を小文字に変換します (例: service-1)。
この変換は、大文字と小文字が混在する名前で相互運用性の問題を引き起こす可能性があります。たとえば、Service-1 という名前のサービスが同期された service-1 と並行して Nacos に直接登録されている場合、Nacos はそれらを2つの別個のサービスとして扱います。1つの名前で登録されたインスタンスは、もう一方の名前で登録されたインスタンスをディスカバリできません。
この問題を回避するには、移行を開始する前にすべてのサービス名を小文字に標準化してください。
Consul から Nacos
MSE Sync は、Consul からの正常なインスタンス情報のみを同期します。メタデータの変更は自動的に検出または同期されません。Consul 構成データはサポートされていません。
ステップ 1: MSE Sync のデプロイ
デプロイする前に、以下を確認してください。
MSE Sync デプロイメント環境が、ソースレジストリとターゲットレジストリの両方へのネットワーク接続を持っていること (例: MSE Sync を同じ Virtual Private Cloud (VPC) にデプロイするか、両方のクラスターへのパブリックインターネットアクセスがあることを確認してください)
(MySQL を使用する場合) 読み取りおよび書き込み権限を持つデータベースとユーザーアカウントを備えた MySQL サービスが利用可能であること
MSE Sync は、ソースレジストリとターゲットレジストリの両方に接続する必要があります。両方に到達できない場合、移行は失敗します。
ストレージバックエンドの選択
MSE Sync は、2つのストレージバックエンドをサポートしています。
| バックエンド | 使用条件 | マルチインスタンスサポート |
|---|---|---|
| MySQL (マルチインスタンスデプロイメントに必須) | 高可用性のために複数の MSE Sync インスタンスを実行する場合 | はい -- 複数のインスタンスが1つの MySQL データベースを共有します |
| 組み込み Derby | テストまたはシングルノードデプロイメントの場合 | いいえ -- 単一マシンのみ |
MSE Sync は、環境変数に基づいてバックエンドを自動的に選択します。MYSQL_URL、MYSQL_USER_NAME、および MYSQL_PASSWORD がすべて設定されている場合、MSE Sync は MySQL に接続します。それ以外の場合、組み込み Derby データベースを使用します。
| 変数 | 説明 | 例 |
|---|---|---|
MYSQL_URL | MySQL 接続文字列 | jdbc:mysql://localhost:3306/sync |
MYSQL_USER_NAME | 読み取りおよび書き込み権限を持つユーザー名 | -- |
MYSQL_PASSWORD | アカウントのパスワード | -- |
JVM パラメーターの構成
JAVA_OPT 変数を使用して、conf/java.env ファイルに JVM パラメーターを追加します。
JAVA_OPT="$JAVA_OPT -Xms2048m -Xmx2048m"Kubernetes へのデプロイ
次の構成を
mse-sync-deployment.yamlとして保存します。MySQL 接続の詳細を置き換え、必要に応じてreplicasを調整します。説明MSE Sync Web UI にアクセスするには、ポート 8000 にトラフィックをルーティングする Kubernetes Service を作成してください。
apiVersion: apps/v1 kind: Deployment metadata: labels: app.kubernetes.io/name: mse-sync name: mse-sync-svc spec: replicas: 3 selector: matchLabels: app.kubernetes.io/name: mse-sync template: metadata: labels: app.kubernetes.io/name: mse-sync spec: containers: - name: mse-sync image: msecrinstance-registry.cn-hangzhou.cr.aliyuncs.com/mse-demo/mse-sync:latest ports: - containerPort: 8000 env: - name: MYSQL_URL value: "jdbc:mysql://192.xx.xx.xx:3306/sync" - name: MYSQL_USER_NAME value: "mse-sync" - name: MYSQL_PASSWORD value: passwordMSE Sync をデプロイします。
kubectl apply -f mse-sync-deployment.yaml
Elastic Compute Service (ECS) へのデプロイ
MSE Sync バイナリをダウンロードします。
curl https://msesync.oss-cn-hangzhou.aliyuncs.com/MseSync.zip --output msesync.zipパッケージを抽出します。
unzip ./msesync.zip(オプション) MySQL を使用している場合は、データベース環境変数を設定します。
export MYSQL_URL="" export MYSQL_USER_NAME="" export MYSQL_PASSWORD=""MSE Sync を開始します。
./MseSync/bin/startup.sh start
ステップ 2: クラスターと同期タスクの構成
MSE Sync は、3つの構成メソッドをサポートしています。
| メソッド | 最適な用途 | 詳細 |
|---|---|---|
| 構成ファイル (推奨) | 自動化された大規模な移行 | YAML でクラスターとタスクを定義し、CLI 経由でインポートするか、起動時に自動ロードします。 |
| Web UI | アドホックまたは小規模な移行 | ブラウザベースのインターフェイスを介して構成をインポートします。 |
| MSE コンソール | 初期構成ファイルの生成 | Cloud Migration ページは、YAML 構成ファイルを自動生成します。 |
オプション A: YAML ファイルでの構成
構成ファイルには、clusters (レジストリ接続の詳細) と tasks (同期ジョブ) の2つのセクションが含まれています。
次の例は、ソースクラスターの public および test 名前空間から宛先クラスターへのすべてのサービスを、双方向同期を使用して同期します。
clusters:
- clusterName: src
connectKeyList:
- mse-xxxxx-nacos-ans.mse.aliyuncs.com:8848
clusterType: NACOS
namespace: public,test
- clusterName: dst
connectKeyList:
- mse-xxxxxx-nacos-ans.mse.aliyuncs.com:8848
clusterType: NACOS
tasks:
- source: src
destination: dst
type: Service
mode: Bidirectional
serviceMatchPattern: ".*"
autoScanAndAddService: trueCLI を使用して構成をインポートします。
./bin/msesyncCMD.sh apply -f {path_to_configuration_file}または、ファイルを MseSync/conf/config.yaml に配置します。MSE Sync は起動時に自動的にロードします。
構成ファイルをインポートすると、新しく追加されたサービスは自動的にディスカバリおよび同期されます。
オプション B: Web UI を介した構成
MSE Sync Web インターフェイスを開きます。
左側のナビゲーションウィンドウで、[サービス同期] をクリックします。
[設定のインポート] をクリックします。
[構成のインポート] ダイアログボックスで、YAML 構成を貼り付け、[OK] をクリックします。
構成リファレンス
クラスターフィールド
| フィールド | 説明 | 例 |
|---|---|---|
clusterName | クラスターの一意の名前。一度設定すると、この値は変更しないでください。 | sourceCluster |
clusterType | レジストリタイプ: NACOS、ZOOKEEPER、EUREKA、または CONSUL | NACOS |
namespace | Nacos 名前空間名。複数の名前空間をコンマで区切ります。ソースクラスターで空白のままにした場合、すべての名前空間のデータが同期されます。 | public,test |
connectKeyList | クラスターの接続エンドポイントのリスト。 | 以下の例を参照 |
userName | Nacos ユーザー名 (認証が有効になっている場合)。 | -- |
password | Nacos パスワード (認証が有効になっている場合)。 | -- |
ak | クラウド MSE Nacos インスタンスを認証するための AccessKey ID。 | LTAI5***dXai6 |
sk | クラウド MSE Nacos インスタンスを認証するための AccessKey Secret。 | Jdvdj***6vs7wBEKO |
connectKeyList の例:
connectKeyList:
- localhost:8848
- localhost1:8848タスクフィールド
| フィールド | 説明 | デフォルト |
|---|---|---|
source | ソースクラスターの名前 (clusters セクションの clusterName と一致する必要があります)。 | -- |
destination | ターゲットクラスターの名前。ターゲット名前空間はソースと自動的に一貫性が保たれます。ターゲットに名前空間が存在しない場合、MSE Sync が作成します。 | -- |
type | 同期タイプ: Service (サービスデータ)、Config (構成データ、Nacos および ZooKeeper のみ)、または All (両方)。 | -- |
mode | 同期方向: Unidirectional (ソースからターゲットのみ) または Bidirectional (両方向)。 | -- |
serviceMatchPattern | 同期するサービスをフィルターするための正規表現。 | .* (すべてのサービス) |
autoScanAndAddService | ソースクラスターに追加された新しいサービスを自動的にディスカバリおよび同期します。 | true |
マルチインスタンスデプロイメント
本番環境では、共有 MySQL データベースによってバックアップされた複数の MSE Sync インスタンスをデプロイします。いずれかのノードで障害が発生した場合、残りの正常なノードはスケジュールされたタスクを通じて障害を検出し、障害が発生したノードの同期作業を引き継ぎます。
リカバリスキャン間隔
リカバリスキャン間隔は、正常なノードが障害が発生したノードをチェックする頻度を制御します。JAVA_OPT 環境変数を通じて設定される次の Java 仮想マシン (JVM) パラメーターで構成します。
-Dmsesync.daemon.refresh.interval=60 // 単位: 秒例:
JAVA_OPT="$JAVA_OPT -Dmsesync.daemon.refresh.interval=10"デフォルトの間隔は 60 秒です。低く設定しすぎないでください。短い間隔は、サーバーと MSE Sync ノードの両方の負荷を増加させます。推奨される最小値は 10 秒です。クラスターの負荷と同期ボリュームに基づいて調整してください。
構成同期タスクにはマルチインスタンスデプロイメントを使用しないでください。
ノード障害から次のスケジュールされたリカバリスキャンまでの間隔中、クライアントのインスタンスリストは一時的に空になる場合があります。
注意事項
双方向同期とオフラインステータス: 双方向同期中に、サービスプロバイダーがターゲットインスタンスのコンソールからオフラインにされた場合、オフラインステータスはソースインスタンスに伝播されません。
クラスター名の不変性:
clusterNameが構成で設定されると、変更しないでください。変更すると、再起動後に同期タスクが再開できなくなる可能性があります。
よくある質問
UI または YAML ファイルを介して同期タスクを追加しましたが、タスクリストに表示されません。
ソースクラスターの名前空間にサービスが存在することを確認してください。MSE Sync は、ディスカバリできるサービスに対してのみ同期タスクを作成します。以下を確認してください。
クラスター接続の詳細が正しいこと (エンドポイント、認証情報)。
名前空間 ID がソースクラスターの既存の名前空間と一致すること。
指定された名前空間に少なくとも1つのサービスインスタンス (サービスプロバイダー) が登録されていること。
双方向同期中に、ターゲットコンソールからサービスプロバイダーをオフラインにしても、ソースに同期されません。
これは予期される動作です。ターゲットインスタンスのコンソールを通じて設定されたオフラインステータスは、ソースインスタンスに同期されません。
追加の YAML 構成フィールドの説明
Clusters フィールド:
フィールド
説明
例の値
namespace
Nacos 名前空間名。
注: 複数の名前空間をコンマで区切って入力できます。このフィールドが空白のままで、インスタンスが同期ソースである場合、インスタンス内のすべての名前空間のデータが同期されます。
public
test
test1
ak
クラウド MSE Nacos インスタンスを認証するための AccessKey。
LTAI5***********dXai6
sk
クラウド MSE Nacos インスタンスを認証するための AccessKey Secret。
Jdvdj*************6vs7wBEKO