MSE Sync迁移方案
本文介绍MSE提供的基于MSE Sync的注册中心迁移方案。
MSE Sync迁移方案简介
MSE基于开源Nacos Sync优化的一款数据同步工具MSE Sync,不仅提供双向同步、自动获取服务和一键同步全部服务等功能,而且采用多实例部署的方式实现容灾,能更好地完成Nacos、Zookeeper和Eureka注册配置中心的迁移。
基于MSE Sync迁移
迁移工具介绍
可平滑迁移
MSE Sync是基于开源Nacos Sync优化的一款数据同步工具。MSE Sync提供双向同步、自动获取服务和一键同步全部服务等功能,能更好地完成Nacos、Zookeeper和Eureka注册配置中心的迁移。在迁移过程中,MSE Sync能使源集群的服务信息和MSE云上产品的服务信息保持同步,从而实现自建配置注册中心和MSE产品之间的平滑迁移。本文图片中的pub指服务发布者,sub指服务订阅者。
可多实例部署
为了避免单实例宕机导致两端服务信息不一致,MSE Sync可采用多实例部署的方式实现容灾。
操作简易
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 | 服务和持久化配置。 重要 使用MSE Sync迁移工具对ZooKeeper的数据节点进行同步时,源集群和目标集群不支持同时变更同一个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同步的服务名转化成小写,这样两侧服务就能够互通了。 |
部署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工具,在左侧导航栏,单击服务同步,然后单击导入配置,在导入配置对话框,输入配置内容,单击确定,完成配置导入。
通过配置文件迁移任务:
找到预先准备的配置文件,然后执行以下命令导入配置。
./bin/msesyncCMD.sh apply -f {保存的迁移文件的路径}
将配置文件挂在或者放置在
MseSync/conf/config.yaml
,并启动MSE Sync。MSE Sync启动会自动初化配置文件,进行数据迁移。
说明配置文件可通过在MSE控制台的迁移上云页面配置迁移任务而自动生成。
配置示例
例如,自动同步src集群public、test两个命名空间的所有服务到dst集群中,同步类型为服务信息同步,同步模式为双向同步。
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
配置示例可见,配置项有两个字段,即clusters和tasks,分别描述集群和同步任务信息。以下分别对类型为List的clusters和tasks字段解释说明。
clusters
字段
说明
取值举例
clusterName
集群名称
说明配置中的集群名不可重复。
sourceCluster
clusterType
集群类型
NACOS
ZOOKEEPER
EUREKA
namespace
Nacos namespace名称
说明可以输入多个,使用英文逗号分隔。
public
test
test1
connectKeyList
集群的接入Endpoint,类型为List。
connectKeyList: - localhost:8848 - localhost1:8848
userName
Nacos用户名
无。
password
Nacos密码
无。
ak
MSE Nacos RAM鉴权具有读写权限子账号的AccessKey。
无。
sk
AccessKey对应的SecretKey。
无。
tasks
字段
说明
取值举例
source
clusters源集群名
无。
destination
clusters目标集群名
目标集群的命名空间自动和源集群保持一致,如果目标集群中不存在对应的命名空间,MSE Sync会自动创建。
type
同步类型
Service
Config,仅当ZooKeeper同步ZooKeeper时,支持Config类型。
mode
同步模式
Unidirectional (单向同步):只会将原生注册的服务信息从源集群同步到目标集群。
Bidirectional(双向同步):能够实现源集群和目标集群之间原生注册的服务信息的双向同步。
serviceMatchPattern
需要同步的服务的正则匹配表达式。
默认同步所有服务。
autoScanAndAddService
是否自动扫描并同步源集群中新增加的服务。
默认为True。