MSE Nacos配置中心相对自建Nacos配置中心,提供了配置加解密、推送轨迹等功能,并且具有高性能、高可用及易用性的优势,可以极大地降低运维成本。本文介绍如何从开源自建Nacos配置中心迁移到MSE Nacos配置中心。
前提条件
步骤一:自建Nacos配置迁移到MSE Nacos
方式一:使用导入导出功能迁移配置
不同命名空间的配置请分别进行导入和导出操作。
在自建Nacos开源控制台导出需要迁移的配置。
登录自建Nacos开源控制台。
在配置列表页面选择目标配置,在配置列表下方单击导出,然后在导出配置对话框中单击导出。
存储导出的配置文件。
在MSE控制台导入配置。
登录MSE注册中心控制台。
在左侧导航栏,选择注册配置中心 > 实例列表。单击目标实例名称。
在左侧导航栏,选择配置管理 > 配置列表。
在配置列表页面,选择目标命名空间,单击导入配置。
在导入配置对话框选择相同配置。单击上传文件,选择从自建Nacos开源实例控制台导出的配置文件,然后单击确定导入。
双边更新。
说明在业务应用迁移到MSE Nacos前,为保证业务平滑迁移,您需要对自建Nacos和MSE Nacos配置中心进行同步更新,自主处理。如果存在通过SDK更新的入口,需要在程序中进行双写;控制台更新请手动在两边同步更新。
方式二:使用同步工具配置迁移任务进行配置热迁移
同步工具部署请参见 MSE Sync迁移方案。
同步工具部署完成之后,在MSE 控制台,左侧导航栏选择注册配置中心 >迁移上云 ,在迁移上云页面单击迁移配置。
在迁移配置页面,单击下一步,进入创建配置,选择源实例类型为Nacos,同步类型选择配置同步,源实例节点地址填写实例的节点IP和端口,目标实例选择要迁移到的目标实例,然后单击下一步,进入实施迁移页,单击下载并保存迁移配置,将下载的配置导入MSE Sync工具中即可实现原集群中配置的热同步。
配置同步不支持同步灰度配置,如果原集群或者MSE集群灰度范围包含同步工具,同步工具会将灰度配置作为正式同步到对端集群。
请勿在原集群和目标集群并发修改配置。
步骤二:替换应用业务参数
请根据您的应用类型,选择对应的步骤替换应用业务参数:
迁移spring-cloud-alibaba应用
鉴别您的应用是否为spring-cloud-alibaba应用。
在pom.xml文件中如果发现如下内容,则表明您的应用为spring-cloud-alibaba应用。
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
如果您的应用为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应用
鉴别您的应用是否为Nacos-Java-SDK应用。
在pom.xml文件中如果发现如下内容,则表明您的应用为Nacos-Java-SDK应用。
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> </dependency>
如果您的应用为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,并且业务稳定符合预期,可以停止双边更新,对自建实例上的流量进行确认,保证自建实例上已经没有连接,没有配置推送查询记录情况下,可以下线自建实例。至此,整体迁移步骤完成。