Apollo多环境分布式部署实现

本文提炼了一些官方的部署方案,主要介绍 Apollo在多环境下集群部署,生产环境多节点高可用部署。
注:如果仅仅是本地测试建议搭建简易版 官方快速搭建教程

1.源码结构

官方源码地址
工程介绍

  1. ConfigService
  • 提供配置获取接口
  • 提供配置推送接口
  • 服务于Apollo客户端
  1. AdminService
  • 提供配置管理接口
  • 提供配置修改发布接口
  • 服务于管理界面Portal
  1. Client
  • 为应用获取配置,支持实时更新
  • 通过MetaServer获取ConfigService的服务列表
  • 使用客户端软负载SLB方式调用ConfigService
  1. Portal
  • 配置管理界面
  • 通过MetaServer获取AdminService的服务列表
  • 使用客户端软负载SLB方式调用AdminService

2.准备工作

2.1. 部署环境要求

  • 建议内网部署 ;

  • 服务端基于Spring Boot 建议CentOS 7 ;

  • Java版本要求 1.8+ ;

  • Mysql版本要求 5.6.5+ ;

    注:查看java版本命令:java -version
    查看mysql版本sql: SHOW VARIABLES WHERE Variable_name = ‘version’;

2.2.集群环境

Apollo目前支持以下环境:

  • DEV >开发环境
  • FAT > 测试环境,相当于alpha环境(功能测试)
  • UAT > 集成环境,相当于beta环境(回归测试)
  • PRO > 生产环境

部署思路
每一套环境都部署一套(apollo-configservice+apollo-adminservice+环境私有数据库)
前台页面仅需要部署一套(apollo-portal)即可集群管理多套环境

注:同一个环境的apollo服务的多个节点使用同一个数据库,不同环境的apollo集群使用不同的数据库,多个不同环境的apollo集群使用一个portal就可以管理。

3.部署实例

注:仅做DEV(开发环境)与PRO(生产环境)的部署演示

3.1部署架构图

注:图示仅介绍了开发环境与生产环境,其它环境部署均可参考
Apollo多环境分布式部署实现_第1张图片

注:
如果Apollo部署在公有云上,本地开发环境无法连接,但又需要做开发测试的话
1.客户端可以升级到0.11.0版本及以上,然后通过-Dapollo.configService=http://config-service的公网IP:端口来跳过meta service的服务发现

3.2创建数据库

3.2.1导入数据库

Apollo服务端共需要两个数据库:

  • ApolloPortalDB(后台管理数据库)官方SQL脚本,

    注:(导入一份即可)

  • ApolloConfigDB(配置存储数据库)官方SQL脚本

    注: 导入多个,区分环境,比如ApolloConfigDB_pro(生产)、ApolloConfigDB_Dev(测试)

3.2.1修改配置表

在 ApolloPortalDB.ServerConfig中 key 为 apollo.portal.envs 调整value值为对应的环境
逗号分隔,大小写不敏感,示例 DEV,FAT,UAT,PRO

3.3下载部署包

官方release下载地址
示例图:
Apollo多环境分布式部署实现_第2张图片

3.4 配置数据库连接信息

3.4.1配置apollo-configservice的数据库连接信息
  1. 解压apollo-configservice-x.x.x-github.zip
  2. 打开config目录下的application-github.properties文件

层级结构示意图Apollo多环境分布式部署实现_第3张图片

  1. 填写正确数据库连接信息,注意用户名和密码后面不要有空格!
  2. 修改完的效果示例如下:
# 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.2配置apollo-adminservice的数据库连接信息

同环境的配置与 3.4.1 apollo-configservice 配置一致

3.4.3 配置apollo-portal的数据库连接信息
  1. 解压apollo-portal-x.x.x-github.zip
  2. 打开config目录下的application-github.properties文件

层级目录示意图Apollo多环境分布式部署实现_第4张图片

  1. 填写正确的ApolloPortalDB数据库连接串信息,注意用户名和密码后面不要有空格!
  2. 修改完的效果如下:
# DataSource
spring.datasource.url = jdbc:mysql://172.16.20.190:3306/apollo_portal_db?characterEncoding=utf8
spring.datasource.username = root
spring.datasource.password = root

3.4.4 配置apollo-portal的meta service信息

Apollo Portal需要在不同的环境访问不同的meta service(apollo-configservice)地址,所以需要在配置中提供这些信息。默认情况下,meta service和config service是部署在同一个JVM进程,所以meta service的地址就是config service的地址。

1.打开apollo-portal-x.x.x-github.zipconfig目录下的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数据库数据修改

3.5.1 apollo-portal 服务的数据库中支持环境配置,添加上本次配置的环境,多个逗号分隔Apollo多环境分布式部署实现_第5张图片

3.5.2(非必须) 自定义部门列表
Portal中新建的App都需要选择部门,所以需要在这里配置可选的部门信息,样例如下:
[{“orgId”:“TEST1”,“orgName”:“样例部门1”},{“orgId”:“TEST2”,“orgName”:“样例部门2”}]
示意图
Apollo多环境分布式部署实现_第6张图片

需要修改可以直接更新JSON,更新后需要重启 apollo-portal 服务生效

3.6单环境单节点部署分布

介于服务资源,仅做了不同环境下区分部署

集群环境 服务 数据库 服务器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发布服务

一切准备就绪,准备发布服务了。。。
3.6.1上传配置好的Jar包到对应的服务器
3.6.2解压对应的包,切换到该包下
启动命令:scripts/startup.sh
关闭命令:scripts/shutdown.sh

启动图示
在这里插入图片描述

4.多节点部署

开发环境单节点部署一台(configservice+adminservice)一版就够用了,
但是生产环境为了更高可用,最好是多个服务部署在不同服务器,实现双活或多活。

4.1生产环境部署第二套分布

集群环境 服务 数据库 服务器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服务的多个节点使用同一个数据库;

4.2Eureka连接配置

需要注意的是每个环境只填入自己环境的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配置需要重启服务后生效;

4.2修改服务Portal配置

修改服务Portal的apollo-env.properties,多个逗号分隔
Apollo多环境分布式部署实现_第7张图片

4.3服务发布

  • 新环境节点2(172.16.20.15)服务启动;分别依次启动 configservice > adminservice
  • 原有环境节点1(172.16.20.88)服务重启;分别依次启动 configservice > adminservice
  • apollo-portal服务重启

注:相关命令
切换到相应包下
启动命令:scripts/startup.sh
关闭命令:scripts/shutdown.sh

5.常见问题

5.1启动顺序疑问?

apollo部署所需核心工程是 apollo-configservice、apollo-adminservice、apollo-portal
启动顺序依次是 apollo-configservice > apollo-adminservice > apollo-portal
为什么需要按照以上顺序呢?
apollo-configservice 会携带一个注册中心Eureka,而apollo-adminservice 启动是需要注册到注册中心,所以需要先启动apollo-configservice,同理apollo-portal也需要前置服务正常情况下才可以使用。

注:未按照顺序启动并非不可用,只是会有短暂的服务延迟时间;

5.2常用端口与日志配置

apollo-configservice 默认端口:8080 默认日志位置:/opt/logs/100003171
apollo-adminservice 默认端口:8090 默认日志位置:/opt/logs/100003172
apollo-portal 默认端口:8070 ,默认日志位置:/opt/logs/100003173

5.3更改端口与日志存放地址

以apollo-configservice为例
1).切换到scripts目录下Apollo多环境分布式部署实现_第8张图片2).根据需求更改配置Apollo多环境分布式部署实现_第9张图片

如要调整服务监听端口,可以修改scripts/startup.sh中的SERVER_PORT

注意:
apollo-configservice同时承担meta server职责,如果要修改端口,注意要同时ApolloConfigDB.ServerConfig表中的eusreka.service.url配置项
以及apollo-portal和apollo-client中的使用到的meta server信息,

5.4登录后显示有环境缺失

这是因为首次多个环境需要触发一次补缺环境
Apollo多环境分布式部署实现_第10张图片

Apollo多环境分布式部署实现_第11张图片

  • 同一个环境的apollo服务的多个节点使用同一个数据库;
  • 不同环境的apollo集群使用不同的数据库;
  • 多个不同环境的apollo集群使用一个portal就可以管理。

5.4配置中心挂掉会影响已发布的项目?

经验证发现已发布的项目配置信息已缓存在容器中,暂不影响,但是会打印一些监听异常的日志,,,

你可能感兴趣的:(配置中心)