高可用性

数据库的高可用性是企业关键需求,它保证了系统的持续可用性、数据的安全性,以及业务的连续性。MatrixOne 作为一款高可用性的分布式数据库,能满足企业的需求。本文档旨在介绍 MatrixOne 的高可用性特性,包括故障恢复、数据冗余、负载均衡等关键功能。

业务需求

企业对数据库高可用性的需求主要体现在以下几个方面:

  • 持续可用性:企业需要确保其关键业务数据库的持续运行,以防止长时间的系统中断或服务不可用,这样可以保证业务的连续性和用户满意度。

  • 故障恢复:当数据库发生故障时,能快速并自动地进行故障检测和切换,从而减少系统的中断时间,确保服务的连续性和可靠性。

  • 数据保护和恢复:数据是企业的重要资产,因此需要定期备份数据库,并能够快速恢复数据,以应对意外的数据丢失或损坏。

  • 跨地域容灾:对于关键业务,可能需要在不同的地理区域设立数据中心,实现跨地域容灾,以应对自然灾害、网络中断或区域性故障。

功能优势

MatrixOne 通过纠删码进行数据冗余校验,同步事务日志采用 Raft 协议,只有多数派写入成功,事务才能提交,这确保了数据的强一致性,即使少数副本发生故障也不影响数据的可用性。MatrixOne 的高可用性满足金融行业 4 级标准(RPO=0,RTO<30min)。

技术架构

MatrixOne 的整体技术架构如下图所示,我们会根据不同的组件模块,分别介绍它们的高可用性。

high-availability

资源调度层

MatrixOne 的技术架构是完全云原生化的,所有的技术组件都以容器化的形式运行在 Kubernetes 上。通过采用多主多从的部署方案,Kubernetes 集群可以保证连续可用性。具体的部署拓扑及方案可参考 Kubernetes 官方方案

存储层

在存储层,MatrixOne 采用对象存储,推荐使用 Minio 进行部署。MinIO 作为一款成熟的分布式对象存储方案,需要保证数据服务的高可用性和数据文件的完整一致性。MinIO 集群的架构是分布式的,将数据存储在多个节点上,提供高可用性和容错性。同时,MinIO 集群使用 Erasure Coding 技术保证数据的可靠性和可用性。当某个节点发生故障时,其他节点可以使用这些编码副本恢复丢失的数据。

共享日志

共享日志组件 LogService 是 MatrixOne 中唯一拥有分布式事务状态的组件。这是一个由三个节点组成,遵循 Raft 协议的架构,即使一个节点失效,也能正常工作。它负责对整个 MatrixOne 集群的服务进行最终一致性的保障。

事务层

事务层组件 Transaction node 负责对事务操作进行冲突检测以及仲裁,它是一个无状态的节点。如果出现故障,Kubernetes 可以随时拉起,在秒级时间内就能恢复正常,保证持续可用性。目前版本的 Transaction node 仅支持单节点运行,后续会增加多 Transaction node 方案,以进一步提高可用性。

计算层

计算层组件 Compute Node 负责前端 Query 的解析,以及执行计划的生成和执行。它也是一个无状态的节点,如果出现故障,Kubernetes 可以随时拉起,在秒级时间内恢复正常,保证持续可用性。

Proxy

资源调度层中的 Proxy 组件负责对计算节点 CN 进行分组,实现负载隔离,以及在 CN 组内实现用户连接级别的负载均衡。Proxy 运行时以多副本互为备份的形式保证高可用性。