前言
Apollo(阿波羅)是攜程開源的分布式配置管理中心。
本文主要介紹其基于 Docker-Compose 的部署安裝和一些使用的經(jīng)驗(yàn)
特點(diǎn)
成熟,穩(wěn)定
支持管理多環(huán)境/多集群/多命名空間的配置
配置修改發(fā)布實(shí)時(shí)(1s)通知到應(yīng)用程序
支持權(quán)限控制、配置繼承,版本管理,灰度發(fā)布,使用監(jiān)控等
官方提供了 。NET/Java/Go 的 SDK 以及 Http 接口
國產(chǎn)中文,文檔友好,大廠背書,使用方案成熟
使用簡(jiǎn)單,支持 Docker , K8S,官方也提供多種高可用方案參考
使用情況
目前在微服務(wù)項(xiàng)目中做為配置中心,表現(xiàn)穩(wěn)定,體驗(yàn)良好
內(nèi)存情況:新安裝啟動(dòng)在 100M 左右,工作中實(shí)際 20 項(xiàng)目,80 客戶端使用時(shí),三個(gè)服務(wù)占 1.5G 左右
測(cè)試環(huán)境和生產(chǎn)環(huán)境分開,安全及避免錯(cuò)誤操作
為什么選擇 Apollo:穩(wěn)定&簡(jiǎn)單,雖然比不上 Nacos 的性能,也沒有服務(wù)發(fā)現(xiàn)功能,但是穩(wěn)定啊!!!
在我自己部署前,會(huì)覺得這個(gè)東西好難,好重,好麻煩。寫這篇文章的時(shí)候的感受只有兩個(gè)字:牛*
實(shí)踐
準(zhǔn)備
當(dāng)前版本:v2.1
apollo-db:mysql 5.6.6+ 數(shù)據(jù)庫
默認(rèn)端口:3306
依賴兩個(gè)數(shù)據(jù)庫:ApolloPortalDB,ApolloConfigDB
默認(rèn)賬號(hào)/密碼:apollo/admin
apollo-configservice:Config Service 提供配置的讀取、推送等功能。
默認(rèn)端口:8080
應(yīng)用程序端連接到此服務(wù)使用
apollo-adminservice: Admin Service 提供配置的修改、發(fā)布等功能
默認(rèn)端口:8090
管理界面使用此服務(wù)
apollo-portal:Portal 提供 Web 界面用來管理配置
默認(rèn)端口:8070
Web 管理界面
默認(rèn)賬號(hào)/密碼:apollo/admin
Deureka:提供服務(wù)注冊(cè)和發(fā)現(xiàn)
Config Service 和 Admin Service 會(huì)向 Eureka 注冊(cè)服務(wù),并保持心跳
在 Admin Service 需要指定eureka.service.url
服務(wù)配置方式的優(yōu)先級(jí)從高到低分別為:系統(tǒng)參數(shù)>環(huán)境變量>外部配置文件
使用 Docker Compose 安裝
本篇文章基于 Docker V24 及 Docker Compose V2,安裝可以參考之前的文章
配置說明
掛載了日志文件到。/logs 目錄
固定了鏡像版本 mysql v5.7 , apollo v2.1.0
指定 MySql 賬號(hào)密碼: root devops666 ,修改了端口映射 13306:3306
掛載 MySql 數(shù)據(jù),初始化腳本文件夾 。/initsql(v2.1 腳本)
Apollo 服務(wù)中使用服務(wù)名 apollo-db 連接 MySql:SPRING_DATASOURCE_URL:'...apollo-db:3306/...'
設(shè)置先啟動(dòng)數(shù)據(jù)庫:depends_on:apollo-db
apollo-configservice 服務(wù)中指定向 Deureka(Apollo 服務(wù)發(fā)現(xiàn)組件)注冊(cè)的地址:http://192.168.123.214:8080
apollo-adminservice 服務(wù)中指定向 Deureka 注冊(cè)的服務(wù)地址:http://192.168.123.214:809
apollo-adminservice 服務(wù)需指定 Deureka 服務(wù)地址:-Deureka.service.url=``http://192.168.123.214:8080/eureka/
指定網(wǎng)絡(luò):devopsnetwork (docker network create devopsnetwork)
web 管理端默認(rèn)賬號(hào)密碼:apollo admin,登錄后修改!!!
配置文件 compose.yml
準(zhǔn)備好 compose.yml 及 。/initsql/初始化腳本,修改其中的 IP
拷貝到服務(wù)器
然后運(yùn)行docker compose up -d即可
version: '3.1' services: # Apollo數(shù)據(jù)庫 apollo-db: image: mysql:5.7 container_name: apollo_db_5_7 restart: always environment: TZ: Asia/Shanghai MYSQL_ROOT_PASSWORD: 'devops666' ports: - "13306:3306" volumes: - ./initsql:/docker-entrypoint-initdb.d - ./data:/var/lib/mysql networks: - devopsnetwork # Apollo 服務(wù)發(fā)現(xiàn)注冊(cè)中心 apollo-configservice: container_name: apollo_configservice_2_1 image: apolloconfig/apollo-configservice:2.1.0 restart: always depends_on: - apollo-db environment: SPRING_DATASOURCE_URL: 'jdbc//apollo-db:3306/ApolloConfigDB?characterEncoding=utf8' SPRING_DATASOURCE_USERNAME: 'root' SPRING_DATASOURCE_PASSWORD: 'devops666' JAVA_OPTS: "-Deureka.instance.homePageUrl=http://192.168.123.214:8080" # EUREKA_INSTANCE_HOME_PAGE_URL: http://192.168.123.214:8080 # EUREKA_INSTANCE_PREFER_IP_ADDRESS: false volumes: - ./logs:/opt/logs ports: - "8080:8080" networks: - devopsnetwork #核心接口服務(wù) apollo-adminservice: container_name: apollo_adminservice_2_1 image: apolloconfig/apollo-adminservice:2.1.0 restart: always environment: SPRING_DATASOURCE_URL: 'jdbc//apollo-db:3306/ApolloConfigDB?characterEncoding=utf8' SPRING_DATASOURCE_USERNAME: 'root' SPRING_DATASOURCE_PASSWORD: 'devops666' JAVA_OPTS: "-Deureka.instance.homePageUrl=http://192.168.123.214:8090 -Deureka.service.url=http://192.168.123.214:8080/eureka/ " depends_on: - apollo-db ports: - "8090:8090" volumes: - ./logs/:/opt/logs networks: - devopsnetwork apollo-portal: image: apolloconfig/apollo-portal:2.1.0 container_name: apollo_portal_2_1 restart: always environment: SPRING_DATASOURCE_URL: 'jdbc//apollo-db:3306/ApolloPortalDB?characterEncoding=utf8' SPRING_DATASOURCE_USERNAME: 'root' SPRING_DATASOURCE_PASSWORD: 'devops666' APOLLO_PORTAL_ENVS: 'dev' DEV_META: 'http://192.168.123.214:8080' # 默認(rèn)賬號(hào) apollo admin depends_on: - apollo-db ports: - "8070:8070" volumes: - ./logs/:/opt/logs networks: - devopsnetwork networks: devopsnetwork: external: true ```
部署成功
部署機(jī)器IP:192.168.123.214
使用 K8S 安裝
跟著官方文檔一步步來即可,helm 的文件可以從apolloconfig/apollo-helm-chart獲取,這里只分享下步驟和些注意的地方
初始化數(shù)據(jù)庫
可以使用已有或者部署 mysql 服務(wù),并創(chuàng)建 apollo 專門的賬號(hào)密碼
執(zhí)行 Apollo 對(duì)應(yīng)版本的v2.1 默認(rèn)初始化腳本創(chuàng)建 ApolloConfigDB,ApolloPortalDB
生產(chǎn)環(huán)境 記得修改 ServerConfig 表的 環(huán)境和組織apollo.portal.envs:proorganizations:[{"orgId":"xxx","orgName":"xxx公司"}]
使用 helm 添加 apollo repo
安裝 apollo-service
安裝 apollo-portal
k8s 使用
可以將 Apollo 相關(guān)配置存儲(chǔ)到 k8s 的ConfigMap中方便 k8s 服務(wù)中使用
使用
.NET SDK
官方:Com.Ctrip.Framework.Apollo.Configuration
添加包:Com.Ctrip.Framework.Apollo.Configuration
appsetting.json 中添加 apollo 配置
MetaServer:Apollo 服務(wù)地址,系統(tǒng)信息中也可以查看到
AppId:應(yīng)用 Id
Namespaces:命名空間默認(rèn)是 application
獲取參數(shù)注冊(cè):可以是配置,也可以是從環(huán)境變量中
builder.Configuration.AddApollo(builder.Configuration.GetSection("apollo"));
注入IConfiguration使用即可
連接配置
"apollo": { "MetaServer": "http://192.168.123.214:8080", "AppId": "devops.test", "Namespaces": [ "application" ] }
Demo 示例
dotnet v7.0
var builder = WebApplication.CreateBuilder(args) builder.Configuration.AddApollo(builder.Configuration.GetSection("apollo")) app.MapGet("/config", context => { context.Response.Headers["Content-Type"] = "text/html //配置服務(wù) var configService = context.RequestServices.GetRequiredService() string? key = context.Request.Query["key"] if (string.IsNullOrWhiteSpace(key)) { return context.Response.WriteAsync("獲取配置:/config?key=test"); } var value = configService[key]; return context.Response.WriteAsync(value ?? "undefined"); });
完整 Demo 示例 :Github 地址
踩過的坑
數(shù)據(jù)庫配置連接,使用服務(wù)名,而不是容器名
-Deureka.instance.homePageUrl 和 -Deureka.service.url 參數(shù)一開始沒有理解到是做什么的,只知道配置健康檢查失敗,看了文檔才理解到是 Deureka.instance.homePageUrl 是注冊(cè)的服務(wù)地址,-Deureka.service.url 是注冊(cè)中心的接口地址
后語
時(shí)間充裕的情況最好是過一遍文檔,知道是怎么設(shè)計(jì)的,遇到問題真會(huì)一頭霧水。
審核編輯:黃飛
-
服務(wù)器
+關(guān)注
關(guān)注
12文章
9123瀏覽量
85324 -
SDK
+關(guān)注
關(guān)注
3文章
1035瀏覽量
45899 -
Apollo
+關(guān)注
關(guān)注
5文章
342瀏覽量
18443
原文標(biāo)題:Apollo 配置中心的部署與使用經(jīng)驗(yàn)
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論