全部產品
Search
文件中心

Microservices Engine:MSE Sync遷移方案

更新時間:Nov 22, 2025

MSE Sync是一款基於開源Nacos Sync專案深度定製和最佳化的資料同步工具,不僅具備雙向資料同步能力,還整合了自動服務發現與一鍵全量同步服務等高效功能。通過採用多執行個體部署架構,實現了進階別的容災備份機制,適用於在Nacos、Zookeeper以及Eureka等組態管理平台之間進行平滑遷移的需求情境。

MSE Sync遷移介紹

MSE Sync遷移優勢

  • 可平滑遷移

    在遷移過程中,MSE Sync能使源叢集的服務資訊和MSE雲上產品的服務資訊保持同步,從而實現自建配置註冊中心和MSE產品之間的平滑遷移。

    圖片中的pub指服務發行者,sub指服務訂閱者。平滑遷移

  • 可多執行個體部署

    在服務同步的模式下支援多執行個體部署。多執行個體部署

    同步工具通過定時任務補償宕機節點同步的資料。在節點宕機之後,正常節點會通過定時任務補償因節點宕機丟失的資料。在節點宕機到定時任務執行之間的時間,用戶端會有短時的執行個體列表為空白的情況,定時任務的時間間隔可以通過以下參數進行配置。此參數為JVM參數,可以通過JAVA_OPT環境變數進行指定。

    -Dmsesync.daemon.refresh.interval=60 // 單位為秒

    樣本如下。

    JAVA_OPT="$JAVA_OPT -Dmsesync.deamon.refresh.interval=10"
    重要
    • 定時任務時間間隔預設為60秒,掃描間隔不宜設定過短,否則會造成服務端和同步節點壓力過大。具體時間設定需要根據叢集負載和同步工具負載確定,建議值不要小於10秒。

    • 請勿在同步配置時進行多執行個體部署。

  • 操作簡易

    MSE Sync適配Zookeeper、Nacos和Eureka的服務註冊邏輯,能夠實現Zookeeper到Zookeeper、Zookeeper到Nacos、Nacos到Nacos和Eureka到Nacos的服務資訊同步,並且支援從Zookeeper、Nacos和Eureka中自動擷取服務資訊,一鍵全選避免繁瑣操作。適配註冊邏輯

支援的註冊中心類型

MSE Sync支援的同步執行個體類型如下。

原註冊中心類型

目標註冊中心類型

同步支援說明

Nacos

Nacos

Nacos原生服務類型。

ZooKeeper

ZooKeeper

服務和持久化配置。

重要
  1. 使用MSE Sync遷移工具對ZooKeeper的資料節點進行同步時,源叢集和目的地組群不支援同時變更同一個Znode,否則寫入的資料在遷移過程中可能會丟失。請勿使用配置同步方式進行服務及臨時節點(ephemeral節點)同步。

  2. 同步工具同步持久化節點會向源叢集註冊watch,每一個Znode都會註冊一個watch,因此在源叢集節點較多時,同步會建立大量watch,會佔用源叢集過多記憶體,請確保源叢集Znode數量以及叢集配置是否支援同步工具進行變更監聽。

Eureka

Nacos

Eureka原生服務類型。

此同步執行個體類型需要將Nacos註冊的服務名小寫。因為Eureka預設註冊的服務名為大寫,但通過同步工具MSE Sync將服務同步到Nacos時,預設會將服務名轉換成小寫。如果原服務名中有大寫字母,同步到Nacos的服務可能不互連。

例如,服務Service-1註冊到Eureka的服務名是SERVICE-1,通過MSE Sync同步到Nacos的服務名是service-1,如果用戶端使用nacosSDK之後註冊到Nacos的服務名是Service-1,那麼service-1和Service-1在Nacos中其實是兩個服務,即服務中的執行個體資訊不互連,Nacos註冊的執行個體無法發現註冊到MSE Sync同步到Nacos上的執行個體。若將所有的服務名改成小寫,MSE Sync會將從Eureka同步的服務名轉化成小寫,這樣兩側服務就能夠互連了。

Consul

Nacos

Consul原生服務類型。

工具只同步健康的執行個體資訊,元資訊的變化同步工具目前不感知,因此元資訊的變化不會被自動同步,並且目前同步工具不支援Consul配置資訊的同步。

步驟一:部署MSE Sync遷移工具

重要

遷移工具需要串連到自建叢集和MSE叢集。請務必確保遷移工具部署在能夠訪問自建叢集以及MSE叢集的網路環境中(同一VPC內或者能夠通過公網訪問自建叢集和MSE叢集),否則會導致遷移失敗。

部署模式

  • 依賴MySQL部署

    需要自行構建MySQL服務, 並建立具有讀寫權限的MSE Sync帳號和資料庫,通過環境變數傳入MySQL的URL、使用者名稱和密碼。多個MSE Sync可共用一個MySQL服務。

  • 依賴Derby部署

    MSE Sync支援內嵌Derby資料庫,可單機啟動。

環境變數

  • 資料庫相關環境變數

    MSE Sync通過環境變數自動判斷使用MySQL還是Derby依賴啟動,當MYSQL_URLMYSQL_USER_NAMEMYSQL_PASSWORD這幾個環境變數的取值都不為空白時,MSE Sync才會通過給定環境串連MySQL服務啟動,其他情況下都通過依賴內嵌Derby資料庫進行啟動。

    環境變數名

    描述

    舉例

    MYSQL_URL

    MySQL的串連串。

    jdbc:mysql://localhost:3306/sync

    MYSQL_USER_NAME

    MSE Sync具有讀寫權限的賬戶使用者名稱。

    MYSQL_PASSWORD

    MYSQL_USER_NAME對應的密碼。

  • JVM相關環境變數

    在conf檔案夾下的java.env檔案中,通過JAVA_OPT變數添加JVM 參數。

    例如,通過代碼設定JVM堆記憶體大小,JAVA_OPT="$JAVA_OPT -Xms2048m -Xmx2048m"

部署方式

  • K8s部署

    1. 修改以下配置的MySQL使用者名稱、密碼和replicas等參數,儲存設定檔為mse-sync-deployment.yaml

      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
      說明

      如果需要訪問MSE Sync UI,需要添加一個Service指向MSE Sync的8000連接埠。

    2. 執行以下命令,部署MSE Sync。

      kubectl apply -f mse-sync-deployment.yaml
  • ECS部署

    1. 下載MSE Sync的二進位包。

      curl https://msesync.oss-cn-hangzhou.aliyuncs.com/MseSync.zip --output msesync.zip
    2. 解壓二進位包,並進入MSE Sync的根目錄。

      unzip ./msesync.zip
    3. 可選:如需依賴MySQL,需要配置如下環境變數。

      export MYSQL_URL=""
      export MYSQL_USER_NAME=""
      export MYSQL_PASSWORD=""
    4. 啟動應用。

      ./MseSync/bin/startup.sh start

步驟二:配置叢集資訊和遷移任務

MSE Sync可以通過UI配置遷移任務,也可以通過設定檔的形式構建遷移任務。

  • 通過UI遷移任務

    開啟MSE Sync工具,在左側導覽列,單擊服務同步,然後單擊匯入配置,在匯入配置對話方塊,輸入配置內容,單擊確定,完成配置匯入。

  • 通過設定檔遷移任務

    1. 建立設定檔。本文提供如下YAML樣本,自動同步src叢集public、test兩個命名空間的所有服務到dst叢集中,同步類型為服務資訊同步,同步模式為雙向同步。

      配置項主要包含兩個欄位,即clusterstasks,分別描述叢集和同步任務資訊。clusterstasks欄位說明,請參見配置欄位

      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
    2. 執行以下命令匯入配置。

      ./bin/msesyncCMD.sh apply -f {設定檔的路徑}
    3. 將設定檔掛載或者放置在MseSync/conf/config.yaml,並啟動MSE Sync。MSE Sync啟動會自動初始化設定檔,進行資料移轉。

    說明
    • 設定檔可通過在MSE控制台的遷移上雲頁面配置遷移任務而自動產生。

    • 通過配置匯入的方式進行的同步功能,將實現對新增服務的自動同步。

配置欄位

以下內容為List類型的clusterstasks欄位說明。

Clusters欄位說明

欄位

說明

取值舉例

clusterName

叢集名稱。

說明

配置中的叢集名不可重複。

sourceCluster

clusterType

叢集類型。

  • NACOS

  • ZOOKEEPER

  • EUREKA

  • CONSUL

namespace

Nacos namespace名稱。

說明

可以輸入多個,使用英文逗號分隔。

  • public

  • test

  • test1

connectKeyList

叢集的接入Endpoint,類型為List。

connectKeyList:
- localhost:8848
- localhost1:8848

userName

Nacos使用者名稱。

password

Nacos密碼。

Tasks欄位說明

欄位

說明

取值舉例

source

源叢集名。

無。

destination

目的地組群名。

目的地組群的命名空間自動和源叢集保持一致,如果目的地組群中不存在對應的命名空間,MSE Sync會自動建立。

type

同步類型。

  • Service(服務同步)。

  • Config(配置同步,支援Nacos和ZooKeeper進行配置同步)。

  • All(根據原叢集類型自動建立服務和配置同步任務)。

mode

同步模式。

  • Unidirectional (單向同步):只會將原生註冊的服務資訊從源叢集同步到目的地組群。

  • Bidirectional(雙向同步):能夠實現源叢集和目的地組群之間原生註冊的服務資訊的雙向同步。

serviceMatchPattern

需要同步的服務的正則匹配運算式。

預設同步所有服務。

autoScanAndAddService

是否自動掃描並同步源叢集中新增加的服務。

預設為True。

常見問題

通過UI介面或YAML設定檔成功添加同步任務,但在工作清單中沒有顯示任務。

  • 原因:MSESync未找到服務,可能由於源叢集的命名空間下沒有服務、命名空間ID填寫錯誤等原因造成。建議您檢查相關叢集的配置資訊是否有誤,以及對應的命名空間下是否存在服務執行個體(服務提供者)。

雙向同步服務時下線服務提供者的注意事項。

  • 雙向同步時,若從同步目標的執行個體控制台對服務提供者進行下線處理,該狀態不會同步至源執行個體內。

YAML額外配置欄位說明

  • Clusters欄位:

    欄位

    說明

    取值舉例

    namespace

    Nacos namespace名稱。

    說明:可以輸入多個,使用英文逗號分隔。若留空且執行個體為同步源時,則會同步執行個體下所有命名空間下的資料。

    • public

    • test

    • test1

    ak

    雲上MSE Nacos執行個體鑒權的AccessKey

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

    sk

    雲上MSE Nacos執行個體鑒權的AccessSecretKey

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