原生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: //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:[] ?等字樣,說明應用監聽配置正常。