跳转至

高可用性及集群架构

高可用性及集群架构

SeaboxSQL数据库提供主备集群、分库分表集群、逻辑复制等多种集群部署机制。

主备集群方案

为满足应用系统关键业务的不间断运行需要,SeaboxSQL内置基于WAL日志流复制(Stream replication)机制的主备集群解决方案,保证提供7*24小时不间断的数据服务。

以典型的双机热备高可用场景为例,两台SeaboxSQL服务器分别作为主从数据库服务器同时运行,并通过主从机间的“心跳”通讯监测彼此的运行状态。正常情况下,主服务器对外提供数据库服务,另一台处于备用状态。一旦主服务器发生故障不能提供数据库服务时,从服务器主动接管,并继续对外提供服务,保证用户不间断的数据库访问。故障服务器修复后处于备用状态。

特别地,SeaboxSQL主备集群高可用架构支持读写分离的负载隔离机制,对于大量读取少量更新的应用,可按参数设定讲读取负载分发到备服务执行,可有效提升数据库系统的吞吐量。

主备集群架构示意

SeaboxSQL主备集群方案具有以下特点:

1) 保证系统进程在异常退出或者启动失败时重新启动

2) 通过虚拟IP向应用程序提供统一的不间断的服务。

3) 通过一致性协议判断主备服务的可用性,确保“心跳”通信的高可用性。

4) 统一对系统中的资源进行调度,以达到故障转移的目的。当系统中的一个节点出现故障时,系统会启用另一个节点接管系统资源继续为应用提供服务。

5) 提供标准化接口对系统中的资源进行多种方式的管理和控制。

此外,SeaboxSQL提供多种标准化的脚本对系统资源进行管理和控制,如启动、停止及、状态监控等。用户可定制个性化的监控方式,如设置启用或取消某个资源的时间限制,资源启动或失败后的处理方式(如重启、放弃对资源的接管或转移到其他节点等),对虚拟IP、共享存储、磁盘镜像、数据库服务进行管理。

分库分表集群

SeaboxSQL数据库支持借助开源中间件ShardingSphere构建分库分表集群的高可用方案,具有分库、分表、分布式事务、弹性伸缩、读写分离等众多能力;保证高可用场景,同时可实现负载均衡。

​Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由 JDBC、Proxy 和 Sidecar这 3 款相互独立,却又能够混合部署配合使用的产品组成。 它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如 Java 同构、异构语言、云原生等各种多样化的应用场景。

​Apache ShardingSphere 定位为关系型数据库中间件,旨在充分合理地在分布式的场景下利用关系型数据库的计算和存储能力,而并非实现一个全新的关系型数据库。 它通过关注不变,进而抓住事物本质。关系型数据库当今依然占有巨大市场,是各个公司核心业务的基石,未来也难于撼动,shardingshere目前阶段更加关注在原有基础上的增量,而非颠覆。

主备集群架构示意

​Apache ShardingSphere 5.x 版本开始致力于可插拔架构,项目的功能组件能够灵活的以可插拔的方式进行扩展。 目前,数据分片、读写分离、多数据副本、数据加密、影子库压测等功能,以及 MySQL、PostgreSQL、SQLServer、Oracle 等 SQL 与协议的支持,均通过插件的方式织入项目。 开发者能够像使用积木一样定制属于自己的独特系统。Apache ShardingSphere 目前已提供数十个 SPI 作为系统的扩展点,仍在不断增加中。

SeaboxSQL数据分库分表方案架构如下:

sharding shere 分库分表方案架构图

其中ShardingSphere-Proxy是ShardingSphere 生态中的一个接入端,即对客户端透明的数据库代理,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。因此客户端代码无需配置修改,应用程序完全透明,可直接当做SeaboxSQL使用,适用于任何客户端。

HAProxy结合seabox monitor组件,可以始终识别数据库的主节点,保证高可用场景,同时可实现负载均衡;

每个SeaboxSQL高可用节点支持一主多备,每个节点使用SCDCS一致性协议保证数据的一致性,各个节点可以部署在相同或不同的区域,用以保证多地多中心的数据安全。

逻辑复制

SeaboxSQL数据库支持逻辑复制特性,逻辑复制是基于逻辑解析进行复制,使用类似消息队列的发布者、订阅者的模型,利用复制槽的技术,发布者将wal日志解析成一定格式的数据流,订阅者对解析后的wal日志数据流进行回放应用,从而实现数据的同步。需要注意的是,SeaboxSQLSQL的逻辑复制不是“SQL”复制,而是复制SQL操作的结果。

逻辑复制通过将主数据库修改的数据内容以逻辑日志形式传输并应用到从数据库中完成数据同步复制,具备事务级的数据解析、发送和应用能力。从数据库在数据复制过程中依然能够同时提供数据处理服务。

逻辑复制也是基于 WAL文件,在逻辑复制中把主库称为源端库,备库称为目标端数据库,源端数据库根据预先指定好的逻辑解析规则对WAL文件进行解析,把DML操作解析成一定的逻辑变化信息(标准SQL语句),源端数据库把标准SQL语句发给目标端数据库,目标端数据库接收到之后进行应用,从而实现数据同步。

SeaboxSQL数据库逻辑复制机制如下:

逻辑复制机制

在wal日志产生的数据库上,由逻辑解析模块对wal日志进行初步的解析,它的解析结果为ReorderBufferChange(可以简单理解为HeapTupleData),再由sdoutput plugin对中间结果进行过滤和消息化拼接后,然后将其发送到订阅端,订阅端根据接收到的HeapTupleData重新对其执行insert、delete、update的操作。这里要注意,流复制是将数据从walrecord拷贝到数据页,逻辑复制是将数据重新执行一次insert、update或delete。

流复制和逻辑复制差异如下:

  1. 流复制是对实例级别的复制;逻辑复制是选择性的复制一些表,是对表级别的复制。

  2. 流复制主库上的事务提交可以不需要等待备库接收到WAL文件后的确认;逻辑复制相反。

  3. 流复制要求主备库的大版本一致;逻辑复制可以跨大版本的数据同步,也可以实现异构数据库的数据同步。

  4. 流复制的主库可读写,从库只允许读;逻辑复制的目标端数据库要求可读写。

  5. 流复制有主库的DDL、DML操作,逻辑复制目前仅DML操作。