一. 部署说明
apollo配置中心由三个组件组成:
- ConfigService
配置中心,客户端从这个服务拉配置,同时内置了Eureka、MetaService。每个环境要有一个
- AdminService
配置管理服务,管理数据库配置,Portal调这个服务修改、发布配置,每个环境要有一个
- PortalService
管理后台服务,就是那个用账号密码登录的后台,此服务只需部署一个
多环境指的是由DEV、LOCAL、FAT这些环境组成,每套环境必需包含两个服务:ConfigService和 AdminService。
Portal只需部署一个服务,三套环境组件接入到Portal进行配置管理。Portal通过调用AdminService来修改、发布配置。
二. 架构
三. 环境准备
- mysql数据库:一台或多台,dev、fat、local、portal 一共有4个数据库
- linux服务器:一台或多台,一台服务器通过区分不同端口部署多个服务
四. 部署
1. 创建数据库
- 数据库
创建数据库用户数据库用户,以及配置数据库权限。
环境 | 数据库 | 说明 |
---|---|---|
DEV | ApolloConfigDB_DEV | 开发环境配置数据库 |
FAT | ApolloConfigDB_FAT | 测试环境配置数据库 |
LOCAL | ApolloConfigDB_LOCAL | 本地开发环境配置数据库 |
AplloPortalDB | 管理后台数据库(用户、权限管理) |
- 初始化
下载初始化sql,创建表和基础数据,注意:如果是在旧的数据库升级,不要执行此脚本,此脚本会清空数据。
数据库初始化
https://github.com/apolloconfig/apollo/blob/v2.0.1/scripts/sql/apolloportaldb.sql
https://github.com/apolloconfig/apollo/blob/v2.0.1/scripts/sql/apolloconfigdb.sql
2. 端口/AppId规划
端口 | 服务 | 环境 | AppID |
---|---|---|---|
8080 | ConfigService | DEV | 100003171 |
8090 | AdminService | DEV | 100003172 |
8081 | ConfigService | FAT | 100003173 |
8091 | AdminService | FAT | 100003174 |
8082 | ConfigService | LOCAL | 100003175 |
8092 | AdminService | LOCAL | 100003176 |
8070 | Portal | - | 100003170 |
3. 安装包下载
- 到github下载apollo部署程序,这里用的是2.0.1版本。
https://github.com/apolloconfig/apollo/releases/tag/v2.0.1
4. 配置修改
- ConfigService 配置
解压 AdminService,在config目录找到
application-github.properties
配置文件,修改数据库连接配置。
# dev、fat、local连的数据库不一样,每个环境都有独立一个数据库
spring.datasource.url = jdbc:mysql://fill-in-the-correct-server:3306/ApolloConfigDB_DEV?characterEncoding=utf8
spring.datasource.username = FillInCorrectUser
spring.datasource.password = FillInCorrectPassword
同样在config目录修改
app.properties
中的AppId,不同的服务,AppId不能一样。
appId=100003171
jdkVersion=1.8
- 在scripts目录,找到
startup.sh
脚本,在JAVA_OPTS变量中添加eureka的配置,注意区分环境。
export JAVA_OPTS="$JAVA_OPTS -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Deureka.instance.homePageUrl=http://192.168.204.44:9080/env-dev -Dserver.servlet.context-path=/env-dev -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"
- AdminService配置
数据库配置:
config/application-github.properties
# dev、fat、local连的数据库不一样,每个环境都有独立一个数据库
spring.datasource.url = jdbc:mysql://fill-in-the-correct-server:3306/ApolloConfigDB_DEV?characterEncoding=utf8
spring.datasource.username = FillInCorrectUser
spring.datasource.password = FillInCorrectPassword
appId配置:
config/app.properteis
appId=100003172
jdkVersion=1.8
- Portal配置
数据库配置:application-github.properties
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
spring.datasource.username = FillInCorrectUser
spring.datasource.password = FillInCorrectPassword
appId配置
appId=100003170
jdkVersion=1.8
元数据配置:config/apollo-env.properties
local.meta=http://apollo.threegene.cn/env-local
dev.meta=http://apollo.threegene.cn/env-dev
fat.meta=http://apollo.threegene.cn/env-fat
- 数据库配置修改
- eureka地址修改
- 在ApolloConfigDB_DEV 数据库 ServiceConfig表找到
eureka.service.url
所在行,将值修改为:
http://apollo.threegene.cn/env-dev/eureka
- 可用环境配置
在ApolloPortalDB数据库找到 ServiceConfig表,修改可用环境变量:
5. 部署服务
如果是同一台服务器部署所有服务,在服务器上分别创建 dev、local、fat目录,用于存放三套环境的部署程序。不同环境的部署过程一样,以下以dev环境为例。
启动
将修改好配置的ConfigService、AdminService放到dev目录,分别启动ConfigService和AdminService
# 启动
sh script/startup.sh
# 关闭
sh script/shutdown.sh
验证
打开eureka界面,查看启动的configService和adminService有没有注册上来,能查到,说明启动正常
地址:http://apollo.threegene.cn/env-dev/
fat和local环境参照dev的部署过程
Portal部署
apollo portal是管理后台,不用多环境部署,只需要部署一个服务即可。
将修改好的配置的程序传到服务器,启动服务
# 启动
sh script/startup.sh
# 关闭
sh script/shutdown.sh
服务默认端口是8070,启动后,通过ip+8070可以访问到portal后台,apollo默认账号密码是 apollo/admin
登入后台后,检查服务状态是否正常,以下所示:
五. 生产环境部署
1. 部署架构
- 服务器
为了保证配置中心的高可用,生产环境至少要有两台 linux 服务器,架构规划如下:
apollo服务 | 服务器 | 端口 |
---|---|---|
ConfigService | linux-1 | 8080 |
AdminService | linux-1 | 8090 |
Apollo-Portal | linux-1 | 8070 |
ConfigService | linux-2 | 8080 |
AdminService | linux-2 | 8090 |
- 数据库
数据库使用mysql云服务,最好是高可用数据库。
数据库 | 说明 |
---|---|
ApolloConfigDB | 配置数据库 |
ApolloPortalDB | 管理中心数据库 |
2. 部署步骤
生产部署可参照开发测试的部署,过程差不多
- 创建和初始化数据库
ApolloPortalDB初始化 https://github.com/apolloconfig/apollo/blob/v2.0.1/scripts/sql/apolloportaldb.sql
ApolloConfigDB初始化 https://github.com/apolloconfig/apollo/blob/v2.0.1/scripts/sql/apolloconfigdb.sql
注意:初始化sql会重新建表,将会清空整个数据库。
初始化数据库后,要修改 ApolloConfigDB.ServerConfig 表里的eureka配置
以及 ApolloPortalDB.Service里面的环境配置信息
-
在Linux-1部署 ConfigService、AdminService、Apollo-Portal
-
在Linux-2部署 ConfigService、AdminService
-
配置域名
-
配置apollo域名,解析到配置中心,参照C端的域名配置。
六. 常见问题
- eureka后台服务没有注册上来
这种情况一般是由于ServiceConfig表和ConfigService服务启动参数中配置的eureka参数不一样导致的,检查数据库和程序的启动参数是否配置正确。
- 服务日志在哪里看
默认情况下,apollo的日志放在 /opt/logs目录,每个appId对应有一个日志文件
- 服务拉不到配置
检查 dev/fat/local三套环境的configService启动参数配置的启动参数路径与网关的路径是否一致。
JAVA_OPTS="$JAVA_OPTS -XX:ParallelGCThreads=4 -XX:MaxTenuringThreshold=9 -XX:+DisableExplicitGC -XX:+ScavengeBeforeFullGC -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+ExplicitGCInvokesConcurrent -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -Deureka.instance.homePageUrl=http://192.168.204.44:9080/env-dev -Dserver.servlet.context-path=/env-dev -Duser.timezone=Asia/Shanghai -Dclient.encoding.override=UTF-8 -Dfile.encoding=UTF-8 -Djava.security.egd=file:/dev/./urandom"