自建Nacos配置中心迁移到MSE Nacos

MSE Nacos配置中心相对自建Nacos配置中心,提供了配置加解密、推送轨迹等功能,并且具有高性能、高可用及易用性的优势,可以极大地降低运维成本。本文介绍如何从开源自建Nacos配置中心迁移到MSE Nacos配置中心。

前提条件

  • 创建Nacos引擎

  • 已创建对应的命名空间。具体操作,请参见创建命名空间

    说明

    如果在自建Nacos实例中区分了多个不同命名空间,可以在MSE Nacos创建对应的命名空间ID及名称,保证平滑迁移。

步骤一:自建Nacos配置迁移到MSE Nacos

方式一:使用导入导出功能迁移配置

说明

不同命名空间的配置请分别进行导入和导出操作

  1. 在自建Nacos开源控制台导出需要迁移的配置。

    1. 登录自建Nacos开源控制台。

    2. 配置列表页面选择目标配置,在配置列表下方单击导出,然后在导出配置对话框中单击导出

    3. 存储导出的配置文件。

  2. 在MSE控制台导入配置。

    1. 登录MSE注册中心控制台

    2. 在左侧导航栏,选择注册配置中心 > 实例列表。单击目标实例名称。

    3. 在左侧导航栏,选择配置管理 > 配置列表

    4. 配置列表页面,选择目标命名空间,单击导入配置

    5. 导入配置对话框选择相同配置。单击上传文件,选择从自建Nacos开源实例控制台导出的配置文件,然后单击确定导入

      image.png

  3. 双边更新。

    说明

    在业务应用迁移到MSE Nacos前,为保证业务平滑迁移,您需要对自建Nacos和MSE Nacos配置中心进行同步更新,自主处理。如果存在通过SDK更新的入口,需要在程序中进行双写;控制台更新请手动在两边同步更新。

方式二:使用同步工具配置迁移任务进行配置热迁移

说明

同步工具部署请参见 MSE Sync迁移方案

  1. 同步工具部署完成之后,在MSE 控制台,左侧导航栏选择注册配置中心 >迁移上云 ,在迁移上云页面单击迁移配置

    image

  2. 迁移配置页面,单击下一步,进入创建配置,选择源实例类型Nacos同步类型选择配置同步源实例节点地址填写实例的节点IP和端口,目标实例选择要迁移到的目标实例,然后单击下一步,进入实施迁移页,单击下载并保存迁移配置,将下载的配置导入MSE Sync工具中即可实现原集群中配置的热同步。

    image

重要
  • 配置同步不支持同步灰度配置,如果原集群或者MSE集群灰度范围包含同步工具,同步工具会将灰度配置作为正式同步到对端集群。

  • 请勿在原集群和目标集群并发修改配置。

步骤二:替换应用业务参数

请根据您的应用类型,选择对应的步骤替换应用业务参数:

迁移spring-cloud-alibaba应用

  1. 鉴别您的应用是否为spring-cloud-alibaba应用。

    pom.xml文件中如果发现如下内容,则表明您的应用为spring-cloud-alibaba应用。

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
  2. 如果您的应用为spring-cloud-alibaba应用,修改应用程序的bootstrap.properties配置文件。

    {MSE的公网/私网地址}替换为目标MSE Nacos实例地址。MSE Nacos实例地址可以在实例的基础信息页面获取。

    spring.cloud.nacos.config.server-addr=${MSE的公网/私网地址}

    并且在如下配置中,将Namespace替换为MSE中的Namespace,如果命名空间ID没有变化,则不需要修改。MSE中默认命名空间(Namespace)为空,可以不填写。如果导入的命名空间ID不为空,可以在Nacos实例的命名空间页面获取。

说明
  • 如果您使用公网地址进行部署,为了保证连通性,您需要将客户端IP列入白名单。具体操作,请参见设置白名单

  • 如果白名单配置内容为空,表示本地所有地址均可访问该应用。

迁移Java应用

  1. 鉴别您的应用是否为Nacos-Java-SDK应用。

    pom.xml文件中如果发现如下内容,则表明您的应用为Nacos-Java-SDK应用。

    <dependency>
      <groupId>com.alibaba.nacos</groupId>
      <artifactId>nacos-client</artifactId>
    </dependency>
  2. 如果您的应用为Nacos-Java-SDK,则需要将如下代码中的${MSE的接入地址}替换为MSE的注册地址。将${namespaceId}替换为MSE的命名空间ID。如果您使用的是默认命名空间,则该处内容置空即可,如果命名空间ID没有变化,则不需要修改。然后重新部署。

    properties.put("serverAddr", "${MSE的接入地址}");
    properties.put("namespace", "${namespaceId}");

迁移nacos-spring-boot应用

如果您的应用是nacos-spring-boot应用,修改应用程序的application.properties配置文件。

${MSE的接入地址}替换为MSE的注册地址。

nacos.config.server-addr=${MSE的接入地址}

并且在如下配置中,将Namespace替换为MSE中的Namespace:

nacos.config.namespace=${MSE的namespaceID}

迁移Golang应用

说明

调用接口前,需配置环境变量,通过环境变量读取访问凭证。微服务引擎的AccessKey ID和AccessKey Secret的环境变量名为MSE_AK、MSE_SK。

如果您使用的是Nacos-golang-SDK,则需要将${serverAddr}替换为MSE的注册地址。

sc := []constant.ServerConfig{
    {
    IpAddr: "${serverAddr}",
    Port:   8848,
    },
}
说明

Golang官方应用示例Demo,请参见nacos-sdk-go

迁移Python应用

如果您使用的是Nacos-Python-SDK,则需要将${server_address}${namespace_id}替换为MSE的注册地址和命名空间ID。

SERVER_ADDRESSES = "${server_address}"
NAMESPACE = "${namespace_id}"
client = nacos.NacosClient(SERVER_ADDRESSES, namespace=NAMESPACE)

迁移Node.js应用

如果您使用的是Nacos-Nodejs-SDK,则需要将${server_address}${namespace_id}替换为MSE的注册地址和命名空间ID。

const configClient = new NacosConfigClient({
  serverAddr: '${server_address}',
  namespace: '${namespace_id}',
  accessKey: 'MSE_AK',
  secretKey: 'MSE_SK',
  requestTimeout: 6000,
});

迁移C#应用

请将${server_address}${namespace_id}替换为MSE的注册地址和命名空间ID。

{
  "NacosConfig": {
    "Listeners": [
      {
        "Optional": false,
        "DataId": "common",
        "Group": "DEFAULT_GROUP"
      },
      {
        "Optional": false,
        "DataId": "demo",
        "Group": "DEFAULT_GROUP"
      }
    ],
    "Namespace": "namespace_id", 
    "ServerAddresses": [ "http://${server_address}:8848/" ],
    "UserName": "test2",
    "Password": "123456",
    "AccessKey": "MSE_AK",
    "SecretKey": "MSE_SK",
    "EndPoint": "acm.aliyun.com",
    "ConfigFilterAssemblies": ["YouPrefix.AssemblyName"],
    "ConfigFilterExtInfo": "some ext information"
  }
}

迁移C++应用

如果您使用的是Nacos-CPP-SDK,则需要将${server_address}${namespace_id}替换为MSE的注册地址和命名空间ID。

Properties props;
props[PropertyKeyConst::SERVER_ADDR] = "${server_address}:8848";
props[PropertyKeyConst::NAMESPACE] = "{namspaceId}";

步骤三:自建实例自检与下线

当应用已经完全切换到MSE Nacos,并且业务稳定符合预期,可以停止双边更新,对自建实例上的流量进行确认,保证自建实例上已经没有连接,没有配置推送查询记录情况下,可以下线自建实例。至此,整体迁移步骤完成。