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。 |