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

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

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

使用 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" ]
  }

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

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

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
  • 默认初始化脚本
  • 跳过服务发现
  • 配置说明

后语

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

每天进步一点,哪怕只是一点!文章来源地址https://www.toymoban.com/news/detail-734361.html

到了这里,关于Apollo 配置中心的部署与使用经验的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • nacos2.1.1版本,作为注册中心,配置中心如何使用,nacos服务端启动,微服务搭建,nacos集群化部署

    关于nacos 相信大多数人一样,在接触微服务的时候知道有Netflix系列和alibaba系列 但是Netflix这一套如今由于部分组件不在开源,又有alibaba这一套的出现,市面上,alibaba系列微服务架构已经是最火热的了,而nacos则是alibaba系列组件充当服务注册发现和配置中心的角色 说白了,就是将每个

    2024年02月03日
    浏览(48)
  • Apollo安装与配置使用

    介绍         Apollo(阿波罗)是一款可靠的 分布式配置管理中心 ,诞生于携程框架研发部,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。         服务端基

    2024年02月10日
    浏览(20)
  • mac | Windows 本地部署 Seata2.0.0,Nacos 作为配置中心、注册中心,MySQL 存储信息

    系统 macOS sonama 14.1.1 MySQL 8.2.0 (官方默认是5.7版本) Seata 2.0.0 Nacos 2.2.3 默认你已经有 Nacos、MySQL,如果没有 Nacos 请参考我的文章 : Docker 部署 Nacos(单机),利用 MySQL 数据库存储配置信息 进行安装部署 Seata 下载地址:点此下载 注意:1.5版本(不记得是不是这个版本)之后没有

    2024年04月27日
    浏览(32)
  • Linux 通过 Docker 部署 Nacos 2.2.3 服务发现与配置中心

    名称 版本 IP 端口 Nacos 2.2.3 192.168.10.21 8848、9848 MySQL 8.0.27 192.168.10.20 3306 创建名为 nacos_config 数据库 执行以下 SQL 脚本完成数据表的创建 , Nacos 2.2.3 的数据库在线脚本👉🏻 nacos-db.sql 👈🏻 1. 创建挂载目录 2. 下载镜像 访问 https://hub.docker.com/r/nacos/nacos-server/tags 获取 Nacos 镜像

    2024年02月07日
    浏览(54)
  • 【分布式任务调度】(一)XXL-JOB调度中心集群部署配置

    XXL-JOB是一款轻量级的分布式任务调度中间件,默认支持6000个定时任务,如果生产环境的任务数量在这个范围内,可以选择使用 XXL-JOB。 XXL-JOB由Quartz这款老牌的任务调度中间件演化而来,相对来说,具备以下优势: 操作更简单,学习成本更低 使用异步化调度,性能更好 有配

    2024年02月16日
    浏览(43)
  • 使用 Docker Compose 部署 RabbitMQ 的一些经验与踩坑记录

    RabbitMQ 是一个功能强大的开源消息队列系统,它实现了高效的消息通信和异步处理。 本文主要介绍其基于 Docker-Compose 的部署安装和一些使用的经验。 成熟,稳定 消息持久化 灵活的消息路由 高性能,高可用性,可扩展性高 支持插件系统:RabbitMQ 具有丰富的插件系统,可以通

    2024年02月06日
    浏览(41)
  • BGP路由反射-数据中心IDC项目经验

    一、背景描述 R1,R2,R3在AS200区域内,R1和R2,R1和R3建立OSPF,宣告接口互联. AS200区域内,R1和R2建立IBGP,    R1和R3建立IBGP R2和R4建立EBGP,   R3和R5建立EBGP。 网络拓扑: 二、故障现象 R1和R2可以收到来自AS100区域R4的EBGP路由,R3上面看没有BGP路由,原因是什么? 三、原因分析 从R1设

    2024年01月25日
    浏览(36)
  • 一个基于.NET7的开源DNS服务 DnsServer 的部署使用经验分享

    接上篇 docker-bind 的使用搭建了一个 dns 服务,本篇将介绍另外一款 DnsServer 的部署和使用,更专注,更轻量。 基于 .NET 7 实现 ,支持 Windows、Linux、macOS 和 Raspberry Pi 开箱即用,使用简单,高性能 提供 Web 控制台,可视化管理,查看使用情况 提供了对网络的额外控制,允许阻止

    2024年02月05日
    浏览(43)
  • 使用Nacos作为配置中心

    目录 Nacos配置中心简介 配置中心的思路是: Nacos Config入门 Nacos配置实时更新及同一个微服务不同环境的差异化配置 1 搭建nacos环境【使用现有的nacos环境即可】(上篇文章有Nacos环境搭建) 2 在微服务公共模块中引入nacos的依赖  3 在微服务service-product中添加nacos config的配置 4 在

    2024年02月05日
    浏览(63)
  • k8s部署kafka,并使用zookeeper做注册中心

    kafka在3.x版本后增加KRaft作为自己的注册中心,可以不依赖外部的zk;这里上一篇已经部署好了zk,kafka依然使用zk作为注册中心。 这里使用kafka是为集成zipkin收发微服务接口链路日志数据,只需要部署1个实列即可够用。 编写脚本yaml vi kafka.yaml 执行部署 kubectl apply -f kafka.yaml 查

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包