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

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