Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
github地址:https://github.com/ctripcorp/apollo
在官方的wiki 里,有很多资料,包括部署 客户端应用等
github wiki 地址:https://github.com/ctripcorp/apollo/wiki
Apollo 是携程框架研发部门研发的一款基于springboot和springcloud 写的一个配置中心项目,使用长连接实现配置下发,现在已经开源,可以秒级感应热部署配置文件。
Springcloud Config 是springcloud 全家桶里的一员,基于git 做的配置中心,对于热部署配置文件来说,还需要配合 git 的webhook 触发 springcloud bus,达到配置下发,从实现机制来说,Apollo 是要快上许多。而完全依赖于git 的config 不仅配置麻烦,而且感觉会很low。
先说一下我的使用感受,部门里一个微服务支付的项目用的就是springcloud config 配置中心
优点:
来说说缺点:
关于Apollo ,使用感受非常爽,先吹他一个彩虹屁。
优点
:
缺点
:
首先是使用多环境部署,关于Apollo 的环境,支持dev,fat,uat,pro 四种部署环境。
Apollo 包括 服务端,页面前端 与 自己的客户
每一个环境就是一个服务端,前端页面portal 可以集成多个环境,多环境就是比单环境多增加了几个服务端罢了。
如果只想建单环境,起一个服务端即可。
例如
单环境:
在192.16.35.11 上部署dev 的服务端(Apollo-adminserver + Apollo-configserver+portal)
多环境:
在192.16.35.11 上部署dev 的服务端(Apollo-adminserver + Apollo-configserver)
在192.16.35.12 上部署pro 的服务端(Apollo-adminserver + Apollo-configserver)
最后在生产的机器192.16.35.12 上配置 前端页面服务就行 (Apollo-portal)
部署环境:
maven 3.3.9
jdk 1.8
Apollo v0.11.0
dev 服务器 192.16.35.10 (admin-server 与 config-server)
pro 服务器 192.16.35.11(admin-server , config-server,portal)
v1.0.0 之后是用springboot 2.0 写的,而我们自己还是1.5.10
官方文档部署里有声明springboot的某些配置需要v0.10.0 之后
所以这里选了v0.11.0 版本
下载地址:https://github.com/ctripcorp/apollo/releases
自己选择脚本下载tar.gz 的包
然后上传到linux 服务器上,这里采用的是RedHat7.4,centos同理
tar xvf apollo-0.11.0.tar.gz
解压到自己的服务器上。
会看到如下项目路径,windows 使用idea 打开也行
进入scripts 文件夹 里面有个sql 文件,一个是configdb 服务端的sql,一个是portaldb 的sql,每一个服务端需要一个configdb,如果没有多个mysql服务,暂时建在同一个mysql服务下,但是要修改configdb的数据库名字
以下两处 ApolloConfigDB 改为 ApolloConfigDB2
这样在你的mysql 上应该有一个ApolloConfigDB 一个ApolloConfigDB2 一个ApolloPortalDB 三个数据库
分别对应dev环境的数据库 pro 环境的数据库 和 portal 的数据库
在刚刚的sql 同级目录下,有个build.sh 。 windows用bat
修改
#!/bin/sh
# apollo config db info
apollo_config_db_url=jdbc:mysql://your-mysqldb:port/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=root
apollo_config_db_password=******
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://your-mysqldb:port/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=root
apollo_portal_db_password=******
# meta server url, different environments should have different meta server addresses
dev_meta=http://dev:8080
#fat_meta=http://fill-in-fat-meta-server:8080
#uat_meta=http://fill-in-uat-meta-server:8080
pro_meta=http://fill-in-pro-meta-server:8080
META_SERVERS_OPTS="-Ddev_meta=$dev_meta "
# =============== Please do not modify the following content =============== #
这个就很明白了
dev 服务器上不启动portal ,不需要修改portal 的信息,只需要修改apollo config db 的数据库连接信息,连接到 apollo config db
pro 服务器上需要启动portal ,则需要修改portal 的db 信息,注意修改这里apollo config db 的数据库名字已经变成 ApolloConfigDB2了,
另外 meta server 不建议使用8080 端口,可以改为其他,如7070
dev_meta ip 用dev环境的 ip
pro_meta 使用localhost即可
META_SERVERS_OPTS 使用了哪几个环境就填哪几个
# meta server url, different environments should have different meta server addresses
dev_meta=http://192.16.35.10:7070
#fat_meta=http://fill-in-fat-meta-server:8080
#uat_meta=http://fill-in-uat-meta-server:8080
pro_meta=http://localhost:7070
META_SERVERS_OPTS="-Ddev_meta=$dev_meta -Dpro_meta=$pro_meta "
最后两台服务器分别执行 ./build.sh 编译源码
第一次编译需要点时间
编译完成后,在各个项目下会出现target文件,里面有个zip文件夹
例如: apollo-adminservice-0.11.0-github.zip
在dev服务器下 解压 adminservice 和configservice
在pro服务器下 解压adminservice 和configservice,portal
解压到test文件夹下
unzip apollo-adminservice-0.11.0-github.zip -d test
解压完毕后启动项目,在解压出来的test下有个script文件夹,里面有启动脚本
./startup.sh
注意的是 adminservice 直接启动,configservice 刚刚修改了端口7070,需要修改startup.sh 里的端口设置
SERVER_PORT=7070
portal在启动前修改数据库参数,apollo.portal.envs value 改为 dev,pro 有多个环境的,直接 逗号然后加上去就行,然后启动portal,打开192.16.35.11:8070 (pro服务器:port),登录用户/密码 apollo/admin