一.Apollo配置中心介绍
1、What is Apollo
1.1 Apollo简介
Apollo(阿波罗)是携程框架部门研发的开源配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。
Apollo支持4个维度管理Key-Value格式的配置:
- application (应用)
- environment (环境)
- cluster (集群)
- namespace (命名空间)
同时,Apollo基于开源模式开发,开源地址:https://github.com/ctripcorp/apollo
二、分布式部署指南
1.环境
1.1 Java
- Apollo服务端:1.8+
- Apollo客户端:1.7+
可以通过如下命令检查:
java -version
样例输出:
java version "1.8.0_74"
Java(TM) SE Runtime Environment (build 1.8.0_74-b02)
Java HotSpot(TM) 64-Bit Server VM (build 25.74-b02, mixed mode)
1.2 MySQL
- 版本要求:5.6.5+
连接上MySQL后,可以通过如下命令检查:
SHOW VARIABLES WHERE Variable_name = 'version';
Variable_name | Value |
---|---|
version | 5.7.11 |
1.3、环境
分布式部署需要事先确定部署的环境以及部署方式。
Apollo目前支持以下环境:
- DEV
- 开发环境
- FAT
- 测试环境,相当于alpha环境(功能测试)
- UAT
- 集成环境,相当于beta环境(回归测试)
- PRO
- 生产环境
自定义环境,参考部署&开发遇到的常见问题#42-添加自定义的环境
2、部署步骤
部署步骤共三步:
- 创建数据库
ApolloconfigDB(),
- Apollo服务端依赖于MySQL数据库,所以需要事先创建并完成初始化
- 获取安装包:GitHub地址:https://github.com/ctripcorp/apollo/releases
- Apollo服务端安装包共有3个:apollo-configservice, apollo-adminservice, apollo-portal
- 可以直接下载我们事先打好的安装包,也可以自己通过源码构建
- Apollo客户端jar包中由于会包含meta server信息,无法上传一个统一的jar包到中央仓库
-
- 可以直接下载我们事先打好的安装包,修改相应配置后上传到自己公司的Maven私服
- 也可以直接通过源码构建并上传到公司的Maven私服
- Apollo服务端安装包共有3个:apollo-configservice, apollo-adminservice, apollo-portal
- 部署Apollo服务端
- 获取安装包后就可以部署到公司的测试和生产环境了
2.1 创建数据库
Apollo服务端共需要两个数据库:ApolloPortalDB
和ApolloConfigDB
2.1.1 创建ApolloPortalDB
sql:下载地址:https://github.com/ctripcorp/apollo/tree/master/scripts/sql
通过各种MySQL客户端导入sql/apolloportaldb.sql即可。
导入成功后,可以通过执行以下sql语句来验证:
select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;
Id | Key | Value | Comment |
---|---|---|---|
1 | apollo.portal.envs | dev | 可支持的环境列表 |
注:ApolloPortalDB只需要在生产环境部署一个即可
2.1.2 创建ApolloConfigDB
sql:下载地址:https://github.com/ctripcorp/apollo/tree/master/scripts/sql
通过各种MySQL客户端导入sql/apolloconfigdb.sql即可。
导入成功后,可以通过执行以下sql语句来验证:
select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDB`.`ServerConfig` limit 1;
Id | Key | Value | Comment |
---|---|---|---|
1 | eureka.service.url | http://127.0.0.1:8080/eureka/ | Eureka服务Url |
注:ApolloConfigDB需要在每个环境部署一套,如fat、uat和pro分别部署3套ApolloConfigDB
2.1.3 调整服务端配置
Apollo自身的一些配置是放在数据库里面的。
2.1.3.1 调整ApolloPortalDB配置
配置项统一存储在ApolloPortalDB.ServerConfig表中。
1.apollo.portal.envs - 可支持的环境列表
默认值是dev,如果portal需要管理多个环境的话,以逗号分隔即可(大小写不敏感),如:
DEV,FAT,UAT,PRO
注1:一套Portal可以管理多个环境,但是每个环境都需要独立部署一套Config Service、Admin Service和ApolloConfigDB
注2:只在数据库添加环境是不起作用的,还需要为apollo-portal和apollo-client添加新增环境对应的meta server地址。
2.organizations - 部门列表
Portal中新建的App都需要选择部门,所以需要在这里配置可选的部门信息,样例如下:
[{"orgId":"TEST1","orgName":"样例部门1"},{"orgId":"TEST2","orgName":"样例部门2"}]
3.superAdmin - Portal超级管理员
超级管理员拥有所有权限
默认值apollo(默认用户),多个账号以英文逗号分隔(,)。
4.consumer.token.salt - consumer token salt
如果会使用开放平台API的话,可以设置一个token salt。如果不使用,可以忽略。
5.wiki.address
portal上“帮助”链接的地址,默认是Apollo github的wiki首页,可自行设置。
6.admin.createPrivateNamespace.switch
是否允许项目管理员创建private namespace。设置为true
允许创建,设置为false
则项目管理员在页面上看不到创建private namespace的选项。
2.1.3.2 调整ApolloConfigDB配置
配置项统一存储在ApolloConfigDB.ServerConfig表中,需要注意每个环境的ApolloConfigDB.ServerConfig都需要单独配置。
1.eureka.service.url - Eureka服务Url
apollo-configservice和apollo-adminservice都需要向eureka服务注册,需要配置eureka服务地址。默认apollo-configservice本身就是一个eureka服务,所以只需要填入apollo-configservice的地址即可,如有多个,用逗号分隔(注意不要忘了/eureka/后缀)。
如:内网开发环境
- 在DEV环境的ApolloConfigDB.ServerConfig表中设置eureka.service.url为:
注1:这里需要填写本环境中全部的eureka服务地址,因为eureka需要互相复制注册信息
注2:如果希望将Config Service和Admin Service注册到公司统一的Eureka上
pollo默认自带了Eureka作为内部的注册中心实现,一般情况下不需要考虑为Apollo单独部署注册中心。
如需要注册到自己的Eureka,需修改Config Service:
- 修改com.ctrip.framework.apollo.configservice.ConfigServiceApplication,把
@EnableEurekaServer
改为@EnableEurekaClient
@EnableEurekaClient @EnableAspectJAutoProxy @EnableAutoConfiguration // (exclude = EurekaClientConfigBean.class) @Configuration @EnableTransactionManagement @PropertySource(value = {"classpath:configservice.properties"}) @ComponentScan(basePackageClasses = {ApolloCommonConfig.class, ApolloBizConfig.class, ConfigServiceApplication.class, ApolloMetaServiceConfig.class}) public class ConfigServiceApplication { ... }
- 修改ApolloConfigDB.ServerConfig表中的
eureka.service.url
,指向自己的Eureka地址
需要注意的是更改Eureka地址只需要改ApolloConfigDB.ServerConfig表中的
eureka.service.url
即可,不需要修改meta server地址。
2.namespace.lock.switch - 一次发布只能有一个人修改开关,用于发布审核
这是一个功能开关,如果配置为true的话,那么一次配置发布只能是一个人修改,另一个发布。
3.config-service.cache.enabled - 是否开启配置缓存
这是一个功能开关,如果配置为true的话,config service会缓存加载过的配置信息,从而加快后续配置获取性能。
默认为false,开启前请先评估总配置大小并调整config service内存配置。
2.2 获取安装包
可以通过两种方式获取安装包:
- 直接下载安装包
- 从GitHub Release页面下载预先打好的安装包
- GitHub地址:https://github.com/ctripcorp/apollo/releases
- 如果对Apollo的代码没有定制需求,建议使用这种方式,可以省去本地打包的过程
- 测试V0.11.0版本,在下载安装包,成功部署后,后台默认账号密码会出现密码错误,后来使用了源码构建
- 通过源码构建
- 从