【有哪些坑】Apollo配置中心FAQ常见问题列表

news2024/9/29 20:22:42

使用某个框架之前,得先看看前辈们踩过的坑。

他人的间接经验 -> 自己的直接经验

前车之鉴,后事之师。比喻前人失败了,后人应该从中吸取教训,避免再犯同样的错误。

常见问题回答

1. Apollo是什么?

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

更多介绍,可以参考Apollo配置中心介绍

2. Cluster是什么?

一个应用下不同实例的分组,比如典型的可以按照数据中心分,把A机房的应用实例分为一个集群,把B机房的应用实例分为另一个集群。

3. Namespace是什么?

一个应用不同配置的分组。 请参考Apollo核心概念之“Namespace”

4. 我想要接入Apollo,该如何操作?

请参考Apollo使用指南

5. 我的应用需要不同机房的配置不一样,Apollo是否能支持?

Apollo是支持的。请参考Apollo使用指南中的三、集群独立配置说明

6. 我有多个应用需要使用同一份配置,Apollo是否能支持?

Apollo是支持的。请参考Apollo使用指南中的四、多个AppId使用同一份配置

7. Apollo是否支持查看权限控制或者配置加密?

1.1.0版本开始,apollo-portal增加了查看权限的支持,可以支持配置某个环境只允许项目成员查看私有Namespace的配置

这里的项目成员是指:

  • 项目的管理员
  • 具备该私有Namespace在该环境下的修改或发布权限

配置方式很简单,用超级管理员账号登录后,进入管理员工具 - 系统参数页面新增或修改configView.memberOnly.envs配置项即可。
在这里插入图片描述
配置加密可以参考spring-boot-encrypt demo项目

8. 如果有多个config server,打包时如何配置meta server地址?

有多台meta server可以通过Nginx反向代理,通过一个域名代理多个meta server实现。

9. Apollo相比于Spring Cloud Config有什么优势?

Spring Cloud Config的精妙之处在于它的配置存储于Git,这就天然的把配置的修改、权限、版本等问题隔离在外。通过这个设计使得Spring Cloud Config整体很简单,不过也带来了一些不便之处。

下面尝试做一个简单的小结:
在这里插入图片描述

10. Apollo和Disconf相比有什么优点?

由于我们自己并非Disconf的资深用户,所以无法客观地给出评价。不过之前Apollo技术支持群中的热心网友 @Krast 做了一个开源配置中心对比矩阵,可以参考一下。

部署&开发遇到的常见问题

1. windows怎么执行build.sh?

安装Git Bash,然后运行 ./build.sh 注意前面 ./
也可以直接运行build.bat

2. 本地运行时Portal一直报Env is down.

默认config service启动在8080端口,admin service启动在8090端口。请确认这两个端口是否被其它应用程序占用。

如果还伴有异常信息:org.springframework.web.client.HttpClientErrorException: 405 Method Not Allowed,一般是由于本地启动了ShadowSocks,因为ShadowSocks默认会占用8090端口。

1.1.0版本增加了系统信息页面,可以通过管理员工具 -> 系统信息查看当前各个环境的Meta Server以及admin service信息,有助于排查问题

3. admin server 或者 config server 注册了内网IP,导致portal或者client访问不了admin server或config server

请参考网络策略。

4. Portal如何增加环境?

4.1 1.6.0及以上的版本

1.6.0版本增加了自定义环境的功能,可以在不修改代码的情况增加环境。

  1. protaldb增加环境,参考3.1 调整ApolloPortalDB配置
  2. 为apollo-portal添加新增环境对应的meta server地址,具体参考:2.2.1.1.2.4 配置apollo-portal的meta service信息。apollo-client在新的环境下使用时也需要做好相应的配置,具体参考:1.2.2 Apollo Meta Server。

注1:一套Portal可以管理多个环境,但是每个环境都需要独立部署一套Config Service、Admin Service和ApolloConfigDB,具体请参考:2.1.2 创建ApolloConfigDB,3.2 调整ApolloConfigDB配置,2.2.1.1.2 配置数据库连接信息

注2:如果是为已经运行了一段时间的Apollo配置中心增加环境,别忘了参考2.1.2.4 从别的环境导入ApolloConfigDB的项目数据对新的环境做初始化

注3:如果自定义的环境名称为 PROD,会被强制转换为 PRO。FWS 会被强制转换为 FAT。

4.2 1.5.1及之前的版本

4.2.1 添加Apollo预先定义好的环境

如果需要添加的环境是Apollo预先定义的环境(DEV, FAT, UAT, PRO),需要两步操作:

  1. protaldb增加环境,参考3.1 调整ApolloPortalDB配置
  2. 为apollo-portal添加新增环境对应的meta server地址,具体参考:2.2.1.1.2.4 配置apollo-portal的meta service信息。apollo-client在新的环境下使用时也需要做好相应的配置,具体参考:1.2.2 Apollo Meta Server。

注1:一套Portal可以管理多个环境,但是每个环境都需要独立部署一套Config Service、Admin Service和ApolloConfigDB,具体请参考:2.1.2 创建ApolloConfigDB,3.2 调整ApolloConfigDB配置,2.2.1.1.2 配置数据库连接信息

注2:如果是为已经运行了一段时间的Apollo配置中心增加环境,别忘了参考2.1.2.4 从别的环境导入ApolloConfigDB的项目数据对新的环境做初始化

4.2.2 添加自定义的环境

如果需要添加的环境不是Apollo预先定义的环境,请参照如下步骤操作:

  1. 假设需要添加的环境名称叫beta
  2. 修改com.ctrip.framework.apollo.core.enums.Env类,在其中加入BETA枚举:
  3. 修改com.ctrip.framework.apollo.core.enums.EnvUtils类,在其中加入BETA枚举的转换逻辑:
  4. 修改apollo-env.properties,增加beta.meta占位符:
  5. 修改com.ctrip.framework.apollo.core.internals.LegacyMetaServerProvider类,增加读取BETA环境的meta server地址逻辑:
  6. protaldb增加BETA环境,参考3.1 调整ApolloPortalDB配置
  7. 为apollo-portal添加新增环境对应的meta server地址,具体参考:2.2.1.1.2.4 配置apollo-portal的meta service信息。apollo-client在新的环境下使用时也需要做好相应的配置,具体参考:1.2.2 Apollo Meta Server。

注1:一套Portal可以管理多个环境,但是每个环境都需要独立部署一套Config Service、Admin Service和ApolloConfigDB,具体请参考:2.1.2 创建ApolloConfigDB,3.2 调整ApolloConfigDB配置,2.2.1.1.2 配置数据库连接信息

注2:如果是为已经运行了一段时间的Apollo配置中心增加环境,别忘了参考2.1.2.4 从别的环境导入ApolloConfigDB的项目数据对新的环境做初始化

5. 如何删除应用、集群、Namespace?

0.11.0版本开始Apollo管理员增加了删除应用、集群和AppNamespace的页面,建议使用该页面进行删除。

页面入口:
在这里插入图片描述
页面详情:
在这里插入图片描述

6. 客户端多块网卡造成获取IP不准,如何解决?

获取客户端网卡逻辑在1.4.0版本有所调整,所以需要根据客户端版本区分。

6.1 apollo-client为1.3.0及之前的版本

如果有多网卡,且都是普通网卡的话,需要在/etc/hosts里面加一条映射关系来提升权重。

6.2 apollo-client为1.4.0及之后的版本

如果有多网卡,且都是普通网卡的话,可以通过调整它们在系统中的顺序来改变优先级,顺序在前的优先级更高。

7. 通过Apollo动态调整Spring Boot的Logging level

可以参考apollo-use-cases项目中的spring-cloud-logger和spring-boot-logger代码示例。

8. 将Config Service和Admin Service注册到单独的Eureka Server上

Apollo默认自带了Eureka作为内部的注册中心实现,一般情况下不需要考虑为Apollo单独部署注册中心。

9. Spring Boot中使用ConditionalOnProperty读取不到配置

@ConditionalOnProperty功能从0.10.0版本开始支持,具体可以参考 Spring Boot集成方式

10. 多机房如何实现A机房的客户端就近读取A机房的config service,B机房的客户端就近读取B机房的config service?

请参考Issue 1294,该案例中由于中美机房相距甚远,所以需要config db两地部署,如果是同城多机房的话,两个机房的config service可以连同一个config db。

11. apollo是否有支持HEAD请求的页面?阿里云slb配置健康检查只支持HEAD请求

apollo的每个服务都有/health页面的,该页面是apollo用来做健康检测的,支持各种请求方法,如GET, POST, HEAD等。

12. apollo如何配置查看权限?

1.1.0版本开始,apollo-portal增加了查看权限的支持,可以支持配置某个环境只允许项目成员查看私有Namespace的配置。

这里的项目成员是指:

  • 项目的管理员
  • 具备该私有Namespace在该环境下的修改或发布权限

配置方式很简单,用超级管理员账号登录后,进入管理员工具 - 系统参数页面新增或修改configView.memberOnly.envs配置项即可。
在这里插入图片描述

13. apollo如何放在独立的tomcat中跑?

有些公司的运维策略可能会要求必须使用独立的tomcat跑应用,不允许apollo默认的startup.sh方式运行,下面以apollo-configservice为例简述一下如何使apollo服务端运行在独立的tomcat中:

14. 注册中心Eureka如何替换为ZooKeeper?

许多公司微服务项目已经在使用ZooKeeper,如果出于方便服务管理的目的,希望Eureka替换为ZooKeeper的情况,可以参考@hanyidreamer贡献的改造步骤:注册中心Eureka替换为zookeeper

15. 本地多人同时开发,如何实现配置不一样且互不影响?

参考#1560

16. Portal挂载到nginx/slb后如何设置相对路径?

一般情况下建议直接使用根目录来挂载portal,不过如果有些情况希望和其它应用共用nginx/slb,需要加上相对路径(如/apollo),那么可以按照下面的方式配置。

17. Portal挂载到nginx/slb后如何配置https?

  1. 在nginx/slb上配置https访问配置,以nginx为例:
  2. 配置apollo-portal解析反向代理的header信息

修改apollo-portal安装包中config目录下的application-github.properties,增加以下配置:

server.forward-headers-strategy=framework

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2136583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

关于STM32项目面试题01:电源

博客的风格是:答案一定不能在问题的后面,要自己想、自己背;回答都是最精简、最精简、最精简,可能就几个字,你要自己自信的展开。 面试官01:说说你知道的开关电源的拓扑结构? 面试官02&#xff1…

Nacos下载和启动

Nacos是什么? 一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台 下载 https://github.com/alibaba/nacos/releases/tag/2.1.1启动 将下载好的Nacos解压缩,然后到bin目录下打开cmd 输入指令:startup.cmd -m standalone 出…

Apache DolphinScheduler 跨工作流复杂依赖功能详解

大家好,我叫高楚枫,来自阿里云 EMR 团队的开发工程师,同时也是 Apache DolphinScheduler 的 PMC 成员之一。 今天非常高兴能在这里和大家分享关于跨工作流复杂依赖的功能详解。 引言 在现代的数据处理和调度过程中,工作流的依赖…

STL_string 常用的用法

string里常用的函数与讲解使用 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ (点击进入c关于string 的各个函数的全面讲解使用/英文版) Iterators(迭代器): begin与end: …

门磁模块详解(防盗感应开关 STM32)

目录 一、介绍 二、程序设计 main.c文件 gate_guard.h文件 gate_guard.c文件 三、实验效果 四、资料获取 项目分享 一、介绍 MC-38常闭式门磁开关是作为IO开关输入数字信号的,原理是合在一起信号是导通的 , 配合有线主机使用 不能单独使用。适用于非铁质&a…

RK3588镜像打包制作,替换文件系统

1.在开发板上安装async apt-get async 2.在另一台linux机器上执行命令拷贝文件系统 注意: 这里使用root权限或者账户 mkdir rootfs rsync -avx root192.168.1.3:/ rootfs 3.制作空镜像文件 先去开发板上验证自己的系统使用了多少空间,然后输入命令制…

grafana升级指南

已有grafana在使用,需要升级新版本的grafana,操作如下: 1.先把之前的grafana文件夹整个备份 2.在grafana官网下载OSS的zip版本,不要msi版本 3.在原来的grafana文件夹里,把新版本的文件夹都复制进来,但是…

CVE-2024-21096:MySQLDump提权漏洞分析

CVE-2024-21096是一个中等严重性的漏洞,它影响Oracle MySQL Server产品中的mysqldump组件。成功利用此漏洞的未认证攻击者可能对MySQL Server的数据进行未授权的更新、插入或删除操作,还可以读取MySQL Server可访问数据的一部分,并可能导致My…

代码随想录算法训练营第五十九天 | dijkstra(堆优化版)精讲

目录 dijkstra(堆优化版)精讲 思路 堆优化细节 方法一: 最小堆优化 dijkstra(堆优化版)精讲 题目链接:卡码网:47. 参加科学大会 文章讲解:代码随想录 小明是一位科学家&#x…

MySQL 事务的 ACID 特性与应用

MySQL事务的ACID特性与应用 数据库事务 是保障数据一致性和完整性的关键机制。事务不仅是并发控制的核心,更是数据恢复的基本单位。本文将带你深入了解MySQL中的事务概念、ACID特性以及如何在实际应用中正确处理事务。 1. 什么是事务? 事务&#xff0…

基于Vue的兴趣活动推荐APP的设计与实现_kaic

摘 要 近年来,随着互联网不断的普及与发展,生活也变的多姿多彩,每个人几乎都有属于自己的小小兴趣圈子,但人们的兴趣却不止一个,大多数人是没有时间为自己的兴趣“买单”的。为了解决我们在生活中对于各种兴趣活动的…

学习笔记缓存篇(一)

1、如何解决热key 1、本地缓存 采用本地缓存的优点在于简单,扩容方便。但是会带来一致性的问题。 2、离散热点key 做法:结合当前节点的ip或者机器的MAC地址去得出一个固定值拼接在key后面。访问时也是根据key,到后端固定的edis上。 优点&…

学习结构体的使用

对于结构体的创建,首先要创建一个结构体类型,像下面这样: 结构体对成员的访问,就是变量名.成员就可以了 当然对于结构体的声明还有一些特殊的声明 结构体的自引用 结构体的重命名

Linux 35.5 + JetPack v5.1.3@CUDA安装和版本切换

Linux 35.5 JetPack v5.1.3CUDA安装和版本切换 1. 源由2. 现象3. 分析3.1 看本质3.2 善动脑3.3 笔记回忆3.4 底层思考3.5 多版本 4. 版本切换5. 总结 1. 源由 最近遇到一些CUDA编程,以及编译链接过程出现一些版本不匹配的问题。 首先,申明下&#xff…

【网络安全的神秘世界】渗透测试基础

🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 | 每天学会一个渗透测试工具 渗透测试基础 基于功能去进行漏洞挖掘 1、编辑器漏洞 1.1 编辑器漏洞介绍 一般企业搭建网站可能采用了通用模板&#xff…

神经网络的公式推导与代码实现(论文复现)

神经网络的公式推导与代码实现(论文复现) 本文所涉及所有资源均在传知代码平台可获取 概述 本文将详细推导一个简单的神经网络模型的正向传播、反向传播、参数更新等过程,并将通过一个手写数字识别的例子,使用python手写和pytorch…

充电管理芯片

1.接口 typec SBU引脚(辅助通道) SBU引脚是Type-C接口母座中的辅助通道,用于支持附加的功能,如模拟音频和视频传输。通过SBU引脚,Type-C接口母座可以实现更广泛的连接应用,包括连接到外部显示器、音频设备…

【前端】main.js中app.vue中 render函数的作用及使用背景

vue.js中的main.js中的作用是将app组件挂载到页面中&#xff0c;其中app组件是汇总所有组件元素的组件。main.js的创建vue实例。 #认为的版本 import APP from ./App.vue;new Vue({el:#root,template:<App></App>,components:{App}, })#实际的版本 /* 整个项目的入…

基于imx6ull平台opencv的图像采集和显示屏LCD显示功能(带Qt界面)

目录 一、概述二、环境要求2.1 硬件环境2.2 软件环境三、开发流程3.1 编写测试3.2 验证功能一、概述 本文档是针对imx6ull平台opencv的图像采集和显示屏LCD显示功能,创建Qt工程,在工程里面通过点击按钮,实现opencv通过摄像头采集视频图像,将采集的视频图像送给显示屏LCD进…

docker-compose elasticsearch 集群搭建(用户登录+https访问)

文章目录 前言docker-compose elasticsearch 集群搭建(用户登录+https访问)1. 效果2. 制作elasticsearch + 分词器镜像2.1. 拉取elasticsearch:7.11.12.2. 制作特定版本镜像3. docker-compose elasticsearch 集群制作4. es账户密码初始化前言 如果您觉得有用的话,记得给博主点…