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 获取,这里只分享下步骤和些注意的地方
初始化数据库
- 可以使用已有或者部署 mysql 服务,并创建 apollo 专门的账号密码
- 执行 Apollo 对应版本的 v2.1 默认初始化脚本 创建 ApolloConfigDB,ApolloPortalDB
- 生产环境 记得修改 ServerConfig 表的 环境和组织
apollo.portal.envs:proorganizations:[{"orgId":"xxx","orgName":"xxx公司"}]
使用 helm 添加 apollo repo
安装 apollo-service
安装 apollo-portal
k8s 使用
- 可以将 Apollo 相关配置存储到 k8s 的 ConfigMap 中方便 k8s 服务中使用
使用
.NET SDK
官方:Com.Ctrip.Framework.Apollo.Configuration
添加包:
Com.Ctrip.Framework.Apollo.Configurationappsetting.json 中添加 apollo 配置
- MetaServer:Apollo 服务地址,系统信息中也可以查看到
- AppId:应用 Id
- Namespaces:命名空间默认是 application
获取参数注册:可以是配置,也可以是从环境变量中
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; charset=utf-8";
//配置服务
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 是注册中心的接口地址
相关文档
- Github 地址
- 官方文档
- 模块介绍
- Docker 方式部署 Quick Start
- 分布式部署
- 部署架构
- 性能测试
- .NET SDK: apollo.net
- 默认初始化脚本
- 跳过服务发现
- 配置说明
后语
时间充裕的情况最好是过一遍文档,知道是怎么设计的,遇到问题真会一头雾水。
每天进步一点,哪怕只是一点!
Apollo 配置中心的部署与使用经验的更多相关文章
- docker apollo配置中心分布式部署
Apollo 简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服 ...
- 基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势)
基于winserver的Apollo配置中心分布式&集群部署实践(正确部署姿势) 前言 前几天对Apollo配置中心的demo进行一个部署试用,现公司已决定使用,这两天进行分布式部署的时候 ...
- Win10上部署Apollo配置中心
基于Docker在Win10上部署Apollo配置中心 https://www.jianshu.com/p/a1215056ce75 http://nobodyiam.com/2016/07/09/i ...
- Apollo配置中心
背景: 当前我们项目,所有的配置基本都是通过本地properties 文件进行配置的,比如ip地址.端口.消息中间件和数据库连接的各种参数,当我们需要切换环境或调整参数的时候,我们必须手动的修改这些配 ...
- apollo配置中心初探
近在搞微服务框架的开发,需要有一个配置中心来满足统一管理业务应用以及组件的配置,在此期间也使用了多个配置中心比如:spring cloud config,自研的配置中心,当然还有apollo. spr ...
- spring boot2.1读取 apollo 配置中心1
第一篇:搭建apollo配置中心 为什么选择apollo,我做了一些对比: Diamond Disconf Apollo Spring Cloud Config 数据持久性 mysql mysql ...
- Apollo配置中心转
尊重原创,本文转自:https://www.cnblogs.com/FlyAway2013/p/8811385.html 前我们项目,所有的配置基本都是通过本地properties 文件进行配置的,比 ...
- 携程 Apollo 配置中心传统 .NET 项目集成实践
官方文档存在的问题 可能由于 Apollo 配置中心的客户端源码一直处于更新中,导致其相关文档有些跟不上节奏,部分文档写的不规范,很容易给做对接的新手朋友造成误导. 比如,我在参考如下两个文档使用传统 ...
- Spring Boot 2.0 整合携程Apollo配置中心
原文:https://www.jianshu.com/p/23d695af7e80 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够 ...
- Apollo配置中心介绍与使用指南
转载于https://github.com/ctripcorp/apollo,by Ctrip, Inc. Apollo配置中心介绍 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中 ...
随机推荐
- 揭开 RocketMQ 事务消息的神秘面纱
事务消息是 RocketMQ 的高级特性之一,相信很多同学都对于其实现机制很好奇. 这篇文章,笔者会从应用场景.功能原理.实战例子.实现细节四个模块慢慢为你揭开事务消息的神秘面纱. 1 应用场景 以电 ...
- 图像处理_Retinex图像增强
单尺度SSR (Single Scale Retinex) 图像 S ( x , y ) S(x,y) S(x,y)分解为两个不同的图像:反射图像 R ( x , y ) R(x,y) R(x,y), ...
- 从0开发WebGPU渲染引擎:实现路径追踪
大家好,本文基于WebGPU的计算着色器实现了基础的路径追踪器,支持Middle BVH和No BVH两种加速结构 我主要是将离线渲染零基础实战开发培训班(一期)->第二十九节课的代码移植到We ...
- 使用Hexo搭建个人博客网站
参考CSDN上的博客.特此感谢wsmrzx.
- 2023年郑州轻工业大学校赛邀请赛zzh
第一次参加线下赛体验很好,面包和酸奶很好吃.ABL三题难度超出我们的能力范围,没能写出来,C题在读完题后,我们三个简单交流了一下,确定思路后我写的代码,一次AC,很顺利.D题简单的01背包,但我在写代 ...
- PostgreSQL 9.6 文档: 数据类型
章 8. 数据类型 目录 8.1. 数字类型 8.1.1. 整数类型 8.1.2. 任意精度数字 8.1.3. 浮点类型 8.1.4. 序数类型 8.2. 货币类型 8.3. 字符类型 8.4. 二进 ...
- 使用guestmount更改qcow2镜像内容
参考: 使用guestmount更改qcow2镜像内容 guestmount 安装 yum install libguestfs libguestfs-tools -y 使用 guestmount - ...
- 文心一言 VS 讯飞星火 VS chatgpt (66)-- 算法导论6.5 5题
五.试分析在使用下列循环不变量时,HEAP-INCREASE-KEY 的正确性:在算法的第4~6行 while循环每次迭代开始的时候,子数组 A[1..A.heap-size]要满足最大堆的性质.如果 ...
- Cilium系列-8-绕过 IPTables 连接跟踪
系列文章 Cilium 系列文章 前言 将 Kubernetes 的 CNI 从其他组件切换为 Cilium, 已经可以有效地提升网络的性能. 但是通过对 Cilium 不同模式的切换/功能的启用, ...
- Module build failed: TypeError: this.getOptions is not a function at Object.loader
这个问题主要是因为node-loader版本过高导致的问题 解决方案 css-loader降为3.6.0版本即可 npm install css-loader@2.0.2 --save-dev npm ...