玩转apollo配置中心——通过源码进行多env环境搭建


前面我们一起通过jar包以及源码的方式进行了单env环境的搭建,那种方式只支持一种环境(environment),就是dev,如果我们要支持多个环境(以下简称env),这种部署还需要再改进才行,这篇文章我们一起来进行多env环境搭建

一、Apollo项目结构介绍

前面介绍过Apollo项目服务端包含的三个服务:

  • 配置提供服务(config),使用config库,负责指定环境(env)配置的推送、获取,向客户端(业务项目)提供服务,间接接受来自admin的调用      另内置eurka提供该环境所有config和admin的注册功能以提供多节点部署 高可用
  • 配置管理服务(admin),使用config库,负责指定环境(env)配置的修改、发布、历史记录,主要向portal提供服务,通过数据库间接调用config服务
  • 配置更新服务(portal),使用portal库,负责配置中心的页面渲染,功能提交,协调各环境(env)进行配置的修改、发布,调用admin服务

有人说,很多人都说,官方也说  Apollo核心是四个服务,还有一个客户端,现在我们从服务端的角度来讲环境搭建,暂时忽略客户端,请大家见谅,后面我们讨论springboot整合Apollo实现配置的时候再仔细说客户端(client)

通过以上三个服务,我们很明显能看出,一个config和admin,使用同一个库,负责一个环境(env),而portal这个服务是全局唯一的,在启动的时候需要指定它来管理哪些环境的config和admin,一张图表示如下

                   ---->   dev环境  admin服务  <---->config服务

portal  ---->     sit环境  admin服务  <---->config服务

           ---->    uat环境  admin服务  <---->config服务

portal启动时必须通过启动参数 -Ddev_meta=http://xxdevxx:port  -Dsit_meta=http://xxsitxx:port  -Duat_meta=http://xxuatxx:port来指定当前配置中心portal所能管理的几个环境,配置后面的链接为该环境(env)的eurka注册中心的链接(eurka默认集成在config服务中,即config服务的链接)

并且在portal库的serverconfig表中修改apollo.portal.envs参数的值为dev,sit,uat

当你在后台管理系统(portal)中打开一个环境(env)时,portal会通过该env找到对应的meta配置的admin服务地址,调用该admin服务读取数据库里保存的集群、命名空间以及具体配置信息,返回前端后进行页面渲染

这个过程可概括如下  前端 --> portal --> eurka --> admin --> 读取db      然后原路返回

当你在后台管理系统(portal)中的某个环境(env)中,提交或者修改了一项配置,portal会通过该env找到对应的meta配置的admin服务地址,调用该admin服务进行配置的提交修改,并将修改结果返回前端

当你******,发布配置的时候,portal******,调用该admin服务的发布配置接口,admin服务会在config库中写一条记录,然后返回结果到前端。此时config服务有一个线程会定时读取库中是否有新记录,读取到记录后通知所有和自己有注册关系的客户端(client)来更新配置,由此实现发布配置后,客户端配置的自动更新

 

综上所述,当我们部署多环境的时候,每个环境(env)必须有自己单独的数据库,用于存放该环境的所有配置、发布记录信息,也必须有配套的admin和config服务,如果要部署五个环境,就需要五个数据库,每个数据库对应启动一套admin和config服务,即至少2*5个服务,可以参考上面那个简易的图来理解

二、多环境部署

这里我们用idea通过源码的方式进行多环境部署,本示例我们部署三个环境dev、sit、uat

1.创建三个环境的数据库

每个环境必须有自己单独的数据库,所以需要创建三个,可以是不同的数据库实例,也可以在同一实例下创建,这里我们在同一个实例下进行

打开scripts/sql目录下的两个sql脚本文件,复制其中的内容到数据库管理工具中

apolloportaldb这个脚本可以直接运行,创建一个portal的库

修改apolloconfigdb这个脚本最前面的两个sql语句,自定义数据库名称用于区分各环境,每修改一次,就全部执行一次脚本

# 修改前为这样
CREATE DATABASE IF NOT EXISTS ApolloConfig DEFAULT CHARACTER SET = utf8mb4;
Use ApolloConfig;

# 修改后为这样
CREATE DATABASE IF NOT EXISTS ApolloConfigDev DEFAULT CHARACTER SET = utf8mb4;
Use ApolloConfigDev;

上面代码举例为dev环境下的config库创建,其他环境的按照同样的方法进行创建。

创建好数据库会看到数据库实例中多了四个库,分别为:ApolloConfigDev、ApolloConfigSit、ApolloConfigUat、ApolloPortal

2.创建三个环境的启动程序

 dev环境启动程序config和admin创建如下:

点击idea右上方run/debug config面板

点击+号新增一个springboot启动程序,main class选择ConfigServiceApplication,name命名为configServiceDev,VM options中指定服务监听端口以及使用的数据库信息 

-Dserver.port=8081
-Dspring.datasource.url=jdbc:mysql://localhost:3306/apolloconfigdev?characterEncoding=utf8&serverTimezone=Asia/Shanghai
-Dspring.datasource.username=root
-Dspring.datasource.password=1234

点击+号新增一个springboot启动程序,main class选择AdminServiceApplication,name命名为adminServiceDev,VM options中指定服务监听端口以及使用的数据库信息 

-Dserver.port=8091
-Dspring.datasource.url=jdbc:mysql://localhost:3306/apolloconfigdev?characterEncoding=utf8&serverTimezone=Asia/Shanghai
-Dspring.datasource.username=root
-Dspring.datasource.password=1234

 这样dev环境的两个主要的启动程序就已经创建完成

其他两个环境按照同样的方法进行创建,但是数据库应该读自己环境的数据库,分别为apolloconfigsit、apolloconfiguat,并且name应该进行区别化命名,建议为configServiceSit、adminServiceSit、configServiceUat、adminServiceUat,端口分别为8082,8092,8083,8093

3.创建portal启动程序

  由于portal是管理每个环境的一个后台管理系统,所以portal在运行的时候需要指定自己所管理的各个环境的eurka注册中心地址,这样portal才能通过注册中心调用相应的admin服务进行配置的修改、发布等操作

点击idea右上方run/debug config面板

点击+号新增一个springboot启动程序,main class选择PortalApplication,name命名为portal

然后在VM options后面添加各个环境的注册中心地址配置

-Ddev_meta=http://localhost:8081
-Dsit_meta=http://localhost:8082
-Duat_meta=http://localhost:8083
-Dspring.datasource.url=jdbc:mysql://localhost:3306/apolloportal?characterEncoding=utf8&serverTimezone=Asia/Shanghai
-Dspring.datasource.username=root
-Dspring.datasource.password=1234

4.修改数据库的相关配置

因为我们自定义了三个环境的config和admin两个服务的端口,会导致程序启动时从数据库读取注册中心地址后,进行服务注册时失败,所以要修改数据库中的注册中心地址配置,因为数据库中默认的注册中心配置为http://localhost:8080 而我们实际是   dev注册中心(即dev的config服务):http://localhost:8081,sit....:http://localhost:8082,uat....:http://localhost:8083

打开dev环境的数据库ApolloConfigDev,修改serverconfig表的eureka.service.url参数,将端口改为8081

按照此方法依次将sit和uat的这一个参数改为8082,8083

以上就修改了各个环境的注册中心地址配置,这里还没有完,还需要将portal服务所支持的环境配置也进行修改

portal服务默认只支持dev,在自己的数据库(portal库)serverconfig表的apollo.portal.envs参数,将配置修改为dev,sit,uat

做完这些,数据库的相关配置就修改完成了

5.启动服务

按照先config后admin的顺序依次启动各个环境的所有6个服务

最后再启动portal服务

全部启动完成后打开浏览器访问http://localhost:8070登录后即可看到支持多环境的Apollo配置中心

你可以选择新建一个项目(application),然后在各个数据库中检查,看看项目是由哪个库负责管理的,再创建一个集群(cluster)看看谁在管理,再创建一个(namespace)看看谁在管理,最后再新增几个配置,然后再发布配置,都看看是哪个库在进行这些功能的管理,这对理解Apollo的配置的四个维度有很大帮助

下篇文章我们一起看下springboot如何通过Apollo配置中心实现配置集中管理和自动刷新

 

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM