攜程框架部門研發的分布式配置中心,能夠集中化管理應用不同環境、不同集群的配置,配置修改后能夠實時推送到應用端,並且具備規范的權限、流程治理等特性,適用於微服務配置管理場景。
環境准備
centos ==> 7+
mysql ==> 5.7+
java ==> 1.8+
下載程序包地址
源代碼地址 : https://github.com/ctripcorp/apollo/
已編譯完成程序包 : https://github.com/ctripcorp/apollo/releases
config數據庫地址 : https://github.com/ctripcorp/apollo/blob/master/scripts/db/migration/configdb/V1.0.0__initialization.sql
portal數據庫地址 : https://github.com/ctripcorp/apollo/blob/master/scripts/db/migration/portaldb/V1.0.0__initialization.sql
###本次使用已編譯完成的程序包
wget https://github.com/ctripcorp/apollo/releases/download/v1.4.0/apollo-adminservice-1.4.0-github.zip
wget https://github.com/ctripcorp/apollo/releases/download/v1.4.0/apollo-configservice-1.4.0-github.zip
wget https://github.com/ctripcorp/apollo/releases/download/v1.4.0/apollo-portal-1.4.0-github.zip
數據庫文件使用瀏覽器復制到本地文件中。
程序接口名稱及功能說明
名稱 | 功能說明 | 接口服務對象 |
---|---|---|
Portal | 提供Web界面供用戶管理配置 | 配置管理員 |
Admin Service | 提供配置管理接口 | Portal |
Config Service | 提供配置獲取接口 | Apollo客戶端程序 |
Eureka | Config Service和Admin Service會向Eureka注冊服務,並保持心跳 | Config和Admin |
Meta Server | Meta Server從Eureka獲取Config Service和Admin Service的服務信息 | Portal和Client |
Meta Server和Config Service是在一個JVM進程中
Eureka和Config Service是在一個JVM進程中
部署分布說明
-
Portal
單獨使用ApolloPortalDB
庫,可以獨立部署 -
Config Service
和Admin Service
共用ApolloConfigDB
庫,建議部署至同一台服務器。 -
Portal
部署在生產環境的機房,通過它來直接管理FAT、UAT、PRO等環境的配置 -
Config Service
和Admin Service
在每個環境都獨立部署,使用獨立的數據庫(提供給相對應環境的客戶端程序調用配置接口)
默認支持環境說明
名稱 | 說明 |
---|---|
DEV | 開發環境 |
FAT | 測試環境,相當於alpha環境(功能測試) |
UAT | 集成環境,相當於beta環境(回歸測試) |
PRO | 生產環境 |
安裝Config Service
和Admin Service
- 導入數據庫
mysql -uroot -p -e 'CREATE DATABASE IF NOT EXISTS ApolloConfigDB DEFAULT CHARACTER SET = utf8mb4'
mysql -uroot -p ApolloConfigDB < ApolloConfigDB.sql
- 安裝程序
mkdir -p /opt/{apollo-config,apollo-admin}
unzip apollo-adminservice-1.4.0-github.zip -d /opt/apollo-admin/
unzip apollo-configservice-1.4.0-github.zip -d /opt/apollo-config/
- 修改配置文件
vim /opt/apollo-config/config/application-github.properties
######修改config server數據庫地址以及用戶名密碼
spring.datasource.url = jdbc:mysql://10.10.10.10:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = 123456
vim /opt/apollo-admin/config/application-github.properties
######修改admin server數據庫地址以及用戶名密碼
spring.datasource.url = jdbc:mysql://10.10.10.10:3306/ApolloConfigDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = 123456
- 啟動程序
/opt/apollo-config/scripts/startup.sh
/opt/apollo-admin/scripts/startup.sh
- 檢查啟動情況
- 打開網頁
http://10.10.10.10:8080
,查看是否有APOLLO-CONFIGSERVICE
以及APOLLO-ADMINSERVICE
成功注冊 - 使用命令
curl -X GET "http://10.10.10.10:8080/eureka/apps"
檢查已注冊服務
- 打開網頁
同一套環境中部署Config Service
和Admin Service
集群
- 修改數據庫配置文件
###修改 `ApolloConfigDB`.`ServerConfig`表中 `Value`選項
###將原 http://localhost:8080/eureka/ 修改為內網IP,(Eureka服務Url,多個service以英文逗號分隔)
###例如:
UPDATE `ApolloConfigDB`.`ServerConfig` SET `Value` = 'http://10.10.10.10:8080/eureka/,http://10.10.10.11:8080/eureka/' WHERE `Id` = 1
-
部署並啟動
- 在10.10.10.10以及10.10.10.11服務器上部署config及admin服務
- 啟動config及admin服務
-
檢查啟動情況
- 打開網頁
http://10.10.10.10:8080
以及http://10.10.10.11:8080
,兩台程序都服務注冊成功即可。 - 使用命令
curl -X GET "http://10.10.10.10:8080/eureka/apps"
檢查已注冊服務
- 打開網頁
安裝配置portal
- 導入數據庫
mysql -uroot -p -e 'CREATE DATABASE IF NOT EXISTS ApolloPortalDB DEFAULT CHARACTER SET = utf8mb4'
mysql -uroot -p ApolloPortalDB < ApolloPortalDB.sql
- 安裝程序
mkdir -p /opt/apollo-portal
unzip apollo-portal-1.4.0-github.zip -d /opt/apollo-portal/
-
修改配置文件
修改數據庫配置文件
vim /opt/apollo-portal/config/application-github.properties
######修改portal數據庫地址以及用戶名密碼
spring.datasource.url = jdbc:mysql://10.10.10.10:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = 123456
**修改訪問環境配置文件**
vim /opt/apollo-portal/config/apollo-env.properties
######修改各環境的eureka訪問地址,僅培訓需要的環境,如果eureka配置集群模式,填入地址,使用逗號隔開。(更建議使用域名+負載均衡)
dev.meta=http://10.10.10.10:8080,http://10.10.10.11:8080
**修改數據庫配置**
配置統一存儲在 ApolloPortalDB
.ServerConfig
表中
###允許支持多環境
`apollo.portal.envs`鍵值中,如需管理多個環境的話,使用逗號隔開
例如 "DEV,FAT,UAT,PRO"
###修改部門列表信息
`organizations`鍵值中,按照樣例修改可選部門信息
###超級管理官
`superAdmin`鍵值中,擁有超級管理員權限用戶名,如需添加多個,用逗號隔開
- 啟動程序
/opt/apollo-portal/scripts/startup.sh
-
訪問配置管理頁面
訪問域名 : http://10.10.10.10:8070
默認用戶名 : apollo
默認密碼 : admin -
增加配置請查看官方git說明書
https://github.com/ctripcorp/apollo/wiki/Apollo使用指南
https://gitee.com/nobodyiam/apollo/wikis/Apollo使用指南?sort_id=1296981
添加自定義環境
必須使用源碼編譯
假設需要添加的環境名稱為PRE
- 修改"apollo-core/src/main/java/com/ctrip/framework/apollo/core/enums/Env.java"類,在其中加入
PRE
枚舉
public enum Env{
LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, PRE, TOOLS, UNKNOWN;
- 修改"apollo-core/src/main/java/com/ctrip/framework/apollo/core/enums/EnvUtils.java"類,在其中加入
PRE
枚舉的轉換邏輯
case "PRO":
case "PROD": //just in case
return Env.PRO;
case "PRE":
return Env.PRE;
case "DEV":
return Env.DEV;
- 修改"apollo-core/src/main/java/com/ctrip/framework/apollo/core/internals/LegacyMetaServerProvider.java"類,增加讀取
PRE
環境的meta server地址邏輯
domains.put(Env.PRE, getMetaServerAddress(prop, "pre_meta", "pre.meta"));
- 修改"apollo-portal/src/main/resources/apollo-env.properties"配置文件,增加
pre.meta
占位符
pre.meta=${pre_meta}
- 編譯打包,獲取安裝包文件路徑
可以根據環境,修改
build.sh
文件中的數據庫地址配置
cd scripts
./build.sh
apollo-configservice/target/apollo-configservice-x.x.x-github.zip
apollo-adminservice/target/apollo-adminservice-x.x.x-github.zip
apollo-portal/target/apollo-portal-x.x.x-github.zip