迁移方案介绍

本文介绍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_URLMYSQL_USER_NAMEMYSQL_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部署

    1. 修改以下配置的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端口。

    2. 执行以下命令,部署MSE Sync。

      kubectl apply -f mse-sync-deployment.yaml
  • ECS部署

    1. 下载MSE Sync的二进制包。

      curl https://msesync.oss-cn-hangzhou.aliyuncs.com/MseSync.zip --output msesync.zip
    2. 解压二进制包,并进入MSE Sync的根目录。

      unzip ./msesync.zip
    3. 可选:如需依赖MySQL,需要配置如下环境变量。

      export MYSQL_URL=""
      export MYSQL_USER_NAME=""
      export MYSQL_PASSWORD=""
    4. 启动应用。

      ./MseSync/bin/startup.sh start

配置集群信息和迁移任务

MSE Sync可以通过UI配置迁移任务,也可以通过配置文件的形式构建迁移任务。

  • 通过UI迁移任务

    打开MSE Sync工具,在左侧导航栏,单击服务同步,然后单击导入配置,在导入配置对话框,输入配置内容,单击确定,完成配置导入。

  • 通过配置文件迁移任务

    1. 找到预先准备的配置文件,然后执行以下命令导入配置。

      ./bin/msesyncCMD.sh apply -f {保存的迁移文件的路径}
    2. 将配置文件挂在或者放置在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

配置示例可见,配置项有两个字段,即clusterstasks,分别描述集群和同步任务信息。以下分别对类型为Listclusterstasks字段解释说明。

  • 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)联系技术人员咨询。

阿里云首页 微服务引擎 相关技术圈