对于数据库异地双活容灾部署在前面博客上也有文章谈到过,这篇文章做一些进一步的分析,对于异地双活容灾推荐阅读下网上的一篇文章,这篇文章介绍的比较全面,可以重点参考,本文配图也来源于该文。
数据库的双活设计
对于异地双活,前面我很多文章都已经谈到过,实际上最难的就是数据库如何保证双活,大部分的异地容灾方案数据库本身都是单活的,一个做为备份库。根据这篇文章我们可以看到,实际上在数据库层面分为三个层面。
1. 数据库单活:一个做为备份库,平时不工作,在出现问题再动态切换
2. 数据库写单活,读双活:只有主库可以写,但是两个数据中心的数据库都可以作为读库同时工作
3. 数据库双活:即表格里面谈到的Oracle ASM Extended
RAC方案,这个原来没怎么接触过
对于应用服务器的Cluster集群,实际要做到双活就比较简单,由于不存在数据持久化的问题,因此只需要搭配上层的全局负载均衡往往就容易实现上层应用服务器集群的双活配置。
而对于ESB服务总线中间件来说,和传统的业务系统本身有两点关键的区别,具体说明为
1. App Server应用服务器层,存在JMS消息中间件,这个存在在临时和持久化存储问题
2.
对于数据库层面,一个是ESB引擎数据库本身对ESB运行无大影响,一个ESB管控数据库仅存储日志信息
在原来我们谈SOA整体部署架构的时候,为了保证整个ESB总线的运行稳定性,实际上我们做了相应的验证,即对于ESB引擎数据库停机,实际上不影响到App
Server和ESB服务正常运行;或者对管控数据库停机,也不影响到服务正常运行,只是会出现日志数据出现丢失。
其次,对于ESB总线而言本身数据库压力不大,完全没有必要在数据库层面采用读写双活的设计方式,而对于管控平台而言,实际上使用最多的就是日志查询,异常查询几个功能,这几个功能可以单独定制为支撑读双活往往就能够满足需求。在数据库层面,最初我们的方案仍是采用类似GoldenGate进行单向的数据同步,确保在另外一个数据中心有一个完整的备库,以用于在数据中心出现问题后的数据库迁移。
那么接下来我们再看,如果不采用类似GG的数据库同步复制产品和技术,我们如何来做异地双活设计。初步考虑有如下几种方案可以选择。
方案1:在两个数据中心进行重复操作
即对于ESB服务的部署,服务授权,服务配置等操作,同时在两个数据中心操作,确保实际的服务部署,服务配置元数据能够同时入库到两个数据中心不同的数据库。即实际上两个数据中心最终提供的ESB服务完全是一致的和相同的,服务部署情况,服务授权情况也是完全相同的。
在这种方案里面涉及到我们流程申请和订购功能,涉及到服务运行实例功能无法重复操作,因此这些功能对应后的后台日志表,就需要我们晚上进行定时同步到备份数据中心。由于日志,流程实例非核心内数据,是可以容忍一天内的丢失情况。
方案2:后台每天进行定时数据复制
对于ESB服务的部署,实际上我们很难去做定时的数据复制来解决问题,因此服务部署仍然需要手工操作。而对于其他所有的管控配置操作等全部通过每天定时后台数据库表复制即可。该方案不使用类似GG进行实时同步复制,允许数据出现1天内丢失,但是不影响到实际的服务运行。
应用服务器集群的双活
当我们谈双活数据中心的时候,前面更多谈的数据库的部署和同步方案,既然是双活,那么APP
Server应用服务器就必须要做到能够同时工作。而对于应用服务器集群我们考虑的时候要注意,实际上在我们配置的时候,数据中心A和数据中心B两个集群都是操作数据中心A的数据库,否则就会出现数据库双向同步复制问题。
要做到应用集群双活,在前面文章方案已经谈到,必须在数据库中心A和B上面还有一个全局的负载均衡设备进行全局负载均衡,同时全局负载均衡设备本身还需要HA配置确保无单点故障。
而实际上双活架构部署的时候,对于数据中心B我们完全可以单独进行ESB中间件和管控软件的安装,同时将数据库中心A的数据库导出再导入恢复到数据中心B,确保初始一致性。在完成数据中心B本身的服务调用正常,管控访问正常后,我们在进行操作,将数据中心B的ESB服务集群,管控数据库连接配置修改为对应到数据中心A。
这个时候可以确保应用服务器全部处于工作状态,但是数据中心A出现故障后数据库连接需要手工切换。
那么这个时候更好的做法是在两个数据中心的数据库上层还有一个轻量的DaaS数据库服务提供层,即在DaaS层来提供可用的数据库服务连接,当发现数据中心A的数据库无法访问的时候,可以自动切换到数据中心B的数据库。同时DaaS层作为独立的应用也在两个数据中心进行部署,接入到上层的全局复制,确保没有单点故障。
如果没有DaaS层,那么出现故障手工切换,预计也就在5到10分钟能够完成数据中心的切换操作。
临时记录-待进一步思考
在数据中心单独安装一个ESB
Cluster集群,配置到数据中心B的ESB数据库,数据中心B的ESB库完全从A中心进行同步拷贝。然后对ESB集群的服务部署信息进行导出,导出后再数据中心B进行服务部署。完成后将数据中心B的集群数据库连接切换到数据中心A。
或者直接在数据中心B进行Cluster集群的扩展,即数据中心B不再有Admin管理节点,这种模式实际上涉及到Admin管理节点需要在两个数据中心做HA架构配置,暂时无法验证其可行性。