内容参考Apollo官网https://www.apolloconfig.com/
1. 部署架构
分布式部署需要事先确定部署的环境以及部署方式,Apollo目前支持以下环境:
- DEV
开发环境
- FAT
测试环境,相当于alpha环境(功能测试)
- UAT
集成环境,相当于beta环境(回归测试)
- PRO
生产环境
另外也可以添加自定义环境。
本次演示部署架构图如下:
以上面的架构图为例:
- Portal部署在生产环境的机房,通过它来直接管理多个环境(DEV、FAT、UAT、PRO等环境)的配置
- Config Service和Admin Service在每个环境都单独部署,使用独立的数据库
- Config Service和Admin Service部署在同一台服务器。
注意:具体部署方案,可以根据实际情况进行调整,如何调整可参考后面的部署讲解。
2. 环境
2.1 环境说明
- apollo-portal是配置的管理端,可以统一管理多套环境的配置(apollo节点)。也可以每套环境独立部署一个apollo-portal,只管理该环境的配置(apollo节点)。
- 每个节点部署一个apollo-configservice和apollo-adminservice
- 每套环境可以部署多个节点,建议生产环境部署两个以上的节点。开发环境的节点个数可自行决定,可以只部署一个节点。
- apollo-portal需要访问ApolloPortalDB数据库。
- 每套环境需要有一个独立的ApolloConfigDB数据库,同一套环境的apollo-configservice和apollo-configservice访问同一个ApolloConfigDB数据库。
2.2 部署案例说明
以下的案例中,将会演示:
- 在DEV、FAT、UAT、PRO环境各部署一套Apollo。
- 每套环境部署两个apollo节点,每个节点包含一个apollo-configservice和一个apollo-adminservice。
- 部署一个apollo-portal,管理多套环境。
2.3 软件准备
MySQL5.7或以上版本:数据库服务器需要安装5.7或以上的MySQL数据库
JDK1.8:非数据库服务器都要安装JDK1.8。
2.4 服务器准备
环境 | 服务器 | 服务 | 端口 |
/ | 192.168.35.100 | apollo-portal | 8070 |
192.168.35.102 | MySQL数据库ApolloPortalDB | 3306 | |
DEV | 192.168.35.105 | apollo-configservice | 8080 |
apollo-adminservice | 8090 | ||
192.168.35.106 | apollo-configservice | 8080 | |
apollo-adminservice | 8090 | ||
192.168.35.108 | MySQL数据库ApolloConfigDB | 3306 | |
FAT | 192.168.35.115 | apollo-configservice | 8080 |
apollo-adminservice | 8090 | ||
192.168.35.116 | apollo-configservice | 8080 | |
192.168.35.118 | MySQL数据库ApolloConfigDB | 3306 | |
UAT | 192.168.35.125 | apollo-configservice | 8080 |
apollo-adminservice | 8090 | ||
192.168.35.126 | apollo-configservice | 8080 | |
apollo-adminservice | 8090 | ||
192.168.35.128 | MySQL数据库ApolloConfigDB | 3306 | |
PRO | 192.168.35.135 | apollo-configservice | 8080 |
apollo-adminservice | 8090 | ||
192.168.35.136 | apollo-configservice | 8080 | |
apollo-adminservice | 8090 | ||
192.168.35.138 | MySQL数据库ApolloConfigDB | 3306 |
3. 创建数据库
3.1 ApolloConfigDB
创建ApolloConfigDB
在每套环境中都创建一个ApolloConfigDB数据库,并导入ApolloConfigDB.sql。DEV环境是192.168.35.108,FAT环境是192.168.35.118,UAT环境是192.168.35.128,PRO环境是192.168.35.138。
调整ApolloConfigDB.ServerConfig表的数据
当前环境只有一个节点时(并且configservice和adminservice部署在同一个机器),则可以跳过本步骤;有多个节点时(或者单节点情况下configservice和adminservice部署在不同的机器),需要修改eureka.service.url的值为当前环境的apollo-configservice的地址和端口,注意多个地址之间用英文逗号隔开。
- 在DEV环境中ApolloConfigDB.ServerConfig表中设置eureka.service.url为:
http://192.168.35.105:8080/eureka/,http://192.168.35.106:8080/eureka/
- 在FAT环境中ApolloConfigDB.ServerConfig表中设置eureka.service.url为:
http://192.168.35.115:8080/eureka/,http://192.168.35.116:8080/eureka/
- 在UAT环境中ApolloConfigDB.ServerConfig表中设置eureka.service.url为:
http://192.168.35.125:8080/eureka/,http://192.168.35.126:8080/eureka/
- 在PRO环境中ApolloConfigDB.ServerConfig表中设置eureka.service.url为:
http://192.168.35.135:8080/eureka/,http://192.168.35.136:8080/eureka/
3.2 ApolloPortalDB
创建ApolloPortalDB数据库
在192.168.35.102创建一个ApolloPortalDB数据库,导入ApolloPortalDB.sql
调整ApolloPortalDB.ServerConfig表的数据
portal默认支持的环境是DEV,若需要支持其它环境,需要修改apollo.portal.envs的值,默认值是DEV,修改为以下值,表示支持DEV、FAT、UAT、PRO四个环境,注意每个环境值之间用英文逗号隔开:
DEV,FAT,UAT,PRO
注意:只在数据库添加环境是不起作用的,还需要为apollo-portal添加新增环境对应的meta server地址,具体请参后续章节中的部署apollo-portal。
4. 部署Apollo
本次演示中,每套环境都安装两个apollo节点,每个apollo节点包含一个apollo-configservice和apollo-adminservice。实际部署中,可自行决定apollo节点的个数。
4.1 部署apollo-configservice
1) 解压apollo-configservice-x.x.x-github.zip。
2) 配置数据库连接。修改config/application-github.properties,填写当前环境的ApolloConfigDB数据库连接串信息,注意用户名和密码后面不要有空格。修改完的效果如下:
# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8
spring.datasource.username = someuser
spring.datasource.password = somepwd
注意:上面的localhost改成对应环境的数据库ip,someuser和somepwd改成对应数据库的用户名和密码。
- 默认的启动端口是8080,若要修改,则将scripts/startup.sh中的SERVER_PORT=${SERVER_PORT:=8080}的8080改成指定的端口即可。
- 执行scripts/startup.sh启动。
3) 验证:在浏览器上登录apollo-configservice的http://ip:port,查看apollo-configservice的状态是否为UP,且节点个数正确。
4.2 部署apollo-adminservice
1) 解压apollo-adminservice-x.x.x-github.zip。
2) 修改config/application-github.properties,填写正确的ApolloConfigDB数据库连接串信息,注意用户名和密码后面不要有空格。修改完的效果如下:
# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloConfigDB?useSSL=false&characterEncoding=utf8
spring.datasource.username = someuser
spring.datasource.password = somepwd
注意:上面的localhost改成对应环境的数据库ip,someuser和somepwd改成对应数据库的用户名和密码。
3) 默认的启动端口是8090,若要修改,则将scripts/startup.sh中的SERVER_PORT=${SERVER_PORT:=8090}的8090改成指定的端口即可。
4) 执行scripts/startup.sh启动。
5) 验证:在浏览器上登录apollo-configservice的http://ip:port,查看apollo-adminservice的状态是否为UP,且节点个数正确。
4.3 部署apollo-portal
本次演示中,只部署了一个apollo-portal,用来管理所有环境的apollo节点。实际部署中,也可以每套环境都部署一个apollo-portal,管理各自环境的apollo-portal,下面也会有提示如何在每个环境单独部署一个apollo-portal。
1) 解压apollo-portal-x.x.x-github.zip。
2) 修改config/application-github.properties,填写正确的ApolloServiceDB数据库连接串信息,注意用户名和密码后面不要有空格。修改完的效果如下:
# DataSource
spring.datasource.url = jdbc:mysql://localhost:3306/ApolloPortalDB?useSSL=false&characterEncoding=utf8
spring.datasource.username = someuser
spring.datasource.password = somepwd
注意:上面的localhost改成对应环境的数据库ip,someuser和somepwd改成对应数据库的用户名和密码。
3) 配置meta service信息。meta service的地址和端口,默认就是apollo-configservice的地址和端口。修改config/apollo-env.properties,填写当前的apollo-portal要管理的环境的apollo-configservice的地址和端口,多个地址之间用英文逗号隔开。修改完后的效果如下:
dev.meta=http://192.168.35.105:8080,http://192.168.35.106:8080
fat.meta=http://192.168.35.115:8080,http://192.168.35.116:8080
uat.meta=http://192.168.35.125:8080,http://192.168.35.126:8080
pro.meta=http://192.168.35.135:8080,http://192.168.35.136:8080
注意:上面的配置表示当前的apollo-portal要管理dev、fat、uat、pro四套环境的apollo节点,每个环境的节点数是两个。若只需要dev环境,只需要配置dev.meta的信息即可。
4) 默认的启动端口是8070,若要修改,则将scripts/startup.sh中的SERVER_PORT=${SERVER_PORT:=8070}的8070改成指定的端口即可。
5) 执行scripts/startup.sh启动。
6) 验证:见【启动成功检查】。
4.4 启动成功检查
apollo-configservice和apollo-adminservice检查
1) 在浏览器上登录当前环境的其中一个apollo-configservice的http://ip:port
2) 查看该环境的apollo-configservice和apollo-adminservice的节点数是否正常。
apollo-portal检查
1) 浏览器登录apollo-portal的http://ip:port,默认账号apollo,密码admin。
2) 点击默认的项目SampleApp,或点击【创建项目】,创建一个新的项目
3) 点击查看SampleApp,或点击查看新创建的项目,确认左边的环境列表是否符合中ApolloPortalDB.ServerConfig中apollo.portal.envs的配置,以及新增namespace、发布配置等是否成功。
参考
更详细的配置可以参考apollo官方Home · apolloconfig/apollo Wiki · GitHub