Apollo(阿波罗) 是携程框架部门研发的分布式配置中心, 能够集中化管理应用不同环境, 不同集群的配置, 配置修改后能够实时推送到应用端, 并且具备规范的权限, 流程治理等特性, 适用于微服务配置管理场景.
github 地址为:
https://github.com/ctripcorp/apollo https://github.com/ctripcorp/apollo
该项目提供了两种部署方式: 本地部署和分布式部署. 生产环境建议使用 "分布式部署".
因最近项目有使用配置中心的需求, 在综合分析了 apollo,Qconf,SpringCloud Config 等一系列分布式配置中心后, 初步选定 apollo.
官方提供的分布式部署架构适合大规模集群环境. 在其总体架构基础上做了精简, 力求先跑起来, 给开发部门提供环境, 测试.
一, 环境准备
1. 服务器信息及节点介绍
主机名称 | IP | 备注 |
---|---|---|
hadoop02.ok.com | 10.150.27.65 | Portalserver/Configserver/adminserver and MySQL |
APPCAN-T-APP-6 | 10.150.27.65 | Configserver/adminserver and MySQL |
软件版本:
- JAVA:
- [root@appcan-t-app-7 scripts]# java -version
- java version "1.8.0_60"
- Java(TM) SE Runtime Environment (build 1.8.0_60-b27)
- Java HotSpot(TM) 64-Bit Server VM (build 25.60-b23, mixed mode)
- MAVEN:
- [root@appcan-t-app-7 scripts]# mvn -version
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T03:49:05+08:00)
Maven home: /usr/local/apache-maven-3.5.3
Java version: 1.8.0_60, vendor: Oracle Corporation
- Java home: /usr/local/jdk1.8.0_60/jre
- Default locale: zh_CN, platform encoding: UTF-8
- OS name: "linux", version: "3.10.0-327.el7.x86_64", arch: "amd64", family: "unix"
- MySQL:
- [root@appcan-t-app-7 scripts]# mysql -uroot -p
- mysql> select version();
- +---------------+
- | version() |
- +---------------+
- | 5.7.19-17-log |
- +---------------+
- 1 row in set (0.01 sec)
架构图如下:
说明:
Portal 部署在 10.150.27.65 上, 通过它来直接管理 DEV,PRO 环境的配置, FAT 和 UAT 环境暂没使用到.
Meta Server,Config Service 和 Admin Service 在 DEV 和 PRO 环境都单独部署, 使用独立的数据库.
Meta Server 和 Config Service 部署在同一个 JVM 进程内, Admin Service 部署在同一台服务器的另一个 JVM 进程内.
二, 部署步骤:
1.clone 项目至本地目录 (/home/ok)
clone https://github.com/ctripcorp/apollo.git
2. 创建数据库
Apollo 服务端共需要两个数据库: ApolloPortalDB 和 ApolloConfigDB, 数据库, 表的创建和样例数据的 sql 文件在项目当中 (/home/ok/apollo/scripts/sql), 只需要导入数据库即可.
需要注意的是 ApolloPortalDB 只需要部署一个即可, 而 ApolloConfigDB 需要在每个环境部署一套, 如本案例中 dev 和 pro 分别部署两套 ApolloConfigDB.
3. 创建 ApolloPortalDB
导入 sql 文件:
mysql> source /home/ok/apollo/scripts/sql/apolloportaldb.sql;
验证:
- mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;
- +----+--------------------+---------+--------------------------+
- | Id | Key | Value | Comment |
- +----+--------------------+---------+--------------------------+
| 1 | apollo.portal.envs | dev | 可支持的环境列表 |
- +----+--------------------+---------+--------------------------+
- 1 row in set (0.00 sec)
4. 创建 ApolloConfigDB
导入 sql 文件:
mysql> source /home/ok/apollo/scripts/sql/apolloconfigdb.sql;
验证:
- mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloConfigDB`.`ServerConfig` limit 1;
- +----+--------------------+-------------------------------+------------------------------------------------------+
- | Id | Key | Value | Comment |
- +----+--------------------+-------------------------------+------------------------------------------------------+
- | 1 | eureka.service.url | http://localhost:8080/eureka/ | Eureka 服务 Url, 多个 service 以英文逗号分隔 |
- +----+--------------------+-------------------------------+------------------------------------------------------+
- 1 row in set (0.00 sec)
注: ApolloConfigDB 需要在每个环境部署一套, 本例中如 dev 和 pro 分别部署 ApolloConfigDB
5. 调整服务端配置
5.1 调整 ApolloPortalDB 配置
apollo.portal.envs - 可支持的环境列表
默认值是 dev, 本例需要增加 pro 环境.
首先在数据库 apolloportaldb-serverconfig-apollo.portal.envs 内新增 pro.
- mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` limit 1;
- +----+--------------------+---------+--------------------------+
- | Id | Key | Value | Comment |
- +----+--------------------+---------+--------------------------+
| 1 | apollo.portal.envs | pro,dev | 可支持的环境列表 |
- +----+--------------------+---------+--------------------------+
- 1 row in set (0.00 sec)
其次配合修改 / home/ok/apollo/scripts/build.sh 文件才能生效:
- #meta server url, different environments should have different meta server addresses
- pro_meta=http://10.150.27.65:8080
- dev_meta=http://10.160.27.67:8080
- META_SERVERS_OPTS="-Ddev_meta=$dev_meta -Dpro_meta=$pro_meta"
organizations - 部门列表
在数据库 apolloportaldb-serverconfig-proorganizations 内修改:
- mysql> select `Id`, `Key`, `Value`, `Comment` from `ApolloPortalDB`.`ServerConfig` where Id=2;
- +----+---------------+------------------------------------------------------------------------------------+--------------+
- | Id | Key | Value | Comment |
- +----+---------------+------------------------------------------------------------------------------------+--------------+
| 2 | organizations | [{"orgId":"BACKEND","orgName":"JAVA"},{"orgId":"TEST2","orgName":"样例部门 2"}] | 部门列表 |
- +----+---------------+------------------------------------------------------------------------------------+--------------+
- 1 row in set (0.00 sec)
5.2 调整 ApolloConfigDB 配置
配置项统一存储在 ApolloConfigDB.ServerConfig 表中, 需要注意每个环境的 ApolloConfigDB.ServerConfig 都需要单独配置.
eureka.service.url - Eureka 服务 Url
每个环境只填入自己环境的 eureka 服务地址.
在 DEV 环境的 ApolloConfigDB.ServerConfig 表中设置 eureka.service.url 为: http://localhost:8080/eureka/
在 PRO 环境的 ApolloConfigDB.ServerConfig 表中设置 eureka.service.url 为: http://localhost:8080/eureka/
6. 配置数据库连接信息
编辑 / home/ok/apollo/scripts/build.sh 文件, 修改 ApolloPortalDB 和 ApolloConfigDB 相关的数据库连接串信息.
- 10.150.27.65:
- #apollo config db info
- apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
- apollo_config_db_username=root
- apollo_config_db_password=bobo365
- #apollo portal db info
- apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
- apollo_portal_db_username=root
- apollo_portal_db_password=bobo365
- 10.150.27.67:
- #apollo config db info
- apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
- apollo_config_db_username=root
- apollo_config_db_password=bobo365
- #apollo portal db info
- apollo_portal_db_url=jdbc:mysql://10.160.27.65:3306/ApolloPortalDB?characterEncoding=utf8
- apollo_portal_db_username=root
- apollo_portal_db_password=bobo365
7. 配置各环境 meta service 地址
Portal 和 Apollo 客户端需要在不同的环境访问不同的 meta service(apollo-configservice) 地址, 所以需要在打包时提供这些信息.
- #meta server url, different environments should have different meta server addresses
- pro_meta=http://10.150.27.65:8080
- dev_meta=http://10.160.27.67:8080
- META_SERVERS_OPTS="-Ddev_meta=$dev_meta -Dpro_meta=$pro_meta"
8. 执行编译, 打包
执行脚本:/home/ok/apollo/scripts/build.sh
该脚本会依次打包 apollo-configservice, apollo-adminservice, apollo-portal 和 apollo-client.
9. 部署 apollo-configservice
将 apollo-configservice/target / 目录下的 apollo-configservice-x.x.x-github.zip 上传到服务器上, 解压后执行 scripts/startup.sh 即可. 如需停止服务, 执行 scripts/shutdown.sh.
- [root@appcan-t-app-7 target]# pwd
- /home/ok/apollo/apollo-configservice/target
- [root@appcan-t-app-7 target]# unzip apollo-configservice-0.9.1-SNAPSHOT-github.zip -d test
10. 部署 apollo-adminservice
将 apollo-adminservice/target / 目录下的 apollo-adminservice-x.x.x-github.zip 上传到服务器上, 解压后执行 scripts/startup.sh 即可. 如需停止服务, 执行 scripts/shutdown.sh.
- [root@appcan-t-app-7 target]# pwd
- /home/ok/apollo/apollo-adminservice/target
- [root@appcan-t-app-7 target]# unzip apollo-adminservice-0.9.1-SNAPSHOT-github.zip -d test
11. 部署 apollo-portal
将 apollo-portal/target / 目录下的 apollo-portal-x.x.x-github.zip 上传到服务器上, 解压后执行 scripts/startup.sh 即可. 如需停止服务, 执行 scripts/shutdown.sh.
apollo-portal 的默认端口是 8080, 和 apollo-configservice 一致, 所以如果需要在一台机器上同时启动 apollo-portal 和 apollo-configservice 的话, 需要修改 apollo-portal 的端口. 直接修改 startup.sh 中的 SERVER_PORT 即可, 如 SERVER_PORT=8070.
- [root@appcan-t-app-7 target]# pwd
- /home/ok/apollo/apollo-portal/target
- [root@appcan-t-app-7 target]# unzip apollo-portal-0.9.1-SNAPSHOT-github.zip -d test
三, Portal 用户登录
登录系统后在 http://{portal 地址}/user-manage.html http://xn--{portal}-9r9u0g/user-manage.html 页面添加用户, 只有超级管理员才能添加用户, 否则会报 403 错误.
系统默认账号: apollo/admin.
Eureka(10.150.27.67) 页面如下:
Eureka(10.150.27.65) 页面如下:
Portal 页面如下:
以上仅仅是服务端的搭建和部署, 真正使用需要结合客户端使用. 如下链接为 Java 客户端使用指南, 供后续研究.
JAVA 客户端使用指南 https://github.com/ctripcorp/apollo/wiki/Java客户端使用指南
来源: http://blog.51cto.com/bobo365/2127941