すべてのプロダクト
Search
ドキュメントセンター

Microservices Engine:MSE Sync を使用したサービスレジストリの移行

最終更新日:Mar 01, 2026

MSE Sync は、Nacos、ZooKeeper、Eureka、Consul などのレジストリ間でサービスデータと構成データを同期します。オープンソースの NacosSync プロジェクトをベースに構築された MSE Sync は、双方向同期、自動サービスディスカバリ、ワンクリックでのフルサービス同期をサポートしており、セルフマネージドレジストリから Microservices Engine (MSE) インスタンスへのスムーズな移行を可能にします。

仕組み

MSE Sync は、ソースレジストリとターゲット MSE インスタンス間のブリッジとして機能します。移行中、サービス登録データを継続的に同期するため、両方のレジストリが同一の情報を提供します。どちらかのレジストリに接続されたアプリケーションは、もう一方のレジストリに登録されたサービスをディスカバリできるため、アプリケーションを段階的に移行できます。

次の図では、pub はサービスパブリッシャーを表し、sub はサービスサブスクライバーを表します。

Smooth migration

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

Multi-instance deployment

基本概念

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

サポートされている移行パス

MSE Sync は、ZooKeeper、Nacos、Eureka、および Consul のサービス登録ロジックと互換性があります。

Supported registry types
ソースレジストリターゲットレジストリ同期される内容
NacosNacosネイティブ Nacos サービスデータ
ZooKeeperZooKeeperサービスと永続構成
EurekaNacosネイティブ Eureka サービスデータ
ConsulNacosネイティブ 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_URLMYSQL_USER_NAME、および MYSQL_PASSWORD がすべて設定されている場合、MSE Sync は MySQL に接続します。それ以外の場合、組み込み Derby データベースを使用します。

変数説明
MYSQL_URLMySQL 接続文字列jdbc:mysql://localhost:3306/sync
MYSQL_USER_NAME読み取りおよび書き込み権限を持つユーザー名--
MYSQL_PASSWORDアカウントのパスワード--

JVM パラメーターの構成

JAVA_OPT 変数を使用して、conf/java.env ファイルに JVM パラメーターを追加します。

JAVA_OPT="$JAVA_OPT -Xms2048m -Xmx2048m"

Kubernetes へのデプロイ

  1. 次の構成を 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: password
  2. MSE Sync をデプロイします。

    kubectl apply -f mse-sync-deployment.yaml

Elastic Compute Service (ECS) へのデプロイ

  1. MSE Sync バイナリをダウンロードします。

    curl https://msesync.oss-cn-hangzhou.aliyuncs.com/MseSync.zip --output msesync.zip
  2. パッケージを抽出します。

    unzip ./msesync.zip
  3. (オプション) MySQL を使用している場合は、データベース環境変数を設定します。

    export MYSQL_URL=""
    export MYSQL_USER_NAME=""
    export MYSQL_PASSWORD=""
  4. 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: true

CLI を使用して構成をインポートします。

./bin/msesyncCMD.sh apply -f {path_to_configuration_file}

または、ファイルを MseSync/conf/config.yaml に配置します。MSE Sync は起動時に自動的にロードします。

説明

構成ファイルをインポートすると、新しく追加されたサービスは自動的にディスカバリおよび同期されます。

オプション B: Web UI を介した構成

  1. MSE Sync Web インターフェイスを開きます。

  2. 左側のナビゲーションウィンドウで、[サービス同期] をクリックします。

  3. [設定のインポート] をクリックします。

  4. [構成のインポート] ダイアログボックスで、YAML 構成を貼り付け、[OK] をクリックします。

構成リファレンス

クラスターフィールド

フィールド説明
clusterNameクラスターの一意の名前。一度設定すると、この値は変更しないでください。sourceCluster
clusterTypeレジストリタイプ: NACOSZOOKEEPEREUREKA、または CONSULNACOS
namespaceNacos 名前空間名。複数の名前空間をコンマで区切ります。ソースクラスターで空白のままにした場合、すべての名前空間のデータが同期されます。public,test
connectKeyListクラスターの接続エンドポイントのリスト。以下の例を参照
userNameNacos ユーザー名 (認証が有効になっている場合)。--
passwordNacos パスワード (認証が有効になっている場合)。--
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 は、ディスカバリできるサービスに対してのみ同期タスクを作成します。以下を確認してください。

  1. クラスター接続の詳細が正しいこと (エンドポイント、認証情報)。

  2. 名前空間 ID がソースクラスターの既存の名前空間と一致すること。

  3. 指定された名前空間に少なくとも1つのサービスインスタンス (サービスプロバイダー) が登録されていること。

双方向同期中に、ターゲットコンソールからサービスプロバイダーをオフラインにしても、ソースに同期されません。

これは予期される動作です。ターゲットインスタンスのコンソールを通じて設定されたオフラインステータスは、ソースインスタンスに同期されません。

追加の YAML 構成フィールドの説明

  • Clusters フィールド:

    フィールド

    説明

    例の値

    namespace

    Nacos 名前空間名。

    注: 複数の名前空間をコンマで区切って入力できます。このフィールドが空白のままで、インスタンスが同期ソースである場合、インスタンス内のすべての名前空間のデータが同期されます。

    • public

    • test

    • test1

    ak

    クラウド MSE Nacos インスタンスを認証するための AccessKey。

    LTAI5***********dXai6

    sk

    クラウド MSE Nacos インスタンスを認証するための AccessKey Secret。

    Jdvdj*************6vs7wBEKO