Redian新闻
>
Apollo 配置中心的部署与使用经验

Apollo 配置中心的部署与使用经验

公众号新闻

前言

Apollo(阿波罗)是携程开源的分布式配置管理中心。

本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验

特点

  • 成熟,稳定

  • 支持管理多环境/多集群/多命名空间的配置

  • 配置修改发布实时(1s)通知到应用程序

  • 支持权限控制、配置继承,版本管理,灰度发布,使用监控等

  • 官方提供了 。NET/Java/Go 的 SDK 以及 Http 接口

  • 国产中文,文档友好,大厂背书,使用方案成熟

  • 使用简单,支持 Docker , K8S,官方也提供多种高可用方案参考

使用情况

  • 目前在微服务项目中做为配置中心,表现稳定,体验良好

  • 内存情况:新安装启动在 100M 左右,工作中实际 20 项目,80 客户端使用时,三个服务占 1.5G 左右

  • 测试环境和生产环境分开,安全及避免错误操作

  • 为什么选择 Apollo:稳定&简单,虽然比不上 Nacos 的性能,也没有服务发现功能,但是稳定啊!!!

  • 在我自己部署前,会觉得这个东西好难,好重,好麻烦。写这篇文章的时候的感受只有两个字:牛*

实践

准备

  • 当前版本:v2.1

  • apollo-db:mysql 5.6.6+ 数据库

    • 默认端口:3306

    • 依赖两个数据库:ApolloPortalDB,ApolloConfigDB

    • 默认账号/密码:apollo/admin

  • apollo-configservice:Config Service 提供配置的读取、推送等功能。

    • 默认端口:8080

    • 应用程序端连接到此服务使用

  • apollo-adminservice: Admin Service 提供配置的修改、发布等功能

    • 默认端口:8090

    • 管理界面使用此服务

  • apollo-portal:Portal 提供 Web 界面用来管理配置

    • 默认端口:8070

    • Web 管理界面

    • 默认账号/密码:apollo/admin

  • Deureka:提供服务注册和发现

    • Config Service 和 Admin Service 会向 Eureka 注册服务,并保持心跳

    • 在 Admin Service 需要指定 eureka.service.url

  • 服务配置方式的优先级从高到低分别为:系统参数>环境变量>外部配置文件

使用 Docker Compose 安装

本篇文章基于 Docker V24 及 Docker Compose V2,安装可以参考之前的文章

配置说明

  • 挂载了日志文件到。/logs 目录

  • 固定了镜像版本 mysql v5.7 , apollo v2.1.0

  • 指定 MySql 账号密码: root devops666 ,修改了端口映射 13306:3306

  • 挂载 MySql 数据,初始化脚本文件夹 。/initsql(v2.1 脚本)

  • Apollo 服务中使用服务名 apollo-db 连接 MySql:SPRING_DATASOURCE_URL:'...apollo-db:3306/...'

  • 设置先启动数据库:depends_on:apollo-db

  • apollo-configservice 服务中指定向 Deureka(Apollo 服务发现组件)注册的地址:http://192.168.123.214:8080

  • apollo-adminservice 服务中指定向 Deureka 注册的服务地址:http://192.168.123.214:809

  • apollo-adminservice 服务需指定 Deureka 服务地址:-Deureka.service.url=``http://192.168.123.214:8080/eureka/

  • 指定网络:devopsnetwork (docker network create devopsnetwork)

  • web 管理端默认账号密码:apollo admin,登录后修改!!!

配置文件 compose.yml

  • 准备好 compose.yml 及 。/initsql/初始化脚本,修改其中的 IP

    拷贝到服务器

    然后运行docker compose up -d即可


     version: '3.1' services:   # Apollo数据库   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 服务发现注册中心 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:mysql://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
    #核心接口服务 apollo-adminservice: container_name: apollo_adminservice_2_1 image: apolloconfig/apollo-adminservice:2.1.0 restart: always environment: SPRING_DATASOURCE_URL: 'jdbc:mysql://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:mysql://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' # 默认账号 apollo admin depends_on: - apollo-db ports: - "8070:8070" volumes: - ./logs/:/opt/logs networks: - devopsnetwork
    networks: devopsnetwork: external: true ```

部署成功

部署机器IP:192.168.123.214

使用 K8S 安装

跟着官方文档一步步来即可,helm 的文件可以从 apolloconfig/apollo-helm-chart 获取,这里只分享下步骤和些注意的地方

  1. 初始化数据库

    1. 可以使用已有或者部署 mysql 服务,并创建 apollo 专门的账号密码

    2. 执行 Apollo 对应版本的 v2.1 默认初始化脚本 创建 ApolloConfigDB,ApolloPortalDB

    3. 生产环境 记得修改 ServerConfig 表的 环境和组织apollo.portal.envs:pro organizations:[{"orgId":"xxx","orgName":"xxx公司"}]

  2. 使用 helm 添加 apollo repo

  3. 安装 apollo-service

  4. 安装 apollo-portal

  5. k8s 使用

    • 可以将 Apollo 相关配置存储到 k8s 的 ConfigMap 中方便 k8s 服务中使用

使用

.NET SDK

官方:Com.Ctrip.Framework.Apollo.Configuration

  1. 添加包:Com.Ctrip.Framework.Apollo.Configuration

  2. appsetting.json 中添加 apollo 配置

    1. MetaServer:Apollo 服务地址,系统信息中也可以查看到

    2. AppId:应用 Id

    3. Namespaces:命名空间默认是 application

  3. 获取参数注册:可以是配置,也可以是从环境变量中

      builder.Configuration.AddApollo(builder.Configuration.GetSection("apollo"));

  4. 注入 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    //配置服务    var configService = context.RequestServices.GetRequiredService<IConfiguration>()    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 地址

踩过的坑

  • 数据库配置连接,使用服务名,而不是容器名

  • -Deureka.instance.homePageUrl 和 -Deureka.service.url 参数一开始没有理解到是做什么的,只知道配置健康检查失败,看了文档才理解到是 Deureka.instance.homePageUrl 是注册的服务地址,-Deureka.service.url 是注册中心的接口地址

后语

时间充裕的情况最好是过一遍文档,知道是怎么设计的,遇到问题真会一头雾水。

每天进步一点,哪怕只是一点!

好了,今天的小知识你学会了吗?


链接:https://juejin.cn/post/7296016520004862015

(版权归原作者所有,侵删)


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
父母教育孩子最大的难题?元春省亲最温情的部分?法律翻译|美国上诉法院推翻原审的部分判决,《石油销售行为法》不支持“推定不续约”【外汇商品】离岸金融中心的美国资产配置、交易情况——美国TIC追踪2023年第五期晨观叶落巍塔魅光夜 - 四年后终回国 (7)名额有限!Apollo新版本Beta自动驾驶技术沙龙招募即将截止Thom Browne罕见55折!Longchamp6折白菜!Polo/Weekday半价!Kubernetes 配置Pod使用代理上网中科大发布2023年学术期刊负面清单!神刊Plos One、Molecules、ncology系列在列!韩国宣布中止《〈板门店宣言〉军事领域履行协议》的部分效力全程干货!Apollo新版本Beta自动驾驶技术系列公开课即将开播!真实的部委公务员待遇法国年轻帅气的部长太难过,要学这个亚洲国家:方法一定管用!华大学姐求职坦白局:亚马逊最赚钱的部门到底有多卷?临近开学,澳洲留学生终于不用经典开局了...来这免费包你三餐!超好价买后腿牛腱心,最好吃的部位!真的比别家的都好吃!前后端都用得上的 Nginx 日常使用经验拔出内心的刺,不要让最脆弱的部分主宰你的人生中医医疗机构在人用经验规范收集整理方面的探索实践与展望这是谁的部将?爱犬被攻击,美国大叔一把抓起郊狼就扔进了垃圾桶。今日交易:2023年11月2日我们放弃了Nacos作为配置中心,转而选择了这款神器~AI狂飙时代,数据中心的角色与使命俄乌和加沙战争与美中关系Heilongjiang Gymnasium Collapse Kills 3 Middle School Students又一“七七級大学生”去世解决LLaMA、BERT等部署难题:首个4-bit浮点量化LLM来了又有头部公募出手!汇添富总经理张晖:配置中国资产的黄金窗口已经到来一键配置全球资产!“懒猫全球配置组合”正式上线LLaVA-MoLE:稀疏混合LoRA专家缓解指令微调MLLM中的数据冲突这是全身最“细”的部位,99%的细狗都是因为它...EMNLP 2023 | 解决LLaMA、BERT等部署难题:首个4-bit浮点量化LLM来了使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录2023年投行部门年终奖榜单出炉,第一名的部门竟是……最新!Citi裁员细则爆出,即将进行全面改革:最先被砍的部门是……
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。