本文提炼了一些官方的部署方案,主要介绍 Apollo在多环境下集群部署,生产环境多节点高可用部署。注:如果仅仅是本地测试建议搭建简易版 官方快速搭建教程
官方源码地址 工程介绍
ConfigService 提供配置获取接口提供配置推送接口服务于Apollo客户端 AdminService 提供配置管理接口提供配置修改发布接口服务于管理界面Portal Client 为应用获取配置,支持实时更新通过MetaServer获取ConfigService的服务列表使用客户端软负载SLB方式调用ConfigService Portal 配置管理界面通过MetaServer获取AdminService的服务列表使用客户端软负载SLB方式调用AdminService建议内网部署 ;
服务端基于Spring Boot 建议CentOS 7 ;
Java版本要求 1.8+ ;
Mysql版本要求 5.6.5+ ;
注:查看java版本命令:java -version 查看mysql版本sql: SHOW VARIABLES WHERE Variable_name = ‘version’;
Apollo目前支持以下环境:
DEV >开发环境FAT > 测试环境,相当于alpha环境(功能测试)UAT > 集成环境,相当于beta环境(回归测试)PRO > 生产环境部署思路 每一套环境都部署一套(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
官方release下载地址示例图:
层级结构示意图
填写正确数据库连接信息,注意用户名和密码后面不要有空格!修改完的效果示例如下: # 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 配置一致
层级目录示意图
填写正确的ApolloPortalDB数据库连接串信息,注意用户名和密码后面不要有空格!修改完的效果如下: # DataSource spring.datasource.url = jdbc:mysql://172.16.20.190:3306/apollo_portal_db?characterEncoding=utf8 spring.datasource.username = root spring.datasource.password = rootApollo 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:8080fat.meta=http://apollo.fat.xxx.comuat.meta=http://apollo.uat.xxx.compro.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 服务生效
介于服务资源,仅做了不同环境下区分部署
集群环境服务数据库服务器ipDEVconfigserviceapollo_config_dev172.16.20.230-001adminserviceapollo_config_dev172.16.20.230-001PROconfigserviceapollo_config_pro172.16.20.88-002adminserviceapollo_config_pro172.16.20.88-002公共页面portalapollo_portal_db172.16.20.62-003一切准备就绪,准备发布服务了。。。3.6.1上传配置好的Jar包到对应的服务器3.6.2解压对应的包,切换到该包下启动命令:scripts/startup.sh关闭命令:scripts/shutdown.sh
启动图示
开发环境单节点部署一台(configservice+adminservice)一版就够用了,但是生产环境为了更高可用,最好是多个服务部署在不同服务器,实现双活或多活。
这样的话加上上一步配置生产环境就有两个节点了,当然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/100003171apollo-adminservice 默认端口:8090 默认日志位置:/opt/logs/100003172apollo-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信息,
这是因为首次多个环境需要触发一次补缺环境
同一个环境的apollo服务的多个节点使用同一个数据库;不同环境的apollo集群使用不同的数据库;多个不同环境的apollo集群使用一个portal就可以管理。经验证发现已发布的项目配置信息已缓存在容器中,暂不影响,但是会打印一些监听异常的日志,,,