迁移方案介绍
本文介绍MSE提供的两种注册中心迁移方案,即基于MSE Sync的迁移方案和基于Java Agent的迁移方案。您可以根据需要选择适合您的迁移方案。
如何选择迁移方案
MSE基于开源Nacos Sync优化的一款数据同步工具MSE Sync,不仅提供双向同步、自动获取服务和一键同步全部服务等功能,而且采用多实例部署的方式实现容灾,能更好地完成Nacos、Zookeeper和Eureka注册配置中心的迁移。更多信息,请参见本文的基于MSE Sync迁移。
MSE基于Java Agent技术提供的注册中心动态迁移方案,在不需要修改代码的情况下,在应用服务注册和服务发现阶段通过Java Agent技术无感知地自动调整应用原来的服务注册和服务发现的逻辑,来帮助您通过服务双注册和双订阅实现应用注册中心平滑迁移。更多信息,请参见本文的基于Java Agent迁移。
基于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。
基于Java Agent迁移
迁移方案介绍
MSE提供了托管版的Nacos,相较于开源Nacos功能更强大和稳定,能帮助您免去运维Nacos集群的烦恼,更加聚焦业务本身的实现。但从使用自建注册中心转向MSE提供的注册中心服务,将涉及对当前应用的注册中心迁移。一般的迁移方法分为停机迁移和非停机迁移。
停机迁移
如果业务可以接受一段时间的停止对外服务,可通过停机修改应用注册中心配置将应用从自建注册中心迁移到MSE上注册中心。该种方式特点简单,但所带来的劣势是工作量大、涉及人员较多、流程繁琐耗时,导致注册中心迁移成本高、难度大、影响面广。
非停机迁移
对于大多数企业客户来说,确保注册中心迁移过程平滑、业务无中断不停机非常重要。阿里云微服务引擎MSE提供的基于Java Agent技术实现的双注册和双订阅迁移方案,可实现应用注册中心的非停机平滑迁移。该方案在不需要修改任何代码的情况下,在应用服务注册和服务发现阶段通过Java Agent技术无感知地自动调整应用原来的服务注册和服务发现逻辑,来帮助应用在迁移过程中同时接入两个注册中心,让已迁移的应用和未迁移的应用可以互相发现,调用不中断,进而保证业务的连续性。相较于停机迁移,该迁移方案仅需重启一次应用接入MSE即可,迁移过程操作便捷,迁移周期短,成本低。该方案迁移架构图如下:
支持的注册中心迁移类型
目前,MSE已经支持Spring Cloud、Dubbo以及非Java应用从开源注册中心向MSE注册中心迁移,具体支持的迁移类型如下。
开源注册中心 | MSE注册中心 | ||
引擎类型 | 微服务框架 | MSE Nacos | MSE Eureka |
ZooKeeper | Spring Cloud | ![]() | ![]() |
Dubbo | ![]() | ||
Nacos | Spring Cloud | ![]() | |
Dubbo | ![]() | ||
非Java | ![]() | ||
Eureka | Spring Cloud | ![]() | ![]() |
非Java | ![]() | ![]() | |
Consul | Spring Cloud | ![]() | ![]() |
联系我们
基于Java Agent迁移方案的相关实现还未在MSE中全量发布,如需使用,请加入钉群(钉群号:34754806)联系技术人员咨询。