Apollo分布式配置中心部署以及使用
一、简介
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
官方github:https://github.com/ctripcorp/apollo
作者对Apollo对介绍:https://github.com/ctripcorp/apollo/wiki/Apollo配置中心介绍
二、安装部署
基础设施
本次部署环境为DEV(开发环境)、FAT(测试环境)、UAT(预生产)、PRO(生产)
应用服务器:

数据库服务器:

配置
下载代码:
git clone https://github.com/ctripcorp/apollo.git
1
比较重要的几个项目:
apollo-configservice:提供配置获取接口,提供配置更新推送接口,接口服务对象为Apollo客户端
apollo-adminservice:提供配置管理接口,提供配置修改、发布等接口,接口服务对象为Portal,以及Eureka
apollo-portal:提供Web界面供用户管理配置
apollo-client:Apollo提供的客户端程序,为应用提供配置获取、实时更新等功能

上图简要描述了配置发布的大致过程:
用户在Portal操作配置发布
Portal调用Admin Service的接口操作发布
Admin Service发布配置后,发送ReleaseMessage给各个Config Service
Config Service收到ReleaseMessage后,通知对应的客户端
数据库初始化:
下面的sql为大写格式,注意数据库的大小写敏感设置
ApolloPortalDB:执行apollo\scripts\sql\apolloportaldb.sql
ApolloConfigDB:DEV FAT UAT PRO 环境执行apollo\scripts\sql\apolloconfigdb.sql
调整配置并打包:
在Apollo项目中找到目录apollo\scripts\的配置文件build.bat或者build.bat
数据库配置
修改数据库配置,上面的是ApolloConfigDB配置,下面的是ApolloPortalDB配置:
# apollo config db info 该数据库配置只需要配置一次,不同环境无需修改
apollo_config_db_url=jdbc:mysql://192.168.35.227:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=XXXX
apollo_config_db_password=XXXX
# apollo portal db info 该数据库依据不同环境配置对应的数据库连接,并且需要多次打对应环境的JAR包
apollo_portal_db_url=jdbc:mysql://192.168.35.226:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=XXXX
apollo_portal_db_password=XXXX
1
2
3
4
5
6
7
8
9
apollo config db info 该数据库配置只需要配置一次,不同环境无需修改
apollo portal db info 该数据库依据不同环境配置对应的数据库连接,并且需要多次打
修改环境调用地址
# meta server url, different environments should have different meta server addresses
dev_meta=http://192.168.35.207:9100
fat_meta=http://192.168.35.208:9100
uat_meta=http://192.168.35.209:9100
pro_meta=http://192.168.35.210:9100
1
2
3
4
5
修改数据库数据
在DEV FAT UAT PRO 对应的ApolloConfigDB数据库中,找到表ServerConfig中的eureka.service.url配置项:
UPDATE apolloconfigdb.ServerConfig SET ServerConfig.`Value`='http://localhost:9100/eureka/' WHERE `Key`='eureka.service.url';
1
具体eureka配置,可以查看官网:https://github.com/ctripcorp/apollo/wiki/分布式部署指南
编译、打包
./build.sh
1
该脚本会依次打包apollo-configservice, apollo-adminservice, apollo-portal和apollo-client。
由于ApolloConfigDB在每个环境都有部署,所以对不同环境的config-service和admin-service需要使用不同的数据库连接信息打不同的包,portal和client只需要打一次包即可
开始部署
部署程序到对应的服务器
部署apollo-configservice
将apollo-configservice/target/目录下的apollo-configservice-x.x.x-github.zip上传到服务器上,解压
修改scripts/startup.sh :
LOG_DIR=/opt/logs/100003171
SERVER_PORT=9100
1
2
执行scripts/startup.sh即可
如需停止服务,执行scripts/shutdown.sh.
部署apollo-adminservice
将apollo-adminservice/target/目录下的apollo-adminservice-x.x.x-github.zip上传到服务器上,解压
修改scripts/startup.sh:
LOG_DIR=/opt/logs/100003172
SERVER_PORT=9101
1
2
执行scripts/startup.sh即可
如需停止服务,执行scripts/shutdown.sh.
部署apollo-portal
将apollo-portal/target/目录下的apollo-portal-x.x.x-github.zip上传到服务器上,解压
修改scripts/startup.sh:
LOG_DIR=/opt/logs/100003173
SERVER_PORT=9102
1
2
执行scripts/startup.sh即可
如需停止服务,执行scripts/shutdown.sh.
访问测试
上面部署完成,可以测试
访问不同环境的eureka,查看服务注册情况是否正确:
http://192.168.35.207:9100/
1
如果可以看到:
192.168.35.207:apollo-adminservice:9101
192.168.35.207:apollo-configservice:9100
1
2
两个服务都为UP,正常!
访问客户端:
http://192.168.35.206:9102/
1
登录,默认用户名密码为:apollo/admin
新建项目测试。
三、使用配置中心配置信息
maven引入上面步骤编译打包成功的apollo-core和apollo-client包:
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-core</artifactId>
<version>0.11.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>0.11.0-SNAPSHOT</version>
</dependency>
1
2
3
4
5
6
7
8
9
10
创建app.properties
请确保classpath:/META-INF/app.properties文件存在,并且其中内容为自己的项目名称,而且要保持唯一:
app.id=demo
1
环境变量配置
本地开发
如果是本地开发,可以在开发工具添加Environment:
env=DEV
1
线上环境配置方式:
使用Java启动参数添加java -Denv=YOUR-ENVIRONMENT -jar xxx.jar
通过操作系统的System Environment
通过配置文件:
对于Mac/Linux,文件位置为/opt/settings/server.properties
对于Windows,文件位置为C:\opt\settings\server.properties
配置apollo-env.properties
在项目中引用apollo-core和apollo-client包,在apollo-core包中可以看到apollo-env.properties配置文件,默认配置为打包前配置的信息:
local.meta=http://localhost:8080
dev.meta=http://192.168.35.207:9100
fat.meta=http://192.168.35.208:9100
uat.meta=http://192.168.35.209:9100
lpt.meta=${lpt_meta}
pro.meta=http://192.168.35.210:9100
1
2
3
4
5
6
如果需要修改或者覆盖的话,在项目的resources从上面复制一个apollo-env.properties文件,修改对应环境信息就可以了
启用配置
在启动类添加@EnableApolloConfig注解即可:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author chihiro.zhang
*/
@EnableApolloConfig
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
测试
添加一个测试的类DemoConfiguration,当然配置中心要有下面配置的配置信息:
@Configuration
@EnableAutoConfiguration
public class DemoConfiguration {
@Value("${demo}")
private String demo;
}
1
2
3
4
5
6
完成!
四、部署方案
这个图是计划部署的方案,并不是上面写的例子的方案

Apollo分布式配置中心部署以及使用的更多相关文章
- Apollo 分布式配置中心
1. 介绍 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置 ...
- Apollo 分布式配置中心(补充)
1. Namespace 1.1. 什么是Namespace Namespace是配置项的集合,类似于一个配置文件的概念. Apollo在创建项目的时候,都会默认创建一个“application ...
- 携程apollo分布式配置中心
原理 : apollo的部署 jdk 要求8以上 mysql 5.7以上 执行build.sh 这样就把configService,adminService 打包到对应的target下面 把这个放到l ...
- 分布式配置中心Apollo
1,什么是分布式配置中心 项目中配置文件比较繁杂,而且不同环境的不同配置修改相对频繁,每次发布都需要对应修改配置,如果配置出现错误,需要重新打包发布,时间成本较高,因此需要做统一的分布式注册中心,能做 ...
- 分布式配置中心 携程(apollo)
1.传统配置文件与分布式配置文件区别 传统配置文件:如果修改了配置文件,需要重新打包发布,重新发布服务,而且每个环境的变更配置文件,比较繁琐. 分布式配置文件:将配置文件注册到配置中心上去,可以使用分 ...
- spring cloud 集成分布式配置中心 apollo(单机部署apollo)
一.什么是apollo? Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用 ...
- 实践分布式配置中心Apollo
简介 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理场景 ...
- 分布式配置中心Apollo——QuickStart
分布式配置中心 剥离配置文件,实现动态修改,自动更新. [假设没有分布式配置中心,修改配置文件后都需要重启服务,对于数量庞多的微服务开发来说,就会非常繁琐] 分布式配置中心有哪些 disconf(依赖 ...
- Apollo系列(一):分布式配置中心Apollo安装(Linux、Docker)
一.介绍 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境.不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限.流程治理等特性,适用于微服务配置管理 ...
随机推荐
- C与C++中实现 gotoxy()函数
#include <stdio.h> #include <windows.h> void gotoxy(int x, int y) { COORD pos = {x,y}; H ...
- C++学习(三)(C语言部分)之 基本数据类型
基本数据类型 上期回顾 stdlib.h system,命令release MT导入ico文件 基本数据类型 整数 int浮点型(小数 实型) float double字符型 char 变量 常量速度 ...
- 通过阻止 touchstart 事件,解决移动端的 BUG
在 iOS10 下,即使设置了 meta 标签的 user-scalable=no 依然不能阻止用户缩放. 解决此 BUG 的方法是阻止 PC 事件: document.addEventListene ...
- 初始Openwrt
系统结构 在上一章我们已经完成了刷机工作,这个时候系统进行了首次启动,并且格式化了它的"可写"分区.那么在设备里分区到底是怎么样进行的呢?我们首先需要知道:不同的处理器下OpenW ...
- chrome浏览器好用的插件
1.Chrome批量保存所有选项卡网址 + 批量打开复制网址小插件 批量保存所有选项卡网址插件:Copy All Urls 经常搜索一些东西,下班时无法处理完所有网页内容,比如做笔记什么的,又不舍得关 ...
- TypeScript 知识点
TypeScript 通过 类型批注 提供静态类型以在编译时启动类型检查. 基本批注类型是number.bool.string.而弱或动态类型是any. typescript 使用 作用 语句 全局安 ...
- java 连接 hiveserver2 例子
启动了 hiveserver2 以后才能使用 程序连接 .目前的 使用的 是 server2 版本.和以前的版本驱动包名不同: package hadoop; import java.sql.Co ...
- php Call to undefined function imagettftext()问题解决
测试代码出现报错Call to undefined function imagettftext(),发现是gd库出现了问题 通过phpInfo()查看 gd库已经开启,但是里边没有freeType 和 ...
- Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' 解决办法
启动mysql 报错: ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/lib/mysql/m ...
- 关于 unsigned int 比较大小
unsigned int 的所有数都是 >=0 的.比如 unsigned int 的 -2 也是 > 0 的,所以不能用自己常用的 upt( ) { if( x<0 ) x+=mo ...