一、简介
1、apollo简介
Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
Apollo支持4个维度管理Key-Value格式的配置:
application (应用)
environment (环境)
cluster (集群)
namespace (命名空间)
2、apollo的特点
- 统一管理不同环境、不同的集群配置
- 配置修改实时生效(热发布)
- 版本发布管理
- 灰度发布
- 权限管理、发布审核、操作审计
- 客户端配置信息监控
- 提供java和.net原生客户端
- 部署简单
3、基础模型
如下即是Apollo的基础模型:
- 用户在配置中心对配置进行修改并发布
- 配置中心通知Apollo客户端有配置更新
- Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用
4、整体架构设计
上图简要描述了Apollo的总体设计,我们可以从下往上看:
- Config Service提供配置的读取、推送等功能,服务对象是Apollo客户端
- Admin Service提供配置的修改、发布等功能,服务对象是Apollo Portal(管理界面)
- Config Service和Admin Service都是多实例、无状态部署,所以需要将自己注册到Eureka中并保持心跳
- 在Eureka之上我们架了一层Meta Server用于封装Eureka的服务发现接口
- Client通过域名访问Meta Server获取Config Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Client侧会做load balance、错误重试
- Portal通过域名访问Meta Server获取Admin Service服务列表(IP+Port),而后直接通过IP+Port访问服务,同时在Portal侧会做load balance、错误重试
- 为了简化部署,我们实际上会把Config Service、Eureka和Meta Server三个逻辑角色部署在同一个JVM进程中
5、客户端设计
上图简要描述了Apollo客户端的实现原理:
- 客户端和服务端保持了一个长连接,从而能第一时间获得配置更新的推送。
- 客户端还会定时从Apollo配置中心服务端拉取应用的最新配置。
- 这是一个fallback机制,为了防止推送机制失效导致配置不更新
这是一个fallback机制,为了防止推送机制失效导致配置不更新
客户端定时拉取会上报本地版本,所以一般情况下,对于定时拉取的操作,服务端都会返回304 - Not Modified
定时频率默认为每5分钟拉取一次,客户端也可以通过在运行时指定System Property
apollo.refreshInterval来覆盖,单位为分钟。
- 客户端从Apollo配置中心服务端获取到应用的最新配置后,会保存在内存中
- 客户端会把从服务端获取到的配置在本地文件系统缓存一份
- 在遇到服务不可用,或网络不通的时候,依然能从本地恢复配置
- 应用程序从Apollo客户端获取最新的配置、订阅配置更新通知
二、部署
1、部署mysql5.7:使用docker的方式
docker run -itd --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.39
2、创建数据库:
#根据官网提供的sql文件,导入到创建的数据中:
ApolloPortalDB #图形界面数据库
apolloconfig01 #config服务数据库
apolloconfig02 #另外一个config的数据库
3、添加chart仓库并查看:
helm repo add apollo https://charts.apolloconfig.com helm search repo apollo
4、修改value并部署portal:
#拉取portal服务:
helm fetch apollo/apollo-portal --untar
#修改value.yaml文件:
vim values.yaml
portaldb:
name: apollo-portaldb
# apolloportaldb host
host: 113.31.105.127
port: 3306
dbName: ApolloPortalDB
# apolloportaldb user name
userName: root
# apolloportaldb password
password: 123456
helm upgrade --install portal ./apollo-portal -n apollo-01
#配置一个域名,进行访问:默认用户名密码:apollo/admin
52 config:
53 # spring profiles to activate
54 profiles: "github,auth"
55 # specify the env names, e.g. dev,pro
56 envs: "dev,test"
57 # specify the meta servers, e.g.
58 # dev: http://apollo-configservice-dev:8080
59 # pro: http://apollo-configservice-pro:8080
60 metaServers:
61 dev: http://apollo-service-apollo-configservice:8080
5、修改value文件并部署config和admin服务:
#拉去config服务:
helm fetch apollo/apollo-service --untar
#修改value.yaml文件:
configdb:
name: apollo-configdb
# apolloconfigdb host
host: "113.31.105.127"
port: 3306
dbName: apolloconfig01
# apolloconfigdb user name
userName: "root"
# apolloconfigdb password
password: "123456"
#部署两个
helm upgrade --install apollo-service ./apollo-service/ -n apollo-01
helm upgrade --install apollo-service ./apollo-service/ -n apollo-02
6、修改portal的value,添加环境:
vim value.yaml
52 config:
53 # spring profiles to activate
54 profiles: "github,auth"
55 # specify the env names, e.g. dev,pro
56 envs: "dev,test"
57 # specify the meta servers, e.g.
58 # dev: http://apollo-configservice-dev:8080
59 # pro: http://apollo-configservice-pro:8080
60 metaServers:
61 dev: http://apollo-service-apollo-configservice:8080
62 test: http://apollo-service-apollo-configservice.apollo-02:8080
#添加两个环境:dev和test,dev对应apollo-01中的服务,test对应apollo-02里面的服务
#更新:
helm upgrade portal ./apollo-portal -f apollo-portal/values.yaml -n apollo-01
#重启portal
kubectl rollout restart deploy/portal-apollo-portal -n apollo-01
7、查看是否生效:
8、创建一个应用:
在部门选择时,只有两个默认的,需要通过数据库进行修改:
#表:ServerConfig
#定义为自己的名称:例如项目名称或公司名称,我们这里定义为:sllyn
可以看到这个新创建的应用已经有两个环境了,如果还需要增加环境:
部署一套新的apollo-service
修改portal,增加环境即可。
参考文档:Apollo
【完成】