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 | Nacos | 基于Curator實現的服務發現功能和Dubbo服務。 |
ZooKeeper | ZooKeeper | 服務和持久化配置。 重要
|
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_URL
、MYSQL_USER_NAME
和MYSQL_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部署
修改以下配置的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端口。
執行以下命令,部署MSE Sync。
kubectl apply -f mse-sync-deployment.yaml
ECS部署
下載MSE Sync的二進制包。
curl https://msesync.oss-cn-hangzhou.aliyuncs.com/MseSync.zip --output msesync.zip
解壓二進制包,并進入MSE Sync的根目錄。
unzip ./msesync.zip
可選:如需依賴MySQL,需要配置如下環境變量。
export MYSQL_URL="" export MYSQL_USER_NAME="" export MYSQL_PASSWORD=""
啟動應用。
./MseSync/bin/startup.sh start
步驟二:配置集群信息和遷移任務
MSE Sync可以通過UI配置遷移任務,也可以通過配置文件的形式構建遷移任務。
通過UI遷移任務:
打開MSE Sync工具,在左側導航欄,單擊服務同步,然后單擊導入配置,在導入配置對話框,輸入配置內容,單擊確定,完成配置導入。
通過配置文件遷移任務:
創建配置文件。本文提供如下YAML示例,自動同步src集群public、test兩個命名空間的所有服務到dst集群中,同步類型為服務信息同步,同步模式為雙向同步。
配置項主要包含兩個字段,即
clusters
和tasks
,分別描述集群和同步任務信息。clusters
和tasks
字段說明,請參見配置字段。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
執行以下命令導入配置。
./bin/msesyncCMD.sh apply -f {配置文件的路徑}
將配置文件掛載或者放置在
MseSync/conf/config.yaml
,并啟動MSE Sync。MSE Sync啟動會自動初始化配置文件,進行數據遷移。
說明配置文件可通過在MSE控制臺的遷移上云頁面配置遷移任務而自動生成。
通過配置導入的方式進行的同步功能,將實現對新增服務的自動同步。
配置字段
以下內容為List類型的clusters
和tasks
字段說明。
Clusters字段說明
字段 | 說明 | 取值舉例 |
clusterName | 集群名稱。 說明 配置中的集群名不可重復。 | sourceCluster |
clusterType | 集群類型。 |
|
namespace | Nacos namespace名稱。 說明 可以輸入多個,使用英文逗號分隔。 |
|
connectKeyList | 集群的接入Endpoint,類型為List。 |
|
userName | Nacos用戶名。 | 無 |
password | Nacos密碼。 | 無 |
ak | MSE Nacos RAM鑒權具有讀寫權限子賬號的AccessKey。 | 無 |
sk | AccessKey對應的SecretKey。 | 無 |
Tasks字段說明
字段 | 說明 | 取值舉例 |
source | 源集群名。 | 無。 |
destination | 目標集群名。 | 目標集群的命名空間自動和源集群保持一致,如果目標集群中不存在對應的命名空間,MSE Sync會自動創建。 |
type | 同步類型。 |
|
mode | 同步模式。 |
|
serviceMatchPattern | 需要同步的服務的正則匹配表達式。 | 默認同步所有服務。 |
autoScanAndAddService | 是否自動掃描并同步源集群中新增加的服務。 | 默認為True。 |