【GaussDB关键技术原理|高可用】DCF双集群容灾

news2024/9/20 5:49:58

GaussDB关键技术原理:高性能篇,从GaussDB数据库性能优化系统概述、查询处理综述、高性能关键技术等方面为大家进行了解读,并对高斯数据库性能优化做了总结。本篇将分享GaussDB高可用方面的相关知识,详细介绍GaussDB的DCF双集群容灾技术。

目录

1 DCF   

1.1 DCF(Distributed Consensus Framework)分布式一致性共识框架  

1.2 DCF功能架构  

1.3 DCF选举流程及优化  

选举流程介绍:

预选举优化:

租约优化:

1.4 DCF日志复制流程  

复制流程介绍:

1.5 DCF优先级选主和策略化多数派  

优先级选主:

1.6 DCF性能设计  

异步流水线:

数据合并与压缩:

批量并行落盘:

1.7 DCF日志与XLOG日志合一设计  

1.8 DCF异常场景处理,高可靠  

Leader故障    

网络分区

2 双集群容灾  

   数据中心架构

核心优势


DCF   

DCF是Distributed Consensus Framework的简称,它是自研分布式一致性共识框架,基于Paxos协议开发,实现多数派节点自选主自仲裁、日志复制、一致性控制等高可用功能。

1.1 DCF(Distributed Consensus Framework)分布式一致性共识框架  

DCF部署于gaussdb进程,以动态库形式提供给DN调用,实现DN节点间自选主自仲裁、XLOG日志复制、回放控制等。DCF主要设计特点如下:

  • 独立API数据复制与内核逻辑隔离;

  • 基于Paxos一致性协议实现日志多副本复制,实现跨AZ极致高可用;

  • 支持多种节点角色:leader、follower、candidate、passive、logger;

  • 支持多日志流通道,支持DN粒度和分区粒度日志分组复制能力;

  • DCF内部实现通过多处的pipeline、batching、compress等手段提升整体性能。  

1.2 DCF功能架构  

DCF通过上层API提供给DB kernel调用,在DCF内部主要功能模块如下:

  • 接口:对外提供写入、查询、注册回调等接口

  • 选举:负责主节点的选举、心跳维持、状态通知

  • 复制:负责日志的复制、提交、达成一致控制

  • 元数据:负责管理集群配置信息

  • 存储:负责日志数据的缓存管理和持久化

  • 通信:提供节点间的数据通信功能,并支持压缩解压和SSL能力

  • 基础库:提供线程、日志、锁、队列、定时器等基础能力

1.3 DCF选举流程及优化  

选举流程介绍:

除了配置为不可当主的角色(logger、passive)外,启动时各节点一般默认是备机follower角色。节点启动后如果没有收到主节点的心跳,则达到选举超时时间后节点就会发起选主请求,如果节点收集到超过半数节点的应答则可升主。节点升主后会定期给其他节点发送心跳维持权威,其他节点收到心跳后作为备机工作。

每次选出新主都会产生一个新的任期term,这个term是单调递增的。当后续重新选主,term会跟着变大。

如果主节点故障,无法继续发送心跳,其他节点达到选举超时时间后会发起新一轮选举,集群选出新主,继续对外提供服务。

预选举优化:

为防止网络断连导致节点频繁发起选主请求造成term持续增加,采用了优化方案:在Follower变为Candidate前加入pre-candidate状态,发起term不变的预选举流程,成功后才将term增加发起正式选主流程,避免无效的term增加。

租约优化:

Leader与多数派断连主动降备,防止出现事实双主。

在lease时间内不再响应新的选主消息,保证选主可靠性。

1.4 DCF日志复制流程  

          

复制流程介绍:

在集群有主的情况下,上层可以调用DCF写接口将日志写给DCF主节点,DCF主节点将日志复制给各个备机,日志并行在主机和各备机落盘,主机收集自身和各备机日志落盘的位置,从而计算得到达成多数派一致性的日志落盘位置,即一致性点。主机会将一致性点同步给备机,整个过程异步、并行、流水线处理。各个节点都有了实时一致性点,主机可以利用一致性点控制业务提交、脏页刷盘、checkpoint等流程,备机可以利用一致性点控制XLOG日志回放,保证业务一致性、各节点不分叉。

1.5 DCF优先级选主和策略化多数派  

优先级选主:

(1)根据用户指定的AZ和节点优先级顺序,通过节点间信息交互及日志索取机制实现了确定性优先级选主。    

(2)高优先级节点异常时,其他节点秒级感知,保证选主RTO。

(3)策略化多数派。

(4)支持灵活动态的策略化多数派,可通过参数配置。

(5)在发生AZ级或城市级故障时,能够在其他AZ选出新主,不丢失数据。

1.6 DCF性能设计  

          

异步流水线:

日志采用全异步pipeline方式进行发送,不采用一问一答同步方式,且支持报文合并发送,提高系统整体吞吐量;

Leader发送完一批log之后,记录发送位置,下次发送从这个位置持续发送,不用等follower响应回来;

Follower落盘线程写完一批log之后,将最新的落盘点发送给leader,持续反馈最新的落盘点;

Leader通过各节点的最新落盘点,推进一致性点。    

数据合并与压缩:

报文收发和工作线程采用异步pipeline;

基于端到端共识流控算法自适应调整batch size、 pipeline并发数,提升系统最大吞吐量;

支持将报文按不同压缩算法进行压缩发送,减少网络带宽。

批量并行落盘:

应用端调用write接口,写入内存buffer就返回,不阻塞应用流程处理;

批量写盘和批量发送,日志到buffer之后,并行的将日志落入本地磁盘和发送到follower节点。   

1.7 DCF日志与XLOG日志合一设计  

为了减少磁盘空间和IO带宽占用、优化性能,我们进行了DCF日志与XLOG日志合一设计,实现XLOG日志只写一份。

DCF日志头和配置日志放在DCF侧(称为控制日志ctrllog)以方便DCF内部处理,XLOG日志格式和之前保持兼容。ctrllog和XLOG建立内部索引关系,相比XLOG其日志量可以忽略不计。

使用XLOG刷盘点计算多数派一致性点,控制业务提交;XLOG刷盘点也是选主的依据。DCF控制日志刷盘以方便业务处理和故障恢复逻辑,限制DCF控制日志刷盘频率避免对XLOG刷盘影响,保证整体性能。

1.8 DCF异常场景处理,高可靠  

Leader故障    

如图,三节点集群,红色节点表示主机、蓝色表示备机,各节点旁边数字第一行表示日志index,第二行表示任期term,每一列表示一条日志。

leader节点宕机,导致Leader心跳发送停止,日志复制停止。

Follower检测到心跳超时,转换为candidate,发起新任期选举。

Follower若接收到其他节点发起的选举,则判断任期和日志长度,确定是否投票给它。

candidate若得到超过半数的选票,则成为leader,拥有新的任期term。

新leader开始将自己的日志发送给其他follower。

Follower接收新leader来的日志信息,判断日志是否跟自己连续匹配,连续匹配则接受。若不连续则返回,leader重新发送前段日志;若term不匹配,则将新leader的日志覆盖到原来的位置,并将后面的日志truncate掉。最终所有节点的日志都是一致的。    

网络分区

五节点集群,分裂为3+2,如图所示:

集群脑裂,分裂出两个小集群。

2节点小集群存在一个原leader,3节点新集群选举一个新leader,任期增1。

原leader无法达成大多数一致,日志无法提交,一定时间内会降备。

新leader能接受写请求进行写入操作,能够达成一致,进行日志提交。

脑裂消失之后,新leader的日志复制给旧leader,将旧leader未提交日志覆盖,集群正常。

2 双集群容灾  

GaussDB 双集群容灾方案,是GaussDB提供的一种新架构和部署方式的容灾技术。在已有的容灾方案中,多采用单集群多副本的模式进行跨AZ部署,无法做到故障隔离,类似于集群管理组件的故障或其他区域性的故障将导致整个集群服务不可用;对于传统的基于网络的日志同步方式,数据库主备节点间地理距离的增大将导致传输时延的大幅度增加,直接影响到生产服务的性能。同时,金融、银行业对数据安全有着较高的要求,需要最大限度地保证数据的安全性以及服务的可用性。因此,GaussDB提供了支持RPO=0的数据库双集群容灾方案,即主集群在出现故障的情况下,备集群还具备继续提供服务的能力,当发生自然或人为灾难时,保护数据并快速进行恢复,对数据丢失零容忍。 

   
数据中心架构

  • 双集群部署方式,即每个数据中心分别部署一套独立的GaussDB数据库集群,其中一个数据库集群作为生产集群,提供读和写服务,另一个集群作为灾备集群。

  • 每个数据中心都分别有一个独立的Region和AZ,用来部署GaussDB数据库集群。全量build同步通过云内跨Region跨VPC的BMS之间的网络承载,增量日志同步通过Dorado之间的主备复制承载。    

  • 主集群的Redo日志通过网络同步到备集群的存储设备中,主集群的备节点从存储设备中读取Redo日志并进行回放,备集群的备节点从所在分片的存储设备中读取Redo日志并进行回放。当数据库主节点写入的日志同步到备集群的存储设备之后,主节点的事务才会被提交,从而确保了集群切换RPO=0的性能指标。

  • 数据存储不使用本地盘,而是采用Dorado(全闪存共享存储阵列),即每个GaussDB数据库集群都配置一套独立的Dorado作为存储;两套Dorado之间采用主备同步复制,数据复制的模式支持最大保护模式和最大可用模式。

  • 数据中心内部实例级故障时,RPO=0、RTO<=30秒;跨数据中心集群间容灾时,RPO=0、RTO<=60秒。

  • 在同城双集群容灾的基础上,可以和异地集群组成跨Region容灾,即增加一个异地的灾备中心,用于对同城双中心的数据备份,形成两地三中心的容灾解决方案。

核心优势

金融级高可用:支持RPO=0 、RTO<60s的容灾切换,保障业务的安全性和可靠性。当主集群发生故障时,备集群能够数据无损地快速完成切换,替代主集群继续提供生产服务。

高性能:第一,采用物理日志同步相对于逻辑日志同步性能可提升10倍;第二,通过Dorado存储硬件实现集群间日志的快速同步,利用Dorado固有网络协议(密集波分),降低网络时延一倍以上,同时利用Dorado存储的缓存能力,日志写入即刻持久化,降低了事务提交时延。

高可靠:数据安全实现双保险,一方面数据库内核的多副本保障了故障自动切换和恢复,不中断业务;另一方面,存储内核保障了磁盘亚健康、故障容错、硬件自愈等能力。

架构先进性:通过数据库内部计算与存储分离,将存储管理放到下层共享存储中,从而解决数据同步带来的延时问题,并同时增加了计算能力的横向扩展性。    

集群隔离:数据库集群间解耦,故障域隔离从而避免全局性的网络故障;集群间版本隔离,避免Bug污染,能够快速回切;集群间资源隔离,按照Region进行资源管理和调度,方便数据库管理员对数据库系统资源使用进行规范和约束。

双集群容灾方案进一步提升了GaussDB的高可用能力,特别是针对性能和稳定性有更高要求的金融核心业务场景,提供了安全可靠的数据库服务,使数据库无惧灾难,为用户的生产业务保驾护航。

以上内容从DCF与双集群容灾技术两方面对GaussDB的高可用能力进行了解读,下篇将从逻辑复制方面继续介绍GaussDB高可用相关技术,敬请期待!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1940786.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

双目相机立体匹配算法概述

这里写目录标题 双目相机立体匹配算法概述1.算法分类2.传统算法2.1 局部算法2.2 全局算法2.3 半全局算法 3.深度学习算法3.1 基于CNN的方法3.2 基于GAN的方法3.3 基于transformer的方法 4.总结5.参考文献 双目相机立体匹配算法概述 双目立体匹配是计算机视觉中的一个重要研究方…

数据挖掘与分析部分实验内容

一、机器学习算法的应用 1. 朴素贝叶斯分类器 相关代码 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.naive_bayes import GaussianNB, MultinomialNB from sklearn.metrics import accuracy_score # 将数据加载到DataFrame中&a…

Stable Diffusion 使用详解(3)---- ControlNet

背景 炼丹师在AI绘画的过程中&#xff0c;由于Stable Diffusion的原理是水滴式的扩散作图原理&#xff0c;其实在前面也有提到&#xff0c;他的发挥是‘不稳定’的&#xff0c;因为你没有办法做到精确控制&#xff0c;只能说是大致符合你的预期。你不能总依赖抽卡固定随机数种…

SpringCloud--负载均衡

目录 前言 一.负载均衡的引入 1.1问题引入 1.2代码修改实现 二.负载均衡介绍 2.1实现负载均衡 2.2负载均衡策略 2.3LoadBalancer 原理 学习专栏&#xff1a;http://t.csdnimg.cn/tntwg 前言 在前面的Eureka当中&#xff0c;我们虽然实现了从注册中心中获取url&#xf…

spark 广播变量broadcast

broadcast使用如下图&#xff0c;可以看到创建broadcast是val barr1 sc.broadcast(arr1)&#xff0c;使用broadcast是barr1.value 创建broadcast是使用的broadcastManager。 BroadcastManager cachedValues变量是map结构&#xff0c;key是broadcastId&#xff0c;强引用&a…

初识C++|模板初阶

&#x1f36c; mooridy-CSDN博客 &#x1f9c1;C专栏&#xff08;更新中&#xff01;&#xff09; 目录 &#x1f349;1. 泛型编程 &#x1f349;2. 函数模板 &#x1f95d;2.1 函数模板概念 &#x1f95d;2.2 函数模板格式 &#x1f95d;2.3 函数模板的原理 &#x1f95…

java题目之数字加密以及如何解密

public class Main6 {public static void main(String[] args) {// 某系统的数字密码&#xff08;大于0&#xff09;&#xff0c;比如1983&#xff0c;采用加密方式进行传输//定义了一个静态数组int []arr{1,9,8,3};//1.加密//先给每位数加上5for (int i 0; i <arr.length …

1997. 孤独的素数(结果有一点问题,希望能一起求解)

问题描述 在一个 &#x1d45b; 行 &#x1d45a;列的矩阵王国中&#xff0c;生活着一些整数&#xff0c;其中一些是素数&#xff0c;一些不是素数。如果一个素数的上下左右、左上、右上、左下、右下相邻的数中都没有素数&#xff0c;我们就认为这是一个孤独的素数。 比如&am…

Spring Boot + Spring Cloud 入门

运行配置 java -jar spring-boot-config-0.0.1-SNAPSHOT.jar --spring.profiles.activetest --my1.age32 --debugtrue "D:\Program Files\Redis\redis-server.exe" D:\Program Files\Redis\redis.windows.conf "D:\Program Files\Redis\redis-cli.exe" &q…

【零基础必看的前端教程】——JavaScript(四)类型转换

欢迎大家打开前端的新篇章——JavaScript&#xff0c;JavaScript与HTML、CSS合称为前端三大件&#xff0c;JavaScript是前端的重中之重&#xff0c;小洪将继续以零基础视角&#xff0c;带你循序渐进学习前端知识&#xff0c;一看就懂&#xff0c;小白也能转行做前端&#xff01…

基于WebGoat平台的SQL注入攻击

目录 引言 一、安装好JAVA 二、下载并运行WebGoat 三、注册并登录WebGoat 四、模拟攻击 1. 第九题 2. 第十题 3. 第十一题 4. 第十二题 5. 第十三题 五、思考体会 1. 举例说明SQL 注入攻击发生的原因。 2. 从信息的CIA 三要素&#xff08;机密性、完整性、可用性&…

推荐一款基于Spring Boot 框架开发的分布式文件管理系统,功能齐全,非常便捷(带私活源码)

前言 在数字化时代&#xff0c;文件管理是企业和个人用户的基本需求。然而&#xff0c;现有的文件管理系统往往存在一些痛点&#xff0c;如存储空间有限、文件共享困难、缺乏在线编辑功能、移动端适配性差等。这些问题限制了用户在不同设备和场景下的文件处理能力。 为了解决…

spring-retry详解

spring-retry详解 1.引入依赖2.Retryable基础使用3.Recover使用4.Retryable参数详解5.需要注意 重试机制对于大部分场景来说都是必要的&#xff0c;比如同步调用三方接口&#xff0c;三方接口、信息拉取等网络原因突然不通&#xff0c;有了重试就可以多一些容错机制&#xff0c…

压缩包方式windows安装mysql

压缩包方式windows安装mysql 本文介绍通过压缩包方式在Windows本地安装mysql。 一、 具体步驟 步骤1&#xff0c;下载mysql压缩程序 这里好像上传不了压缩文件&#xff0c;先这样吧&#xff0c;后期补充。 步骤2&#xff0c;解压并手写添加 my.ini 文件 my.ini 文件内容如下…

Air780EP-AT开发-HTTP应用指南

简介 关联文档和使用工具&#xff1a; AT固件获取AT指令手册 概述 4G模块支持HTTP和HTTPS协议&#xff0c; HTTP应用的基本流程如下&#xff1a; 1、激活PDP&#xff08;参考&#xff1a;http://oldask.openluat.com/article/937&#xff09;2、初始化HTTP服务3、设置HTTP会话…

17_高级进程间通信 UNIX域套接字1

非命名的UNIX域套接字 第1个参数domain&#xff0c;表示协议族&#xff0c;只能为AF_LOCAL或者AF_UNIX&#xff1b; 第2个参数type&#xff0c;表示类型&#xff0c;只能为0。 第3个参数protocol&#xff0c;表示协议&#xff0c;可以是SOCK_STREAM或者SOCK_DGRAM。用SOCK_STR…

ontap simulator配置过程

一、下载模拟器 参考《Simulate_ONTAP_9-14-1_Installation_and_Setup_Guide.pdf》P4的指导&#xff0c;登录网站进行下载。 二、传入pve&#xff0c;并解压转换 # 解压 tar -xvf vsim-netapp-DOT9.14.1-cm_nodar.ova# 解压后的文件列表&#xff0c;其中ovf文件里定义了虚拟机…

Docker部署Elasticsearch8.6.0 Kibana8.6.0

为了匹配springboot3.0.x&#xff0c;安装Elasticsearch:8.5.3 拉取镜像&#xff0c;遇到问题&#xff01; [rootserver01 ~]# docker pull elasticsearch:8.5.3 8.5.3: Pulling from library/elasticsearch eaead16dc43b: Retrying in 1 second a405acf5b7d4: Retrying in 1…

结构体[C语言]

文章目录 结构体的概念结构体的用法定义结构体创建结构体变量访问结构体成员 结构体的应用 结构体的概念 结构体是一种用户自定义的数据类型&#xff0c;它允许我们将逻辑上相关的不同数据类型组合在一起。例如&#xff0c;如果我们想要表示一个学生的信息&#xff0c;我们可以…

texify - 识别数学/图像 PDF

文章目录 一、关于 texify例子训练 二、安装手动安装 三、使用1、使用技巧2、用于交互转换的应用程序3、转换图像4、Python 中导入并运行 四、限制五、基准测试运行自己的基准测试 六、其它商业用途感谢 一、关于 texify Texify是一种OCR模型&#xff0c;它将包含数学的图像或…