原生Nacos迁移至MSE
MSE Nacos相对于开源Nacos额外提供了配置加密、推送轨迹等功能,保障高可用,并提供了丰富的运维工具,操作十分方便。本节介绍从开源Nacos迁移到天翼云Nacos实例。
前提条件
- 已经创建Nacos实例,参考章节:创建Nacos实例。
- 已经在Nacos实例上创建需要迁移的命名空间。
迁移配置
- 在开源控制台导出需要迁移的配置。
- 登陆开源Nacos自带的原生控制台。
- 在配置列表页面选择命名空间,点击单选框选中需要迁移的配置。
- 在配置列表下方点击导出,然后选择导出选中的配置。
- 然后在下载中可以看到导出的压缩包文件nacos_config_exportxxxxx.zip。
- 在MSE控制台页面导入配置。
- 登录微服务引擎MSE注册配置中心管理控制台,选择资源池。
- 在左侧导航栏,选择注册配置中心 > 实例列表。
- 在实例列表页面,单击目标实例ID、实例名称或者目标行“管理”按钮均可跳转至实例基础信息页面。
- 在基础信息页面,点击配置管理>配置列表,选择命名空间。
- 点击导入配置,在弹出的导入配置框中确认目标命名空间,选择相同配置的处理策略(策略详细介绍见同步配置),点击上传配置文件,最后点击确定,即可开始导入文件。
- 导入后查看配置列表,可以看到配置已经导入成功。
- 在应用完成迁移以前,如果需要变更配置文件,则需要在两边同步更新,以避免业务出现不一致的情况。
修改业务配置参数
根据不同的应用和框架,需要修改的配置参数不完全相同。但总体来说最重要的四个字段是Nacos服务端访问地址,命名空间ID,用户名以及密码。
迁移Java应用
Java应用一般情况下是直接依赖nacos-client。以pom.xml依赖文件为例:
<dependency>
<groupId>com.alibaba.nacos</groupId>
<artifactId>nacos-client</artifactId>
<version>${nacos.version]</version>
</dependency>
如果是在代码中直接使用properties方式配置Nacos访问信息,则需要修改。
Properties properties = new Properties();
properties.put(PropertyKeyConst.SERVER_ADDR, "Nacos访问地址");
properties.put(PropertyKeyConst.NAMESPACE, “命名空间");
properties.put(PropertyKeyConst.USERNAME, "username);
properties.put(PropertyKeyConst.PASSWORD, “password");
迁移Spring Boot 应用
Spring boot应用一般情况下Nacos的相关配置在application.properties文件中。
同样是修改Nacos服务端访问地址,命名空间ID,用户名以及密码等字段。
properties.put(PropertyKeyConst.SERVER_ADDR, "Nacos访问地址");
nacos.config.server-addr=${Nacos的访问地址}
nacos.config.namespace=${命名空间ID}
nacos.config.username=${用户名}
nacos.config.password=${密码}
迁移spring-cloud应用
Spring cloud应用一般情况下存在如下依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>${spring-cloud-starter-alibaba.version}</version>
</dependency>
一般情况下Nacos配置文件包含在bootstrap.properties 或者bootstrap.yml文件中。需要修改的配置项如下所示:
spring:
cloud:
nacos:
config:
server-addr: ${_NACOS_SERVER_ADDRESS}
username: ${_NAOCS_USERNAME}
password: ${_NAOCS_PASSWORD}
namespace: ${_NACOS_CONFIG_NAMESPACE}
源配置中心下线
当配置迁移完毕且应用已经全部切换至目标配置中心后,可以停止更新源配置中心,确认没有连接或监听的情况下,可以将源注册中心停止,完全使用目标配置中心。
从Apollo迁移至MSE Nacos
本节内容介绍如何从Apollo迁移配置至MSE Nacos实例。
前提条件
- 已经创建Nacos实例,参考章节创建Nacos实例。
- 已经在Nacos实例上创建需要迁移的命名空间。
同步配置信息
- 登录原生的Apollo控制台,本文以Apollo官方demo地址为例。
- 在我的应用页面点击需要迁移配置的应用名称。
- 在右上角点击管理员工具> 配置导入导出 > 点击单选框选中选择需要导出的环境,然后点击导出按钮,这种方式导出的是Apollo该环境的所有配置,所以是一个压缩包,解压后可以查看其中包含的properties文件。
- 按照Apollo和Nacos数据结构的对应关系,进入到对应的环境目录,可以看到导出的配置形如: appId+集群名+配置名称.properties。Apollo和Nacos数据结构对应关系如下:
Apollo数据结构 | Nacos数据结构 |
---|---|
环境 | Namespace |
集群 | group |
Namespace | dataId |
- 进入注册配置中心Nacos引擎控制台>配置管理>配置列表页面,点击配置导入按钮,在弹出的对话框中选择Apollo配置导入,然后选择导入策略,选择待导入的properties文件并提交,其中导入策略有两种:
(1)跳过导入:导入过程中发现存在与待导入配置dataId和group相同的配置存则跳过;
(2)覆盖导入:导入过程中发现存在与待导入配置dataId和group相同的配置存则覆盖其内容。 - 执行完毕后,查看Nacos对应命名空间配置是否同步成功。
修改应用配置
- 修改依赖信息
将apollo-client客户端依赖改为nacos-client依赖,如下所示:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.2.9.RELEASE</version>
</dependency>
- 修改代码
(1) 如果迁移的应用代码中使用了@EnableApolloConfig注解,需要将所有@EnableApolloConfig注解的类替换为@ConfigurationProperties注解。
(2) 如果迁移的应用代码中中使用了@ApolloConfig注解,将其修改为@ConfigurationProperties(prefix = "")注解,并且在bootstrap.properties中增加相关配置项。
(3) 使用的@ApolloConfigChangeListener可以使用nacos-sdk 中的中注册监听器代替。
(4) 代码中使用的@ApolloJsonValue 可以使用@Value替代,对应的 JsonBean类型使用String代替。
- 修改配置信息
将Apollo相关配置改为MSE Nacos相关的配置,实例如下:
application.yml文件中的Apollo配置:
apollo:
meta: http://81.68.181.139:8080
bootstrap:
enabled: true
eagerLoad:
enabled: true
namespaces: application,TEST1.C_DEMO
listeners: "application,TEST1.C_DEMO"
bootstrap.yml文件中的Nacos配置:
spring:
application:
name: TEST1.C_DEMO
cloud:
nacos:
config:
server-addr: Nacos访问地址
namespace: prod
- 重启服务。
- 修改配置验证监听情况。修改配置后,可以在应用的INFO日志中看到INFO o.s.c.e.event.RefreshEventListener - Refresh keys changed:[] 等字样,说明应用监听配置正常。