携程Apollo统⼀配置中⼼的搭建和使⽤(java)
⼀.Apollo配置中⼼介绍
1、What is Apollo
1.1 Apollo简介
Apollo()是携程框架部门研发的开源配置管理中⼼,能够集中化管理应⽤不同环境、不同集的配置,配置修改后能够实时推送到应⽤端,并且具备规范的权限、流程治理等特性。
Apollo⽀持4个维度管理Key-Value格式的配置:
1. application (应⽤)
2. environment (环境)
3. cluster (集)
4. namespace (命名空间)
⼆、分布式部署指南
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⽬前⽀持以下环境:
mysql下载的zip版本安装步骤DEV
开发环境
FAT
测试环境,相当于alpha环境(功能测试)
UAT
集成环境,相当于beta环境(回归测试)
PRO
⽣产环境
⾃定义环境,参考
2、部署步骤
部署步骤共三步:
1. 创建数据库
ApolloconfigDB(),
1. Apollo服务端依赖于MySQL数据库,所以需要事先创建并完成初始化
2. 获取安装包:GitHub地址:
1. Apollo服务端安装包共有3个:apollo-configservice, apollo-adminservice, apollo-portal
1. 可以直接下载我们事先打好的安装包,也可以⾃⼰通过源码构建
2. Apollo客户端jar包中由于会包含meta server信息,⽆法上传⼀个统⼀的jar包到中央仓库
2.
1. 可以直接下载我们事先打好的安装包,修改相应配置后上传到⾃⼰公司的Maven私服
2. 也可以直接通过源码构建并上传到公司的Maven私服
3. 部署Apollo服务端
1. 获取安装包后就可以部署到公司的测试和⽣产环境了
2.1 创建数据库
Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB
2.1.1 创建ApolloPortalDB
通过各种MySQL客户端导⼊即可。
导⼊成功后,可以通过执⾏以下sql语句来验证:
select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;
Id Key Value Comment
vs dev可⽀持的环境列表
注:ApolloPortalDB只需要在⽣产环境部署⼀个即可
2.1.2 创建ApolloConfigDB
通过各种MySQL客户端导⼊即可。
导⼊成功后,可以通过执⾏以下sql语句来验证:
select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDB`.`ServerConfig` limit 1;
Id Key Value Comment
1eureka.service.url Eureka服务Url
注:ApolloConfigDB需要在每个环境部署⼀套,如fat、uat和pro分别部署3套ApolloConfigDB
2.1.3 调整服务端配置
Apollo⾃⾝的⼀些配置是放在数据库⾥⾯的。
2.1.
3.1 调整ApolloPortalDB配置
配置项统⼀存储在ApolloPortalDB.ServerConfig表中。
1.vs - 可⽀持的环境列表
默认值是dev,如果portal需要管理多个环境的话,以逗号分隔即可(⼤⼩写不敏感),如:
DEV,FAT,UAT,PRO
注1:⼀套Portal可以管理多个环境,但是每个环境都需要独⽴部署⼀套Config Service、Admin Service和ApolloConfigDB 注2:只在数据库添加环境是不起作⽤的,还需要为apollo-portal和apollo-client添加新增环境对应的meta server地址。
Portal中新建的App都需要选择部门,所以需要在这⾥配置可选的部门信息,样例如下:
[{"orgId":"TEST1","orgName":"样例部门1"},{"orgId":"TEST2","orgName":"样例部门2"}]
3.superAdmin - Portal超级管理员
超级管理员拥有所有权限
默认值apollo(默认⽤户),多个账号以英⽂逗号分隔(,)。
如果会使⽤开放平台API的话,可以设置⼀个token salt。如果不使⽤,可以忽略。
5.wiki.address
portal上“帮助”链接的地址,默认是Apollo github的wiki⾸页,可⾃⾏设置。
atePrivateNamespace.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/后缀)。
如:内⽹开发环境
1. 在DEV环境的ApolloConfigDB.ServerConfig表中设置eureka.service.url为:
注1:这⾥需要填写本环境中全部的eureka服务地址,因为eureka需要互相复制注册信息
注2:如果希望将Config Service和Admin Service注册到公司统⼀的Eureka上
pollo默认⾃带了Eureka作为内部的注册中⼼实现,⼀般情况下不需要考虑为Apollo单独部署注册中⼼。
如需要注册到⾃⼰的Eureka,需修改Config Service:
1. 修改,把@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 {
...
}
1. 修改ApolloConfigDB.ServerConfig表中的eureka.service.url,指向⾃⼰的Eureka地址
需要注意的是更改Eureka地址只需要改ApolloConfigDB.ServerConfig表中的eureka.service.url即可,不需要修改meta server地址。
2.namespace.lock.switch - ⼀次发布只能有⼀个⼈修改开关,⽤于发布审核
这是⼀个功能开关,如果配置为true的话,那么⼀次配置发布只能是⼀个⼈修改,另⼀个发布。
这是⼀个功能开关,如果配置为true的话,config service会缓存加载过的配置信息,从⽽加快后续配置获取性能。
默认为false,开启前请先评估总配置⼤⼩并调整config service内存配置。
2.2 获取安装包
可以通过两种⽅式获取安装包:
1. 直接下载安装包
1. 从页⾯下载预先打好的安装包
2. GitHub地址:
3. 如果对Apollo的代码没有定制需求,建议使⽤这种⽅式,可以省去本地打包的过程
4. 测试V0.11.0版本,在下载安装包,成功部署后,后台默认账号密码会出现密码错误,后来使⽤了源码构建
2. 通过源码构建
1. 从页⾯下载Source code包或直接clone后在本地构建
2. GitHub地址:
3. 如果需要对Apollo的做定制开发,需要使⽤这种⽅式