当前位置: 首页 > 科技观察

数据库集群方案及OracleRAC架构分析

时间:2023-03-19 01:12:45 科技观察

应对不断增长的业务量通常有两个方向,一是纵向扩展,即增加单台服务器的CPU计算能力、内存容量和磁盘承载能力;另一种是水平扩展,即通过增加服务器数量来增加处理能力。前者存在业务中断、扩容受限等诸多问题。尤其是随着互联网业务的快速发展,单台服务器已经难以满足业务负载需求。因此,目前比较流行横向扩展的方式。1.数据库集群数据库的水平扩展是通过数据库集群实现的。数据库集群也有两种主要形式。一种是主从(master-slave)架构,即只能访问一台服务器上的数据库,其他(多台)服务器上的数据库不能访问或只能进行读操作。另一种是多活架构,所有服务器都可以对外提供服务(同时读写)。目前市面上的数据库大多是主从架构,比如MySQL、SQLServer。图1是著名的MySQL数据库的主从复制示意图。主从复制通过重放binlog实现主库数据的异步复制。由于从binlog获取数据到重放写入主库的数据之间存在时间延迟,所以从库的数据总是滞后于主库。这也是主从架构的缺点,即无法保证数据的分布式一致性。主库宕机时可能会丢失一些数据。图1MySQL主从复制2.分区多活集群多活架构是集群中的节点可以同时对外提供服务。根据集群中的节点是否可以共享数据,多活架构分为两种类型。一种是多活非共享数据。在这种情况下,集群节点无法共享数据,每个节点负责不同的数据。比如数据库表按主键ID划分(比如取模),不同的节点负责不同的区域。目前这种多活方案可以通过数据库中间件来实现,比如开源的Mycat。图2基于Mycat的多活架构如图2所示,是一个基于Mycat的多活数据库集群,主要分为两个区域,每个区域通过主备保证可用性和负载分担。具体策略可以取模。例如,当主键ID为1、3、5、7...时,数据存储在左边的主库中;当ID为2、4、6、8...时,数据存储在右侧的主数据库中。.由于数据的隔离,上述接入的主要问题之一是扩展相对困难。当需要增加集群节点数时,需要重新划分数据的存储位置,需要进行大量的数据迁移。这样一来,不仅操作复杂,而且出问题的风险也增加了。3、共享存储多活集群(OracleRAC)另一种多活架构是共享存储集群架构,比较典型的是OracleRAC(全称OracleRealApplicationCluster)。在这种架构下,集群中的多个节点运行同一个数据库实例,数据是完全一致的,无论用户从哪个节点访问,得到的数据都是一样的。图3是OracleRAC的示意图,三个节点组成一个集群,它们共享数据。图3OracleRAC示意图为了保证整个集群的可用性,OracleRAC在部署的时候对硬件的要求比较高。在网络层面,OracleRAC一共有三个网络体系,分别是外部访问网络、内部私有网络和存储网络。外部访问网络并不需要太多,相信大家都明白。内部私有网络主要用于Oracle集群内部使用,包括数据传输、心跳、集群管理等。这部分网络在部署时需要双交换机和双物理链路,以保证集群不会因为链路故障而异常。其背后是存储网络,用于RAC集群访问存储资源,这部分也是链路冗余。图4OracleRAC物理部署图为了更深入的了解OracleRAC,我们先来看看其内部软件模块的组成。整个数据库层面没有太大区别,主要有以下内容:虚拟IP(VIP)、ASM、Clusterware、仲裁盘。这些新的组件相互配合完成Oracle的多活集群功能。虚拟IP是应用程序访问数据库的入口。IP不绑定任何服务器,但可以在集群中的任何服务器之间漂移。由于这个特性,当服务器宕机时,数据集集群可以保证通过相同的接口对外提供服务。图5OracleRAC软件模块图ASM和Clusterware实现集群管理功能,其中ASM实现对磁盘的管理,避免同时访问磁盘造成数据不一致的风险,而Clusterware用于管理软件进程和Oracle集群的资源调度。仲裁盘用于判断集群中服务器的异常情况。集群中的节点通过定时更新仲裁盘特定区域的数据来标记自己的健康状态。其他节点可以根据数据判断该节点是否宕机。