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.7container_name: apollo_db_5_7restart: alwaysenvironment:TZ: Asia/ShanghaiMYSQL_ROOT_PASSWORD: 'devops666'ports:- "13306:3306"volumes:- ./initsql:/docker-entrypoint-initdb.d- ./data:/var/lib/mysqlnetworks:- devopsnetwork# Apollo 服务发现注册中心apollo-configservice:container_name: apollo_configservice_2_1image: apolloconfig/apollo-configservice:2.1.0restart: alwaysdepends_on:- apollo-dbenvironment: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: falsevolumes:- ./logs:/opt/logsports:- "8080:8080"networks:- devopsnetwork#核心接口服务apollo-adminservice:container_name: apollo_adminservice_2_1image: apolloconfig/apollo-adminservice:2.1.0restart: alwaysenvironment: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-dbports:- "8090:8090"volumes:- ./logs/:/opt/logs networks:- devopsnetworkapollo-portal:image: apolloconfig/apollo-portal:2.1.0container_name: apollo_portal_2_1restart: alwaysenvironment: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 admindepends_on:- apollo-dbports:- "8070:8070"volumes:- ./logs/:/opt/logs networks:- devopsnetworknetworks: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:pro
organizations:[{"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.Configuration
-
appsetting.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 配置中心的部署与使用经验
前言 Apollo(阿波罗)是携程开源的分布式配置管理中心。 本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验 特点 成熟,稳定支持管理多环境/多集群/多命名空间的配置配置修改发布实时(1s)通知到应用程序支…...
Perl中的设计模式革新:命令模式的实现与应用
Perl中的设计模式革新:命令模式的实现与应用 在面向对象编程中,设计模式是解决特定问题的成熟模板。命令模式作为行为设计模式之一,它将请求封装为对象,从而允许用户根据不同的请求对客户进行参数化。本文将深入探讨如何在Perl中…...
Java8-求两个集合取交集
在Java8中,求两个集合的交集可以使用不同的三种方式:传统的循环遍历、使用Stream API的filter操作和使用Stream API的Collection操作。 方法一:传统的循环遍历 首先,我们创建两个集合list1和list2,并给它们添加一些元…...

爬虫学习4:爬取王者荣耀技能信息
爬虫:爬取王者荣耀技能信息(代码和代码流程) 代码 # 王者荣耀英雄信息获取 import time from selenium import webdriver from selenium.webdriver.common.by import By if __name__ __main__:fp open("./honorKing.txt", "…...
在Ubuntu 14.04上安装和使用Memcache的方法
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 随着您的网站的增长和流量的增加,最快显示压力的组件之一是后端数据库。如果您的数据库没有分布式和配置来处理高负载…...
PCDN技术如何降低运营成本?
PCDN技术通过以下几种方式降低运营商的运营成本: 1.利用用户设备作为缓存节点: PCDN技术将用户设备纳入内容分发网络,利用这些设备的闲置带宽和存储资源来缓存和分发内容。这种方式不需要运营商投入大量的高成本服务器和带宽资源,从而降低了硬件和带宽…...

服务器数据恢复—V7000存储硬盘故障脱机的数据恢复案例
服务器存储数据恢复环境: 某品牌P740小型机AIXSybaseV7000磁盘阵列柜,磁盘阵列柜中有12块SAS机械硬盘(其中包括一块热备盘)。 服务器存储故障: 磁盘阵列柜中有一块磁盘出现故障,运维人员用新硬盘替换掉故障…...

BSV区块链在人工智能时代的数字化转型中的角色
发表时间:2024年6月13日 企业数字化转型已有约30年的历史,而人工智能(以下简称AI)将这种转型提升到了一个全新的高度。这并不难理解,因为AI终于使企业能够发挥其潜力,实现更宏大的目标。然而࿰…...
android audio 相机按键音:(二)加载与修改
相机按键音资源,加载文件路径: frameworks/av/services/camera/libcameraservice/CameraService.cpp 按键音,加载函数: void CameraService::loadSoundLocked(sound_kind kind) { ATRACE_CALL(); LOG1("Cam…...
Linux grep技巧 提取log中的json数据
目录 一. 前提1.1 数据准备1.2 需求1.3 分析 二. 数据提取2.1 提取所有的json数据2.2 提取子项目的全部json数据2.3 提取指定项目的json数据 一. 前提 1.1 数据准备 545-1 2024/07/20 18:20:21 [ERROR] MPX001 eventControlleraupay transactionIdA545 {"event":&q…...
HDShredder 7 企业版案例分享: 依照国际权威标准,安全清除企业数据
HDShredder 7 企业版用户案例 天津鸿萌科贸发展有限公司是德国 Miray 公司 HDShredder 数据清除软件的授权代理商。近日,上海某网络科技有限公司采购 HDShredder 7 企业版x4,为公司数据存储资产的安全清除工作流程配备高效的执行工具。HDShredder 7 企业…...
centos系统使用mysqldump数据备份与恢复
文章目录 使用mysqldump备份数据库一、数据库备份1. 基础备份2. 额外选项(一般组合使用) 二、数据库恢复 使用mysqldump备份数据库 一、数据库备份 1. 基础备份 #备份单个数据库 mysqldump -u 用户名 -p 数据库名 > 备份文件.sql#备份多个数据库 mysqldump -u 用户名 -p …...

【element ui】input输入控件绑定粘贴事件,从 Excel 复制的数据粘贴到输入框(el-input)时自动转换为逗号分隔的数据
目录 1、需求2、实现思路:3、控件绑定粘贴事件事件修饰符说明: 4、代码实现🚀写在最后 1、需求 在 Vue 2 和 Element UI 中,要实现从 Excel 复制空格分隔的数据,并在粘贴到输入框(el-input)时自动转换为逗号分隔的数据…...

Chapter18 基于物理的渲染——Shader入门精要学习
Chapter18 基于物理的渲染 一、PBS理论和数学基础1.光是什么微表面模型 2.渲染方程3.精确光源4.双向反射分布函数 BRDF5.漫反射项(Lambert 模型)Lambertian BRDF为:Disney BRDF中漫反射项 6.高光反射项微面元理论BRDF的高光反射项①菲涅尔反射…...

DolphinScheduler学习
1.查看文档 点击访问:https://dolphinscheduler.apache.org/zh-cn/docs 我们可以看到相关的文档简介里有 介绍 DolphinScheduler是Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景,提供了一个可视化…...

我用Tauri开发的待办效率工具开源了!
开源仓库地址 gitee Git仓库地址:https://gitee.com/zhanhongzhu/zhanhongzhu.git 应用地址 windows应用地址下载 https://kestrel-task.cn 具体内容 也可以看🎉使用Taurivitekoa2mysql开发了一款待办效率应用 这篇文章。 💻技术栈 Tauri: Tauri…...

【黑科技】:Laravel 项目性能提升 20 倍
令人激动的黑科技:Laravel 项目性能提升 20 倍 这个项目能够在无需修改任何代码且无需第三方扩展的前提下,将你的 Laravel 项目性能提高 20 倍。它仅依赖于 PHP 原生的 pcntl、posix、fiber 和 sockets。 项目灵感 起因是看到官方发布的 PHP 8.1 更新…...

User Allocation In MEC: A DRL Approach 论文笔记
论文:ICWS 2021 移动边缘计算中的用户分配:一种深度强化学习方法 代码地址:使用强化学习在移动边缘计算环境中进行用户分配 目录 Ⅰ.Introduction II. MOTIVATION-A.验证假设的观察结果 II. MOTIVATION-A Motivating Example 数据驱动…...
leetcode 69. x 的平方根
可以使用二分查找法或牛顿迭代法来实现 LeetCode 问题 69. x 的平方根。下面是使用二分查找法和牛顿迭代法的 C 实现。 二分查找法 #include <iostream>class Solution { public:int mySqrt(int x) {if (x 0) return 0;int left 1, right x, ans 0;while (left <…...

基于词级ngram的词袋模型对twitter数据进行情感分析
按照阿光的项目做出了学习笔记,pytorch深度学习实战项目100例 基于词级ngram的词袋模型对twitter数据进行情感分析 什么是 N 符? N 格是指给定文本或语音样本中 n 个项目的连续序列。这些项目可以是音素、音节、字母、单词或碱基对,具体取…...

Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练
前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
sqlserver 根据指定字符 解析拼接字符串
DECLARE LotNo NVARCHAR(50)A,B,C DECLARE xml XML ( SELECT <x> REPLACE(LotNo, ,, </x><x>) </x> ) DECLARE ErrorCode NVARCHAR(50) -- 提取 XML 中的值 SELECT value x.value(., VARCHAR(MAX))…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...