Apollo多环境分布式部署实现

    xiaoxiao2023-11-16  157

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

    1.源码结构

    官方源码地址 工程介绍

    ConfigService 提供配置获取接口提供配置推送接口服务于Apollo客户端 AdminService 提供配置管理接口提供配置修改发布接口服务于管理界面Portal Client 为应用获取配置,支持实时更新通过MetaServer获取ConfigService的服务列表使用客户端软负载SLB方式调用ConfigService 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.客户端可以升级到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下载地址示例图:

    3.4 配置数据库连接信息

    3.4.1配置apollo-configservice的数据库连接信息
    解压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.2配置apollo-adminservice的数据库连接信息

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

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

    层级目录示意图

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

    3.5.1 apollo-portal 服务的数据库中支持环境配置,添加上本次配置的环境,多个逗号分隔

    3.5.2(非必须) 自定义部门列表Portal中新建的App都需要选择部门,所以需要在这里配置可选的部门信息,样例如下:[{“orgId”:“TEST1”,“orgName”:“样例部门1”},{“orgId”:“TEST2”,“orgName”:“样例部门2”}]示意图

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

    3.6单环境单节点部署分布

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

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

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

    启动图示

    4.多节点部署

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

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

    集群环境服务数据库服务器ipPROconfigserviceapollo_config_pro172.16.20.15-004adminserviceapollo_config_pro172.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,多个逗号分隔

    4.3服务发布

    新环境节点2(172.16.20.15)服务启动;分别依次启动 configservice > adminservice原有环境节点1(172.16.20.88)服务重启;分别依次启动 configservice > adminserviceapollo-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/100003171apollo-adminservice 默认端口:8090 默认日志位置:/opt/logs/100003172apollo-portal 默认端口:8070 ,默认日志位置:/opt/logs/100003173

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

    以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信息,

    5.4登录后显示有环境缺失

    这是因为首次多个环境需要触发一次补缺环境

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

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

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

    最新回复(0)