Spring Cloud 系列之 Apollo 配置中心(三)

本篇文章爲系列文章,未讀前幾集的同學請猛戳這裏:

本篇文章講解 Apollo 多環境部署方案,教大家搭建除了 DEV 的其他環境。


多環境部署方案


點擊鏈接觀看:Apollo 多環境部署說明視頻(獲取更多請關注公衆號「哈嘍沃德先生」)


爲了讓大家有更真實的感受,多環境部署方案我們在 Linux 環境下搭建,不再使用 Quick Start 腳本。

當項目要上線部署到生產環境時,項目的配置比如數據庫、緩存、隊列等服務器的地址都會發生改變,這時候就需要通過 Apollo 爲生產環境添加配置。目前 Apollo 預先定義的環境爲:

  • DEV:Development environment 開發環境,用於開發者調試使用;
  • FAT:Feature Acceptance Test environment 功能驗收測試環境,用於軟件測試者測試使用;
  • UAT:User Acceptance Test environment 用戶驗收測試環境(仿真環境),用於生產環境下的軟件測試者測試使用
  • PRO:Production environment 生產環境,最終上線環境。

Apollo 也支持自定義環境。具體方式可以參考官方文檔:https://github.com/ctripcorp/apollo/wiki/部署&開發遇到的常見問題#42-添加自定義的環境

這裏我們要明確一些信息:

  • Portal 部署在生產環境的機房,通過它來直接管理 FAT、UAT、PRO 等環境的配置即可;
  • Config Service、Admin Service 和 ApolloConfigDB 在每個環境都單獨部署;
  • 應用需要配置指定的環境,默認爲 DEV。

總結下來就是:一套 Portal 可以管理多個環境,但是每個環境都需要獨立部署一套 Config Service、Admin Service 和 ApolloConfigDB。

服務器地址說明:

  • 192.168.10.101:apollo-portal,公共的 Portal
  • 192.168.10.102:DEV 環境,獨立部署一套 Config Service、Admin Service,使用公共的 Portal
  • 192.168.10.103:PRO 環境,獨立部署一套 Config Service、Admin Service,使用公共的 Portal


點擊鏈接觀看:Apollo 多環境部署實踐視頻(獲取更多請關注公衆號「哈嘍沃德先生」)


創建數據庫

  • 192.168.10.101 這臺機器運行 apolloportaldb.sql 文件。
  • 192.168.10.102 和 192.168.10.103 都運行 apolloconfigdb.sql 文件。

最終結果如下:

調整服務端配置

Apollo 自身的一些配置是放在數據庫裏面的,所以需要針對實際情況做一些調整。

配置項統一存儲在 ApolloPortalDB.ServerConfig 表中,如下圖,在③Value的地方添加環境即可,比如 dev,pro

或者也可以通過管理員工具 - 系統參數頁面進行配置,通過 apollo.portal.envs 關鍵字查詢並進行設置,無特殊說明則修改完一分鐘實時生效。

下載安裝包

GitHub Release頁面下載最新版本的apollo-configservice-x.x.x-github.zipapollo-adminservice-x.x.x-github.zipapollo-portal-x.x.x-github.zip即可。本小節採用這種方式,可以省去本地打包的過程。

如果需要對 Apollo 做定製開發,也可以選擇通過源碼構建:https://github.com/ctripcorp/apollo/wiki/分佈式部署指南#222-通過源碼構建 後面高可用環境的搭建我們就採用這種方式。

配置數據庫

Apollo 服務端需要知道如何連接到你前面創建的數據庫,數據庫連接串信息位於上一步下載的壓縮包中的config/application-github.properties中。

配置 apollo-configservice 的數據庫連接信息

  1. apollo-configservice-x.x.x-github.zip 上傳至 192.168.10.102 和 192.168.10.103
  2. 解壓apollo-configservice-x.x.x-github.zip
  3. 打開config目錄下的application-github.properties文件
  4. 填寫正確的 ApolloConfigDB 數據庫連接串信息,注意用戶名和密碼後面不要有空格!
  5. 修改完的效果如下:
# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = 1234

配置 apollo-adminservice 的數據庫連接信息

  1. apollo-adminservice-x.x.x-github.zip 上傳至 192.168.10.102 和 192.168.10.103
  2. 解壓apollo-adminservice-x.x.x-github.zip
  3. 打開config目錄下的application-github.properties文件
  4. 填寫正確的 ApolloConfigDB 數據庫連接串信息,注意用戶名和密碼後面不要有空格!
  5. 修改完的效果如下:
# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = 1234

配置 apollo-portal 的數據庫連接信息

  1. 先將 apollo-portal-x.x.x-github.zip 上傳至 192.168.10.101。
  2. 解壓apollo-portal-x.x.x-github.zip
  3. 打開config目錄下的application-github.properties文件
  4. 填寫正確的 ApolloPortalDB 數據庫連接串信息,注意用戶名和密碼後面不要有空格!
  5. 修改完的效果如下:
# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = 1234

配置 apollo-portal 的 meta service 信息

Apollo Portal 需要在不同的環境訪問不同的 meta service(apollo-configservice) 地址,所以我們需要在配置中提供這些信息。默認情況下,meta service 和 config service 是部署在同一個JVM進程,所以 meta service 的地址就是 config service 的地址。

對於 1.6.0 及以上版本,可以通過 ApolloPortalDB.ServerConfig 中的配置項來配置 Meta Service 地址。

新版本配置方式

通過 apollo.portal.meta.servers 添加 meta service(apollo-configservice) 地址,類似以下方式,修改完需要重啓生效。

{
    "DEV":"http://192.168.10.102:8080",
    "PRO":"http://192.168.10.103:8080"
}

舊版本配置方式

打開apollo-portal-x.x.x-github.zipconfig目錄下的apollo-env.properties文件。

假設 DEV 的 apollo-configservice 未綁定域名,地址是 1.1.1.1:8080,FAT 的 apollo-configservice 綁定了域名 apollo.fat.xxx.com,UAT 的 apollo-configservice 綁定了域名 apollo.uat.xxx.com,PRO 的 apollo-configservice 綁定了域名 apollo.xxx.com,那麼可以如下修改各環境 meta service 服務地址,格式爲${env}.meta=http://${config-service-url:port},如果某個環境不需要,也可以直接刪除對應的配置項,參考案例如下:

dev.meta=http://1.1.1.1:8080
fat.meta=http://apollo.fat.xxx.com
uat.meta=http://apollo.uat.xxx.com
pro.meta=http://apollo.xxx.com

如果採用舊版本配置方式,本小節配置方案如下:

#local.meta=http://localhost:8080
dev.meta=http://192.168.10.102:8080
#fat.meta=http://fill-in-fat-meta-server:8080
#uat.meta=http://fill-in-uat-meta-server:8080
#lpt.meta=${lpt_meta}
pro.meta=http://192.168.10.103:8080

除了通過apollo-env.properties方式配置 meta service 以外,apollo 也支持在運行時指定 meta service(優先級比apollo-env.properties高):

  1. 通過 Java System Property ${env}_meta
    • 可以通過 Java 的 System Property ${env}_meta來指定
    • java -Ddev_meta=http://config-service-url -jar xxx.jar
    • 也可以通過程序指定,如System.setProperty("dev_meta", "http://config-service-url");
  2. 通過操作系統的 System Environment ${ENV}_META
    • DEV_META=http://config-service-url
    • 注意 key 爲全大寫,且中間是_分隔

啓動

三臺機器都進入對應安裝包的 script 目錄,執行 startup.sh 文件。

我的啓動順序爲:

  • 192.168.10.101 啓動 Portal
  • 192.168.10.102 啓動 ConfigService 再啓動 AdminService
  • 192.168.10.103 啓動 ConfigService 再啓動 AdminService

先訪問:192.168.10.102:8080 和 192.168.10.103:8080 看看 Eureka 以及各服務是否正常啓動,如下:

再訪問:192.168.10.101:8070 輸入 Apollo/admin 進行登錄,點擊案例項目 SampleApp 進入項目首頁,看到多環境說明搭建成功,後續的操作就和之前講的一樣了,這裏就不再過多贅述。

下一篇我們講解 Apollo 高可用環境搭建,灰度發佈,教大家搭建企業中真實環境的配置中心,記得關注噢~

本文采用 知識共享「署名-非商業性使用-禁止演繹 4.0 國際」許可協議

大家可以通過 分類 查看更多關於 Spring Cloud 的文章。


🤗 您的點贊轉發是對我最大的支持。

📢 掃碼關注 哈嘍沃德先生「文檔 + 視頻」每篇文章都配有專門視頻講解,學習更輕鬆噢 ~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章