Apollo多環境分佈式部署實現

本文提煉了一些官方的部署方案,主要介紹 Apollo在多環境下集羣部署,生產環境多節點高可用部署。
注:如果僅僅是本地測試建議搭建簡易版 官方快速搭建教程

1.源碼結構

官方源碼地址
工程介紹

  1. ConfigService
  • 提供配置獲取接口
  • 提供配置推送接口
  • 服務於Apollo客戶端
  1. AdminService
  • 提供配置管理接口
  • 提供配置修改發佈接口
  • 服務於管理界面Portal
  1. Client
  • 爲應用獲取配置,支持實時更新
  • 通過MetaServer獲取ConfigService的服務列表
  • 使用客戶端軟負載SLB方式調用ConfigService
  1. Portal
  • 配置管理界面
  • 通過MetaServer獲取AdminService的服務列表
  • 使用客戶端軟負載SLB方式調用AdminService

2.準備工作

2.1. 部署環境要求

  • 建議內網部署 ;

  • 服務端基於Spring Boot 建議CentOS 7 ;

  • Java版本要求 1.8+ ;

  • Mysql版本要求 5.6.5+ ;

    注:查看java版本命令:java -version
    查看mysql版本sql: SHOW VARIABLES WHERE Variable_name = ‘version’;

2.2.集羣環境

Apollo目前支持以下環境:

  • DEV >開發環境
  • FAT > 測試環境,相當於alpha環境(功能測試)
  • UAT > 集成環境,相當於beta環境(迴歸測試)
  • PRO > 生產環境

部署思路
每一套環境都部署一套(apollo-configservice+apollo-adminservice+環境私有數據庫)
前臺頁面僅需要部署一套(apollo-portal)即可集羣管理多套環境

注:同一個環境的apollo服務的多個節點使用同一個數據庫,不同環境的apollo集羣使用不同的數據庫,多個不同環境的apollo集羣使用一個portal就可以管理。

3.部署實例

注:僅做DEV(開發環境)與PRO(生產環境)的部署演示

3.1部署架構圖

注:圖示僅介紹了開發環境與生產環境,其它環境部署均可參考
在這裏插入圖片描述

注:
如果Apollo部署在公有云上,本地開發環境無法連接,但又需要做開發測試的話
1.客戶端可以升級到0.11.0版本及以上,然後通過-Dapollo.configService=http://config-service的公網IP:端口來跳過meta service的服務發現

3.2創建數據庫

3.2.1導入數據庫

Apollo服務端共需要兩個數據庫:

  • ApolloPortalDB(後臺管理數據庫)官方SQL腳本

    注:(導入一份即可)

  • ApolloConfigDB(配置存儲數據庫)官方SQL腳本

    注: 導入多個,區分環境,比如ApolloConfigDB_pro(生產)、ApolloConfigDB_Dev(測試)

3.2.1修改配置表

在 ApolloPortalDB.ServerConfig中 key 爲 apollo.portal.envs 調整value值爲對應的環境
逗號分隔,大小寫不敏感,示例 DEV,FAT,UAT,PRO

3.3下載部署包

官方release下載地址
示例圖:
在這裏插入圖片描述

3.4 配置數據庫連接信息

3.4.1配置apollo-configservice的數據庫連接信息
  1. 解壓apollo-configservice-x.x.x-github.zip
  2. 打開config目錄下的application-github.properties文件

層級結構示意圖在這裏插入圖片描述

  1. 填寫正確數據庫連接信息,注意用戶名和密碼後面不要有空格!
  2. 修改完的效果示例如下:
# DataSource
spring.datasource.url = jdbc:mysql://172.16.20.190:3306/apollo_config_dev?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root

注:由於在每個環境都有部署,所以對不同的環境config-service需要配置對應環境的數據庫參數

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

同環境的配置與 3.4.1 apollo-configservice 配置一致

3.4.3 配置apollo-portal的數據庫連接信息
  1. 解壓apollo-portal-x.x.x-github.zip
  2. 打開config目錄下的application-github.properties文件

層級目錄示意圖在這裏插入圖片描述

  1. 填寫正確的ApolloPortalDB數據庫連接串信息,注意用戶名和密碼後面不要有空格!
  2. 修改完的效果如下:
# DataSource
spring.datasource.url = jdbc:mysql://172.16.20.190:3306/apollo_portal_db?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root

3.4.4 配置apollo-portal的meta service信息

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

1.打開apollo-portal-x.x.x-github.zipconfig目錄下的apollo-env.properties文件。
2.如果某個環境不需要,也可以直接刪除對應的配置項
3.支持域名
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

注1: 爲了實現meta service的高可用,推薦通過SLB(Software Load Balancer)做動態負載均衡
注2: meta service地址也可以填入IP,0.11.0版本之前只支持填入一個IP。從0.11.0版本開始支持填入以逗號分隔的多個地址(PR #1214),如http://1.1.1.1:8080,http://2.2.2.2:8080,不過生產環境還是建議使用域名(走slb),因爲機器擴容、縮容等都可能導致IP列表的變化。

3.5數據庫數據修改

3.5.1 apollo-portal 服務的數據庫中支持環境配置,添加上本次配置的環境,多個逗號分隔在這裏插入圖片描述

3.5.2(非必須) 自定義部門列表
Portal中新建的App都需要選擇部門,所以需要在這裏配置可選的部門信息,樣例如下:
[{“orgId”:“TEST1”,“orgName”:“樣例部門1”},{“orgId”:“TEST2”,“orgName”:“樣例部門2”}]
示意圖
在這裏插入圖片描述

需要修改可以直接更新JSON,更新後需要重啓 apollo-portal 服務生效

3.6單環境單節點部署分佈

介於服務資源,僅做了不同環境下區分部署

集羣環境 服務 數據庫 服務器ip
DEV configservice apollo_config_dev 172.16.20.230-001
adminservice apollo_config_dev 172.16.20.230-001
PRO configservice apollo_config_pro 172.16.20.88-002
adminservice apollo_config_pro 172.16.20.88-002
公共頁面 portal apollo_portal_db 172.16.20.62-003

3.6發佈服務

一切準備就緒,準備發佈服務了。。。
3.6.1上傳配置好的Jar包到對應的服務器
3.6.2解壓對應的包,切換到該包下
啓動命令:scripts/startup.sh
關閉命令:scripts/shutdown.sh

啓動圖示
在這裏插入圖片描述

4.多節點部署

開發環境單節點部署一臺(configservice+adminservice)一版就夠用了,
但是生產環境爲了更高可用,最好是多個服務部署在不同服務器,實現雙活或多活。

4.1生產環境部署第二套分佈

集羣環境 服務 數據庫 服務器ip
PRO configservice apollo_config_pro 172.16.20.15-004
adminservice apollo_config_pro 172.16.20.15-004

這樣的話加上上一步配置生產環境就有兩個節點了,當然configservice與adminservice可可以部署在不同服務器
節點1:172.16.20.88 (configservice+adminservice)
節點2:172.16.20.15(configservice+adminservice)

注意事項:同一個環境的apollo服務的多個節點使用同一個數據庫;

4.2Eureka連接配置

需要注意的是每個環境只填入自己環境的eureka服務地址,
比如pro的apollo-configservice是172.16.20.88:8080和172.16.20.15:8080
則需在PRO環境的apollo_config_pro.ServerConfig表中設置eureka.service.url爲:
http://172.16.20.88:8080/eureka/,http://172.16.20.15:8080/eureka/

在這裏插入圖片描述注意事項:修改ServerConfig配置需要重啓服務後生效;

4.2修改服務Portal配置

修改服務Portal的apollo-env.properties,多個逗號分隔
在這裏插入圖片描述

4.3服務發佈

  • 新環境節點2(172.16.20.15)服務啓動;分別依次啓動 configservice > adminservice
  • 原有環境節點1(172.16.20.88)服務重啓;分別依次啓動 configservice > adminservice
  • apollo-portal服務重啓

注:相關命令
切換到相應包下
啓動命令:scripts/startup.sh
關閉命令:scripts/shutdown.sh

5.常見問題

5.1啓動順序疑問?

apollo部署所需核心工程是 apollo-configservice、apollo-adminservice、apollo-portal
啓動順序依次是 apollo-configservice > apollo-adminservice > apollo-portal
爲什麼需要按照以上順序呢?
apollo-configservice 會攜帶一個註冊中心Eureka,而apollo-adminservice 啓動是需要註冊到註冊中心,所以需要先啓動apollo-configservice,同理apollo-portal也需要前置服務正常情況下纔可以使用。

注:未按照順序啓動並非不可用,只是會有短暫的服務延遲時間;

5.2常用端口與日誌配置

apollo-configservice 默認端口:8080 默認日誌位置:/opt/logs/100003171
apollo-adminservice 默認端口:8090 默認日誌位置:/opt/logs/100003172
apollo-portal 默認端口:8070 ,默認日誌位置:/opt/logs/100003173

5.3更改端口與日誌存放地址

以apollo-configservice爲例
1).切換到scripts目錄下在這裏插入圖片描述2).根據需求更改配置在這裏插入圖片描述

如要調整服務監聽端口,可以修改scripts/startup.sh中的SERVER_PORT

注意:
apollo-configservice同時承擔meta server職責,如果要修改端口,注意要同時ApolloConfigDB.ServerConfig表中的eusreka.service.url配置項
以及apollo-portal和apollo-client中的使用到的meta server信息,

5.4登錄後顯示有環境缺失

這是因爲首次多個環境需要觸發一次補缺環境
在這裏插入圖片描述

在這裏插入圖片描述

  • 同一個環境的apollo服務的多個節點使用同一個數據庫;
  • 不同環境的apollo集羣使用不同的數據庫;
  • 多個不同環境的apollo集羣使用一個portal就可以管理。

5.4配置中心掛掉會影響已發佈的項目?

經驗證發現已發佈的項目配置信息已緩存在容器中,暫不影響,但是會打印一些監聽異常的日誌,,,

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