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 | 服务和持久化配置。 重要  
 | 
| 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密码。 | 无 | 
Tasks字段说明
| 字段 | 说明 | 取值举例 | 
| source | 源集群名。 | 无。 | 
| destination | 目标集群名。 | 目标集群的命名空间自动和源集群保持一致,如果目标集群中不存在对应的命名空间,MSE Sync会自动创建。 | 
| type | 同步类型。 | 
 | 
| mode | 同步模式。 | 
 | 
| serviceMatchPattern | 需要同步的服务的正则匹配表达式。 | 默认同步所有服务。 | 
| autoScanAndAddService | 是否自动扫描并同步源集群中新增加的服务。 | 默认为True。 | 
常见问题
问题1:通过UI界面或YAML配置文件成功添加同步任务,但在任务列表中没有显示任务。
原因:MSESync未找到服务,可能由于源集群的命名空间下没有服务、命名空间ID填写错误等原因造成。建议您检查相关集群的配置信息是否有误,以及对应的命名空间下是否存在服务实例(服务提供者)。