docker apollo配置中心分佈式部署

Apollo 簡介

 

Apollo(阿波羅)是攜程框架部門研發的分佈式配置中心,能夠集中化管理應用不同環境、不同集群的配置,配置修改後能夠實時推送到應用端,並且具備規範的權限、流程治理等特性,適用於微服務配置管理場景。

服務端基於Spring Boot和Spring Cloud開發,打包後可以直接運行,不需要額外安裝Tomcat等應用容器。

Java客戶端不依賴任何框架,能夠運行於所有Java運行時環境,同時對Spring/Spring Boot環境也有較好的支持。

.Net客戶端不依賴任何框架,能夠運行於所有.Net運行時環境。

更多產品介紹參見Apollo配置中心介紹

Apollo配置中心架構剖析

//mp.weixin.qq.com/s/-hUaQPzfsl9Lm3IqQW3VDQ 

docker分佈式部署(多環境)

官方分佈式部署參見分佈式部署指南//github.com/ctripcorp/apollo/wiki/%E5%88%86%E5%B8%83%E5%BC%8F%E9%83%A8%E7%BD%B2%E6%8C%87%E5%8D%97

 

準備機器2台

l192.168.101.14

l192.168.101.15

實現效果:通過apollo管理本地環境zglocal和測試環境zgdev配置文件

 

1.創建數據庫

創建ApolloConfigDB

通過各種MySQL客戶端導入apolloconfigdb.sql即可,每個環境一個數據庫,因為我們有兩個環境zglocal和zgdev,所以需要新建兩個數據庫zg_apolloconfigdb_dev 和 zg_apolloconfigdb_local。導入的sql是同一份sql數據就行

創建ApolloPortalDB

通過各種MySQL客戶端導入apolloportaldb.sql即可,因為Portal是配置管理界面,所以只需要一個就可以管理多個環境

效果如下:

 

 

2.docker安裝apollo

// 安裝啟動zgdev環境ConfigService和AdminService

docker run -p 8080:8080 \

    -e SPRING_DATASOURCE_URL=”jdbc:mysql://192.168.101.20:3306/zg_apolloconfigdb_dev?characterEncoding=utf8″ \

    -e SPRING_DATASOURCE_USERNAME=root -e [email protected] \

    -e eureka_instance_ip_address=192.168.101.14 \

    -d -v /tmp/logs:/opt/logs –name apollo-configservice-dev apolloconfig/apollo-configservice:1.7.1

 

    docker run -p 8090:8090 \

    -e SPRING_DATASOURCE_URL=”jdbc:mysql://192.168.101.20:3306/zg_apolloconfigdb_dev?characterEncoding=utf8″ \

    -e SPRING_DATASOURCE_USERNAME=root -e [email protected] \

    -e eureka_instance_ip_address=192.168.101.14 \

    -d -v /tmp/logs:/opt/logs –name apollo-adminservice-dev apolloconfig/apollo-adminservice:1.7.1

 

 

//安裝啟動zglocal環境ConfigService和AdminService

    docker run -p 8080:8080 \

    -e SPRING_DATASOURCE_URL=”jdbc:mysql://192.168.101.20:3306/zg_apolloconfigdb_local?characterEncoding=utf8″ \

    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWOR[email protected] \

    -e EUREKA_INSTANCE_IP_ADDRESS=192.168.101.15 \

    -d -v /tmp/logs:/opt/logs –name apollo-configservice-local apolloconfig/apollo-configservice:1.7.1

 

    docker run -p 8090:8090 \

    -e SPRING_DATASOURCE_URL=”jdbc:mysql://192.168.101.20:3306/zg_apolloconfigdb_local?characterEncoding=utf8″ \

    -e SPRING_DATASOURCE_USERNAME=root -e [email protected] \

     -e EUREKA_INSTANCE_IP_ADDRESS=192.168.101.15  \

    -d -v /tmp/logs:/opt/logs –name apollo-adminservice-local apolloconfig/apollo-adminservice:1.7.1

參數說明:

lSPRING_DATASOURCE_URL: 對應環境ApolloConfigDB的地址

lSPRING_DATASOURCE_USERNAME: 對應環境ApolloConfigDB的用戶名

lSPRING_DATASOURCE_PASSWORD: 對應環境ApolloConfigDB的密碼

lEUREKA_INSTANCE_IP_ADDRESS: 對應的網絡策略,如果實際部署的機器有多塊網卡(如docker),或者存在某些網卡的IP是Apollo客戶端和Portal無法訪問的(如網絡安全限制),那麼我們就需要在apollo-configservice和apollo-adminservice中做相關限制以避免Eureka將這些網卡的IP註冊到Meta Server,所以這裡我們要使用我們宿主機的ip註冊到到Eureka註冊中心,而不是默認的容器ip

 

//安裝啟動Portal

    docker run -p 8070:8070 \

    -e SPRING_DATASOURCE_URL=”jdbc:mysql://192.168.101.20:3306/zg_apolloportaldb?characterEncoding=utf8″ \

    -e SPRING_DATASOURCE_USERNAME=root -e [email protected] \

    -d -v /tmp/logs:/opt/logs –name apollo-portal apolloconfig/apollo-portal:1.7.1 

參數說明:

lSPRING_DATASOURCE_URL: 對應環境ApolloPortalDB的地址

lSPRING_DATASOURCE_USERNAME: 對應環境ApolloPortalDB的用戶名

lSPRING_DATASOURCE_PASSWORD: 對應環境ApolloPortalDB的密碼

lAPOLLO_PORTAL_ENVS(可選): 對應ApolloPortalDB中的apollo.portal.envs配置項,如果沒有在數據庫中配置的話,可以通過此環境參數配置

lDEV_META/PRO_META(可選): 配置對應環境的Meta Service地址,以${ENV}_META命名,需要注意的是如果配置了ApolloPortalDB中的apollo.portal.meta.servers配置,則以apollo.portal.meta.servers中的配置為準

 

啟動後效果:

 

 

 

 

3.修改配置參數 

3.1修改Portal容器參數

執行命令進入容器

docker exec -it apollo-portal sh

cd /apollo-portal/config

vi apollo-env.properties修改環境參數,如圖:

 

 

 

 

3.2修改數據庫參數

調整ApolloConfigDB配置

不管是apollo-configservice還是apollo-adminservice都需要向eureka服務註冊,所以需要配置eureka服務地址。 按照目前的實現,apollo-configservice本身就是一個eureka服務,所以只需要填入apollo-configservice的地址即可,如有多個,用逗號分隔(注意不要忘了/eureka/後綴)。

 

 

 

 

 

調整ApolloPortalDB配置(ps:圖片因為看不清,所以進行了重新截圖,place環境可忽略)

配置項統一存儲在ApolloPortalDB.ServerConfig表中,也可以通過管理員工具 – 系統參數頁面進行配置,無特殊說明則修改完一分鐘實時生效。

 

 

 

進行這些調整後重啟這幾個docker服務即可,訪問Portal界面

 

 

 

通過系統信息查看是否zglocal和zgdev環境的apollo-configservice還是apollo-adminservice是否允許正常