佳实践|SequoiaDB巨杉数据库两地三中心部署
01 前言
在本文中,我们将和大家一起来了解,如何利用金融级数据库SequoiaDB的多副本、高可用能力,构建两地三中心系统,从而为数据库系统的容灾建设,提供一些新的思路,并提供佳实践指导建议。
02 背景
2.1 两地三中心技术
当自然灾害等不可抗力故障发生时,同一个城市的基础设施同时遭到破坏,主、备中心均丧失了业务连续性和数据保护的能力。为了达到这样的防范能力,就需要在同城双中心的基础上,加一个异地灾备中心,增加整个系统的高可用性和灾难恢复能力,避免主备站点同时不可用造成的业务大面积瘫痪,及数据的灾难性破坏。
2.2 巨杉金融级分布式数据库SequoiaDB简介
SequoiaDB 巨杉数据库是一款原生分布式数据库,具有存算分离、多模、多副本高可用等技术特性,已经帮助超过 50 家银行机构、上百家金融级用户,来承载高并发联机交易、数据中台、内容管理等多种类型的业务场景,取代了传统架构的数据库。
众多客户,选择巨杉数据库的两地三中心架构,实现业务的跨站点、跨区域容灾,进一步提升了业务系统在灾难场景下的业务连续性和数据保护能力。
03 SequoiaDB 技术架构
SequoiaDB分布式架构示意如图2。
从部署示意图及架构图中可以看出,巨杉数据库主要由计算实例、协调节点、编目节点、数据节点四个组件构成。
计算实例:负责接收应用端的访问请求,并将其转换成巨杉数据库特有的语法协议。计算实例支持多种引擎,如SQL引擎、JSON引擎、对象存储/文件系统引擎等。
协调节点:负责执行计划的生成,及访问请求的路由和转发。将执行分解成独立的计算单元,下发到数据节点进行存取和运算,并将结果返回计算实例。
编目节点:负责维护集群的元数据,如拓扑结构、安全策略、表与集合定义以及分区规则等。
数据节点:以数据组为单位提供数据的存储和访问,数据组内实现副本化,主节点可读写,备节点可读。如果某个主节点发生故障,则通过RAFT协议选举出新的主节点。
关于巨杉数据库技术架构的详细解析,请参考《金融级数据库巨杉SequoiaDB技术架构讲解》(http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1558957225-edition_id-500)和《巨杉数据库高可用原理详解》。
04 SequoiaDB两地三中心部署佳实践
4.1 部署概述
在本文中,我们用SequoiaDB部署了一套数据库集群,用来承载典型的OLTP系统。上层应用采用微服务架构,应用和数据库都采用两地三中心的集群部署形式。
相较于同城双中心的部署方式,两地三中心在容灾层面更具优势。三个数据中心(主中心、同城灾备中心和异地灾备中心)中,任意一个完全瘫痪,无需人工干预即可完成透明故障转移,数据库可正常运行,应用做到了无感知。
数据中心规划:
每个中心,必须要具备业务接管能力,所以配置一组协调节点;
主中心,必须具备数据的读写访问能力,所以配置全量的主节点,以及一组编目节点;
备中心,提供只读访问能力,一旦将来主中心发生故障,也必须具备读写能力,所以配置一组全量的备节点(切换后即成为主节点),以及一组编目节点;
Note: • ReplSize:SequoiaDB的ReplSize参数,用来控制写操作发生时,必须具备什么样的数据一致性同步条件,才向客户端返回写入结果。 -1,写请求同步到该数据组所有活跃节点后,写操作才返回;
0,请求同步到该数据组所有节点后,写操作才返回;
N,写请求同步到该数据组其它节点后,必须确保至少有N个节点数据一致,写操作才返回。N的取值范围[1-7]。
• weight:节点选举权重值。通过改参数,来设置选举过程中各节点的优先级。取值范围[1~100],默认值为10。 • archivecompresson: 开启归档日志压缩特性,从而节省本地空间。
4.4 故障场景模拟
发生故障后,数据库后台发生一系列动作,来完成故障转移。数据库集群要能够接管业务,有三个必要条件:
1. 集群中至少有1个协调节点,对应用提供访问;
2. 集群中至少有1个主编目节点,提供元数据的读写;
3. 集群中有1套完整的数据库的全量主节点,处于存活状态,数据可读可写。
Note:
选举和仲裁机制:
• 主节点故障后,需要一个机制来选择新的主节点。每个数据组内所有的副本节点定期向组内其它成员发送含自身状态的心跳信息,当主节点宕机后,所有的备节点间会进行投票,选取具资格的备节点即当选新的主节点。组内必须拥有超过半数以上的节点参与投票,否则为了避免“脑裂”发生而无法进行选举。
• 任何时刻组内成员必须超过半数,否则当前的主节点会自动降级为备节点,同时断开当前节点的所有用户连接。
同城主中心单点故障的示意图如图4。
图4 主中心单点故障示意
故障转移过程:
当主中心sdb01发生故障,此时sdb01上datagroup[1-5]的主节点将不能进行写入操作。此时发起选举,根据优先级设置,主中心sdb02上datagroup[1-5]的备节点,将成为主节点。选举结束后,集群立即恢复正常,无需人工干预。
4.4.2 同城备中心单点故障
图5 同城备中心单点故障示意
图6 主中心整体故障示意
故障转移过程:
当主中心sdb01、sdb02同时故障,意味着数据主节点均不能读写。此时发起选举,根据优先级设置,备中心sdb03上datagroup[1-5]的备节点,sdb04上datagroup[6-10]的备节点,将成为主节点。选举结束后,集群恢复正常,无需人工干预。
故障转移过程:
同城备中心整体发生故障,由于其上没有主数据节点,数据库集群仍可正常提供读写,业务不受影响。待故障恢复后,快速完成数据同步,则节点即可修复。
故障转移过程:
当主中心、同城备中心(sdb01/sdb02/sdb03/sdb04)同时不可用,就需要由异地灾备中心来承载业务访问。例如发生城市级的不可抗力故障时,就属于这种情况。
这里需要用到Split工具进行人为处理,把异地灾备中心分裂出去,使之成为一个独立的单副本集群,从而提供读写访问。
待故障恢复后,可通过Merge工具,将原有节点重新合并到集群,使集群拓扑恢复到初始状态。
分裂集群的耗时比较短,一般在1分钟内便能完成。
Note: 集群分裂:按照RAFT协议,必须确保半数以上节点存活,集群才处于可用状态。在两地三中心5副本模式下,当同城主、备站点均发生故障时,5副本中的4个已经不可用,集群仅剩余1个副本,不能对外提供服务。
同城备中心整体故障的示意图如图9。
故障转移过程:
当同城、灾备中心之间的网络出现故障,导致站点间无法进行通信时,应用程序可以继续访问本地四副本集群,业务没有任何影响,无需人为干预。
待网络故障修复后,完成异地灾备中心节点的数据同步即可。
05 总结
随着数据量的持续增长,如何解决SequoiaDB数据库的扩容问题?
为了应对更严苛的业务连续性、数据保护要求,巨杉SequoiaDB数据库能否实现三地五中心架构?
在多中心的架构下,能否使各个站点、各个数据中心同时提供读写访问,实现多活?
相关文章