本文提炼了一些官方的部署方案,主要介绍 Apollo在多环境下集群部署,生产环境多节点高可用部署。
注:如果仅仅是本地测试建议搭建简易版 官方快速搭建教程
官方源码地址
工程介绍
建议内网部署 ;
服务端基于Spring Boot 建议CentOS 7 ;
Java版本要求 1.8+ ;
Mysql版本要求 5.6.5+ ;
注:查看java版本命令:java -version
查看mysql版本sql: SHOW VARIABLES WHERE Variable_name = ‘version’;
Apollo目前支持以下环境:
部署思路
每一套环境都部署一套(apollo-configservice+apollo-adminservice+环境私有数据库)
前台页面仅需要部署一套(apollo-portal)即可集群管理多套环境
注:同一个环境的apollo服务的多个节点使用同一个数据库,不同环境的apollo集群使用不同的数据库,多个不同环境的apollo集群使用一个portal就可以管理。
注:仅做DEV(开发环境)与PRO(生产环境)的部署演示
注:
如果Apollo部署在公有云上,本地开发环境无法连接,但又需要做开发测试的话
1.客户端可以升级到0.11.0版本及以上,然后通过-Dapollo.configService=http://config-service的公网IP:端口来跳过meta service的服务发现
Apollo服务端共需要两个数据库:
ApolloPortalDB(后台管理数据库)官方SQL脚本,
注:(导入一份即可)
ApolloConfigDB(配置存储数据库)官方SQL脚本
注: 导入多个,区分环境,比如ApolloConfigDB_pro(生产)、ApolloConfigDB_Dev(测试)
在 ApolloPortalDB.ServerConfig中 key 为 apollo.portal.envs 调整value值为对应的环境
逗号分隔,大小写不敏感,示例 DEV,FAT,UAT,PRO
apollo-configservice-x.x.x-github.zip
config
目录下的application-github.properties
文件# DataSource
spring.datasource.url = jdbc:mysql://172.16.20.190:3306/apollo_config_dev?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root
注:由于在每个环境都有部署,所以对不同的环境config-service需要配置对应环境的数据库参数
同环境的配置与 3.4.1 apollo-configservice 配置一致
apollo-portal-x.x.x-github.zip
config
目录下的application-github.properties
文件# DataSource
spring.datasource.url = jdbc:mysql://172.16.20.190:3306/apollo_portal_db?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root
Apollo Portal需要在不同的环境访问不同的meta service(apollo-configservice)地址,所以需要在配置中提供这些信息。默认情况下,meta service和config service是部署在同一个JVM进程,所以meta service的地址就是config service的地址。
1.打开apollo-portal-x.x.x-github.zip
中config
目录下的apollo-env.properties
文件。
2.如果某个环境不需要,也可以直接删除对应的配置项
3.支持域名
dev.meta=http://1.1.1.1:8080
fat.meta=http://apollo.fat.xxx.com
uat.meta=http://apollo.uat.xxx.com
pro.meta=http://apollo.xxx.com
注1: 为了实现meta service的高可用,推荐通过SLB(Software Load Balancer)做动态负载均衡
注2: meta service地址也可以填入IP,0.11.0版本之前只支持填入一个IP。从0.11.0版本开始支持填入以逗号分隔的多个地址(PR #1214),如http://1.1.1.1:8080,http://2.2.2.2:8080
,不过生产环境还是建议使用域名(走slb),因为机器扩容、缩容等都可能导致IP列表的变化。
3.5.1 apollo-portal 服务的数据库中支持环境配置,添加上本次配置的环境,多个逗号分隔
3.5.2(非必须) 自定义部门列表
Portal中新建的App都需要选择部门,所以需要在这里配置可选的部门信息,样例如下:
[{“orgId”:“TEST1”,“orgName”:“样例部门1”},{“orgId”:“TEST2”,“orgName”:“样例部门2”}]
示意图
需要修改可以直接更新JSON,更新后需要重启 apollo-portal 服务生效
介于服务资源,仅做了不同环境下区分部署
集群环境 | 服务 | 数据库 | 服务器ip |
---|---|---|---|
DEV | configservice | apollo_config_dev | 172.16.20.230-001 |
adminservice | apollo_config_dev | 172.16.20.230-001 | |
PRO | configservice | apollo_config_pro | 172.16.20.88-002 |
adminservice | apollo_config_pro | 172.16.20.88-002 | |
公共页面 | portal | apollo_portal_db | 172.16.20.62-003 |
一切准备就绪,准备发布服务了。。。
3.6.1上传配置好的Jar包到对应的服务器
3.6.2解压对应的包,切换到该包下
启动命令:scripts/startup.sh
关闭命令:scripts/shutdown.sh
开发环境单节点部署一台(configservice+adminservice)一版就够用了,
但是生产环境为了更高可用,最好是多个服务部署在不同服务器,实现双活或多活。
集群环境 | 服务 | 数据库 | 服务器ip |
---|---|---|---|
PRO | configservice | apollo_config_pro | 172.16.20.15-004 |
adminservice | apollo_config_pro | 172.16.20.15-004 | |
这样的话加上上一步配置生产环境就有两个节点了,当然configservice与adminservice可可以部署在不同服务器
节点1:172.16.20.88 (configservice+adminservice)
节点2:172.16.20.15(configservice+adminservice)
注意事项:同一个环境的apollo服务的多个节点使用同一个数据库;
需要注意的是每个环境只填入自己环境的eureka服务地址,
比如pro的apollo-configservice是172.16.20.88:8080和172.16.20.15:8080
则需在PRO环境的apollo_config_pro.ServerConfig表中设置eureka.service.url为:
http://172.16.20.88:8080/eureka/,http://172.16.20.15:8080/eureka/
注意事项:修改ServerConfig配置需要重启服务后生效;
修改服务Portal的apollo-env.properties,多个逗号分隔
注:相关命令
切换到相应包下
启动命令:scripts/startup.sh
关闭命令:scripts/shutdown.sh
apollo部署所需核心工程是 apollo-configservice、apollo-adminservice、apollo-portal
启动顺序依次是 apollo-configservice > apollo-adminservice > apollo-portal
为什么需要按照以上顺序呢?
apollo-configservice 会携带一个注册中心Eureka,而apollo-adminservice 启动是需要注册到注册中心,所以需要先启动apollo-configservice,同理apollo-portal也需要前置服务正常情况下才可以使用。
注:未按照顺序启动并非不可用,只是会有短暂的服务延迟时间;
apollo-configservice 默认端口:8080 默认日志位置:/opt/logs/100003171
apollo-adminservice 默认端口:8090 默认日志位置:/opt/logs/100003172
apollo-portal 默认端口:8070 ,默认日志位置:/opt/logs/100003173
以apollo-configservice为例
1).切换到scripts目录下2).根据需求更改配置
如要调整服务监听端口,可以修改scripts/startup.sh中的SERVER_PORT
。
注意:
apollo-configservice同时承担meta server职责,如果要修改端口,注意要同时ApolloConfigDB.ServerConfig表中的eusreka.service.url
配置项
以及apollo-portal和apollo-client中的使用到的meta server信息,
经验证发现已发布的项目配置信息已缓存在容器中,暂不影响,但是会打印一些监听异常的日志,,,