Apollo 單環境與多環境搭建部署體驗

1. 前言

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

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

***本文使用docker 快速搭建 Apollo 服務端 版本爲1.7.0版本 目的是提供一個對Apollo的初步認識 ,避免踩坑,官方文檔對無基礎看着有點喫力了 ,如果需要詳細介紹文檔 移步官方 ***

2 單環境(Dev)搭建

2.1 架構簡介

首先,Apollo 有三個服務:

  • config-service 提供配置的讀取、推送等功能,服務對象是Apollo客戶端
  • admin-service 提供配置的修改、發佈等功能,服務對象是portal(管理界面)
  • portal 提供運維人員/程序員 操作管理界面

其中 config 與 admin 是多實例的對應標題中的多環境 , 因此如果單環境只需要各部署一個config,admin,portal ,其中eureka 是在config 中的,因此需要提前啓動config ,並在配置項數據庫中提供eureka訪問地址

2.2 單環境搭建

需要提前安裝好 docker(最好換下國內源) ,最好關閉防火牆(一般部署在內網,默認安全)

我這裏的IP是 192.168.203.101 ,數據庫 192.168.203.101 3306 root root

2.2.1 環境準備

  1. 拉取鏡像

docker pull apolloconfig/apollo-configservice:1.7.0-SNAPSHOT
docker pull apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT
docker pull apolloconfig/apollo-portal:1.7.0-SNAPSHOT

  1. 導入數據庫腳本

鏈接: https://pan.baidu.com/s/1wc7srmvwD7xZ9ZUa4h0S7Q 提取碼: rv7p

完成後在數據庫中把 ApolloConfigDB 中的ServerConfig 的 eureka.service.url value 改成 http://192.168.203.101:8080/eureka/ 對應下面的 config 的eureka地址

2.2.2 啓動

  1. 啓動

需要先啓動config,因爲eureka在config,需要它提供註冊服務 ,然後啓動admin 最後啓動portal

在啓動過程中可能出現eureka 註冊失敗,需要等eureka啓動後就不會了

config


docker run -p 8080:8080 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-cs apolloconfig/apollo-configservice:1.7.0-SNAPSHOT 

admin

docker run -p 8090:8090 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-as apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT

portal


    docker run -p 8070:8070 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloPortalDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -e APOLLO_PORTAL_ENVS=dev \
    -e DEV_META=http://192.168.203.101:8080 \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-web apolloconfig/apollo-portal:1.7.0-SNAPSHOT

也可以啓動一個看下日誌有沒有出錯

docker tail -f apollo-cs/apollo-as/apollo-web

  1. 最後驗證

輸入 http://192.168.203.101:8070/ 驗證 初始賬號密碼 : apollo/admin

官方文檔詳細介紹各參數含義在這

2. 多環境(dev,prod) 部署

2.1 架構

前面講到 config 與 admin 是 多實例 ,我們一般應用部署多實例是爲了負載,多數都是單一數據源,而Apollo 使用多實例是爲了環境隔離,因此需要多個數據源 , 同時如果需要測試與生產環境操作隔離也可以部署多個portal 這樣也需要多個portaldb 數據庫 ,我們這裏使用dev,prod 兩個 然後前臺一個,具體分佈如下:

機器 config-服務 admin-服務 portal-服務 數據庫
192.168.203.101 apollo-cs1 apollo-as1 3306/3307
192.168.203.102 apollo-cs2 apollo-as2 apollo-web

其中cs1 as1 連接 3306 ,cs2 as2 連接3307 , 同時我們需要在3306與3307的配置項中標明eureka 地址 逗號隔開 , 同時在portal 中 寫多個配置環境

如果是從單版本搭建複用,最好把config 重新建一下 , 不然兩個configdb 數據不一致會報錯

在1.7中 只支持以下環境
com.ctrip.framework.apollo.core.enums.Env
LOCAL, DEV, FWS, FAT, UAT, LPT, PRO, TOOLS, UNKNOWN;

2.2 開始

開始操作,在192.168.203.101-102 上面分別啓動apollo-cs1 , apollo-cs2

2.2.1 啓動前準備

當然 如果 docker 目錄未創建需要提前創建並且授權

授權語句:

chcon -Rt svirt_sandbox_file_t /yourdir

在3306 3307 數據庫中 ApolloConfigDB.ServerConfig中的 key=eureka.service.url 修改對應的value爲: http://192.168.203.101:8080/eureka/,http://192.168.203.102:8080/eureka/

2.2.2 啓動config

# 101 啓動
docker run -p 8080:8080 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-cs1 apolloconfig/apollo-configservice:1.7.0-SNAPSHOT 


## 102 啓動
docker run -p 8080:8080 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3307/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-cs2 apolloconfig/apollo-configservice:1.7.0-SNAPSHOT 


2.2.3 啓動admin


# 101 啓動
    docker run -p 8090:8090 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-as1 apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT

# 102 啓動

    docker run -p 8090:8090 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3307/ApolloConfigDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-as2 apolloconfig/apollo-adminservice:1.7.0-SNAPSHOT

2.2.4 啓動portal

101 已經有兩個數據庫服務了 ,所以把前臺放在102 上面 , 這裏與單機改動的點是:

  • APOLLO_PORTAL_ENVS 幾個環境就寫幾個
  • DEV_META 分別指向不同環境的eureka 服務地址
  • 這臺服務器web服務只有一個 所以我把端口映射到了80


    docker run -p 80:8070 \
    -e SPRING_DATASOURCE_URL="jdbc:mysql://192.168.203.101:3306/ApolloPortalDB?characterEncoding=utf8" \
    -e SPRING_DATASOURCE_USERNAME=root -e SPRING_DATASOURCE_PASSWORD=root \
    -e APOLLO_PORTAL_ENVS=dev,prod \
    -e DEV_META=http://192.168.203.101:8080 \
    -e PROD_META=http://192.168.203.102:8080 \
    -d -v /home/data/docker/apollo/logs:/opt/logs --name apollo-web apolloconfig/apollo-portal:1.7.0-SNAPSHOT


至此可以訪問 http://192.168.203.102/

Apollo 前端登錄

然後登錄進去apollo/admin , 愉快的體驗吧

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