首页 > 其他分享 >Apollo 配置中心的部署与使用经验

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

时间:2023-10-31 19:22:54浏览次数:40  
标签:Deureka Apollo 服务 部署 配置 db 192.168 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; 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 是注册中心的接口地址

相关文档

后语

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

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

标签:Deureka,Apollo,服务,部署,配置,db,192.168,apollo
From: https://www.cnblogs.com/morang/p/devops-apollo-install.html

相关文章

  • IDEA配置Tomcat老是在浏览器中包资源找不到404错误
    Idea报了一个404老是访问不到我的项目地址,花了我好久的时间,我可算是整出来了。废话不多说,上图。第一步排错:发现上边url:https://localhost:8080/事实上这个url是指向不了我们项目的,也就是说这个url的指向是找不到我们项目的路径的。接下来第二步:看下边那行有个红色圈圈的警告,我......
  • 使用hardhat框架,将合约部署到Sepolia测试网中
    1.在hardhat.config.js中写入sepolia的测试网路径,以及自己私有钱包的密钥将自己的默认网络设置为测试网的网络,注意solidity的版本号要保持一致 2.在.env文件中填写基本参数,添加dotenv便于读  3.在etherscan.io/myapikey里面获取自己的apikey并添加到.env中 注意:在用ha......
  • 从数据预处理到模型部署
    近年来,人工智能技术的高速发展备受瞩目,而其中的一个关键领域就是机器学习模型的开发和部署。越来越多的企业和组织开始投入巨资进行模型开发和部署,以提升自身业务的智能化水平。为了帮助大家更好地理解和掌握模型开发与部署的相关知识,我们特地整理了本次直播的关键内容,带大家深入探......
  • Redis部署架构
    部署架构单节点(Single)优点架构简单,部署方便高性价比:缓存使用时无需备用节点(单实例可用性可以用supervisor或crontab保证),当然为了满足业务的高可用性,也可以牺牲一个备用节点,但同时刻只有一个实例对外提供服务高性能缺点不保证数据的可靠性在缓存使用,进......
  • 智能合约开发-环境部署
    1.下载dotenv包yarnadddotenv导入require("dotenv).config()2.在.env中导入需要配置的信息,用于其它地方调用使用,例如: 3.调用使用方法process.env.参数名称例如: ......
  • 基恩士扫码枪配置及测试(RS232连接
       ......
  • go gorm 配置日志
    newLogger:=logger.New(log.New(os.Stdout,"\r\n",log.LstdFlags),logger.Config{ SlowThreshold:time.Second,//满阈值 Colorful:true,//日志颜色开启 ParameterizedQueries:false,//sql参数可见,true就是? LogLevel:l......
  • PasteSpider之appsettings.json中的Serilog的配置,分流不同日志层级的信息!
    在实际使用Serilog中,我们通常会有不一样的需求,常见的比如1.按照等级,高级哪个等级的才记录2.记录文件每个多大,超过的划分到下一个文件中3.不同等级的记录到不同的位置中4.按照不一样的格式输出以下是PasteSpider中的appsettings.json中关于Serilog的配置"Serilog":{......
  • Oracle 参数 STANDBY_FILE_MANAGEMENT 官方解释,作用,如何配置最优化建议
    本站中文解释STANDBY_FILE_MANAGEMENT:用于控制应用日志文件的处理,如果设置为AUTO时,此参数将用于控制应用日志文件是被自动删除、备份或迁移,以满足物理备份恢复要求。设置正确的方法:1.在Oracle实例中,使用ALTERSYSTEM命令将STANDBY_FILE_MANAGEMENT参数的值设置为AUTO:ALTERSYS......
  • Java配置工具:typesafe config使用文档超详解
    文章目录一、typesafeconfig概述1、官网2、优点3、JSON超集特性(HOCON)(1)实例4、版本概述二、typesafeconfig基本使用1、API示例2、更多示例3、不变性4、模式和验证5、配置文件加载6、合并配置树7、处理默认值8、理解Config和ConfigObject9、理解ConfigFactory一、typesafeconfig......