AntDB数据库灾备方案介绍

news2024/11/26 7:34:52

AntDB灾备方案(双中心方案)

AntDB数据库节点分布于两个机房,并使用 patroni + etcd 组件进行HA管理,主节点故障时能自动切换。切换时优先选择同机房的同步slave节点选举为new master。

部署图中相关组件说明:

⚫patroni:通过参数文件来配置自动初始化数据库搭建流复制(配置pg参数文件、创建用户、可以配置预加脚本),指定etcd节点等。负责通过一个api接口连接到dcs(分布式存储系统集群),向其插入键值记录patroni参数、数据库参数、主备信息以及连接信息。平时通过对etcd中的信息进行更新、读取来判断集群的健康状态。在主备切换或者做恢复时通过向etcd读取主备信息来判断各节点的状态进行切换。

⚫etcd:最少需要三个节点且为奇数来进行leader选举(脑裂发生时etcd集群会僵死等待恢复,不会发生都认为自己是主的情况)。存储并在各个节点上同步键值信息。

⚫antdb:关系型数据库。

基本流程:

⚫patroni自动创建主备流复制集群并且向etcd读取以及更新键值,即主从的状态信息

⚫etcd存储、同步键值信息

⚫patroni进行循环检测,如果发现当前节点或者主节点发生异常,会执行相对的应对措施(重启节点、主备切换等)

AntDB流复制主从数据同步和数据安全

AntDB通过WAL日志进行数据同步的方式有两种:

  • 基于WAL文件的文件级数据同步
  • 基于WAL更小单位record级的流复制,同步效率更实时

不同于基于WAL文件的文件级数据同步,流复制的关键在于“流”。通过流复制,备库不断的从主库同步相应的record,并在备库apply每个WAL record,流复制每次传输单位是WAL日志的record,commit或checkpoint操作都会触发流复制传输。

AntDB采用同步效率更实时的流复制进行主从数据同步,其流程图如下:

主从流复制的流程为:

  1. 主备数据库启动,备库启动walreceiver进程,wal进程向主库发送连接请求。
  2. 主库收到连接请求后启动walsender进程,并与walreceiver进程建立tcp连接。
  3. 备库walreceiver进程发送最新的wal lsn给主库。
  4. 主库进行lsn对比,定期向备库发送心跳信息来确认备库可用性,并且将没有传递的wal日志进行发送。根据配置的WAL日志同步级别,等待从库反馈的接收结果。

若WAL流复制同步级别设置为 on,即同步模式,则继续下述的流程:

  1. 备库调用操作系统write()函数将wal写入缓存,然后调用操作系统fsync()函数将wal刷新到磁盘,然后进行wal回放。同时备库向主库返回ack信息,ack信息中包含write_lsn、flush_lsn、replay_lsn,这些信息会发送给主库,用以告知主库当前wal日志在备库的应用位置及状态,相关位置信息可以通过pg_stat_replication视图查看。
  2. 如果启用了hot_standby_feedback参数,备库会定期向主库发送xmin信息,用以保证主库不会vacuum掉备库需要的元组信息。

根据上图,说明流复制几种同步级别的差异:

 

 

不同的同步级别对应的数据安全级别越高,对应的对性能影响也就越大。

上述从上至下安全级别越来越高,性能越来越差。

生产环境,从数据安全和性能两方面考虑,推荐使用 on 同步级别。

AntDB old master数据恢复并重新纳入HA

AntDB的灾备方案中,master挂掉后,备库会自动升级为主库继续提供服务,对于原来的主库(即old master),通常有两种处理方式

  • 使用pg_basebackup从new master复制全量数据恢复(类似于oracle的rman备份恢复),在追平后保持实时增量同步。
  • 使用pg_rewind 从new master只复制差量数据到old master恢复,在追平后保持实时增量同步。

很显然,第一种不是很好的方案,而且当数据量比较大时,时间成本太高。

pg_rewind 工具主要实现了从源库到目标库的文件级别数据同步。但是和rsync的区别是,pg_rewind 不需要去读那些未变化的文件块,当数据量比较大而变化较小的时候,pg_rewind比pg_basebackup要快得多。

pg_rewind其详细流程图如下:

目前,不管pg_basebackup还是pg_rewind,都已经纳入patroni的自动管理,当发生主从切换时,patroni会首先尝试使用pg_rewind增量恢复old master,如果失败,则再次尝试使用pg_basebackup全量恢复old master,并重新以slave身份纳入patroni的管控。

AntDB高可用架构对标

AntDB已经形成了一套完整且经过验证的高可用体系标准,覆盖应急系统、高可用、容灾系统与备份系统四个方面。

AntDB高可用切换指标

AntDB针对生产环境进行了Master节点DB宕、Master节点主机宕、Master节点etcd carash三个场景的生产高可用验证。结果显示AntDB数据库具备自愈能力,RTO、RPO符合预期结果。详细指标如下:

场景选择

  1. Master节点DB宕
  2. Master节点etcd进程宕
  3. Master节点主机宕

 

patronictl维护命令

我们用patronictl命令可以:

  • 查看集群状态
  • 发送一条SQL语句
  • 获取主节点dsn信息
  • 重启集群
  • 手动执行主备切换
  • 手动failover一个节点
  • DCS中删除集群信息
  • 重新初始化节点

Usage: patronictl [OPTIONS] COMMAND [ARGS]...

Options:

-c, --config-file TEXT Configuration file

-d, --dcs TEXT Use this DCS

-k, --insecure Allow connections to SSL sites without certs

--help Show this message and exit.

Commands:

configure Create configuration file

dsn Generate a dsn for the provided member, defaults to a dsn of...

edit-config Edit cluster configuration

failover Failover to a replica

flush Flush scheduled events

list List the Patroni members for a given Patroni

pause Disable auto failover

query Query a Patroni PostgreSQL member

reinit Reinitialize cluster member

reload Reload cluster member configuration

remove Remove cluster from DCS

restart Restart cluster member

resume Resume auto failover

scaffold Create a structure for the cluster in DCS

show-config Show cluster configuration

switchover Switchover to a replica

version Output version of patronictl command or a running Patroni...

查看集群状态

patronictl 命令

–c 指定patroni配置文件,batman是默认集群名字,在patroni参数文件设置

patronictl -c /etc/patroni/patroni.yml list

+-------------------------+----------+-------------------+--------+---------+----+-----------+-----------------+

| Cluster | Member | Host | Role | State | TL | Lag in MB | Pending restart |

+-------------------------+----------+-------------------+--------+---------+----+-----------+-----------------+

| batman5 | antdb117 | 10.21.20.117:6432 | | running | 16 | 0.0 | * |

| batman5 | antdb118 | 10.21.20.118:6432 | Leader | running | 16 | 0.0 | * |

| batman5 | antdb119 | 10.21.20.119:6432 | | running | 16 | 0.0 | * |

+-------------------------+----------+-------------------+--------+---------+----+-----------+-----------------+

发送一条SQL语句

patronictl -c /etc/patroni/patroni.yml query batman5 --command 'select version() ' –password

Password:

PostgreSQL 11.5 ADB 4.1devel 461fafc on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-36), 64-bit

获取主节点dsn信息

patronictl -c /etc/patroni/patroni.yml dsn batman5

host=10.21.20.118 port=6432

手动switchover一个节点

patronictl -c /etc/patroni/patroni.yml switchover

Master [antdb117]:

Candidate ['antdb118', 'antdb119'] []: antdb118

When should the switchover take place (e.g. 2015-10-01T14:30) [now]:

Current cluster topology

+--------------------+----------+-------------------+--------+---------+----+---

--------+

| Cluster | Member | Host | Role | State | TL |Lag in MB |

+--------------------+----------+-------------------+--------+---------+----+---

--------+

| batman5 | antdb117 | 10.21.20.117:6432 | Leader | running | 22 |0.0 |

| batman5 | antdb118 | 10.21.20.118:6432 | | running | 22 |0.0 |

| batman5 | antdb119 | 10.21.20.119:6432 | | running | 22 |0.0 |

+--------------------+----------+-------------------+--------+---------+----+---

--------+

Are you sure you want to switchover cluster batman5, demoting current

master antdb117? [y/N]: y

手动failover一个节点

patronictl -c /etc/patroni/patroni.yml failover

Candidate ['antdb118', 'antdb119'] []: antdb118

Current cluster topology

+--------------------+----------+-------------------+--------+---------+----+---

--------+

| Cluster | Member | Host | Role | State | TL |Lag in MB |

+--------------------+----------+-------------------+--------+---------+----+---

--------+

| batman5 | antdb117 | 10.21.20.117:6432 | Leader | running | 22 |0.0 |

| batman5 | antdb118 | 10.21.20.118:6432 | | running | 22 |0.0 |

| batman5 | antdb119 | 10.21.20.119:6432 | | running | 22 |0.0 |

+--------------------+----------+-------------------+--------+---------+----+---

--------+

Are you sure you want to failover cluster batman5, demoting current

master antdb117? [y/N]: y

在DCS中删除集群信息

patronictl -c /etc/patroni/patroni.yml remove batman5

+---------+--------+------+------+-------+-----------+

| Cluster | Member | Host | Role | State | Lag in MB |

| batman5 | antdb117 | 10.21.20.117:6432 | Leader | running | 22 |0.0 |

| batman5 | antdb118 | 10.21.20.118:6432 | | running | 22 |0.0 |

| batman5 | antdb119 | 10.21.20.119:6432 | | running | 22 |0.0 |

Please confirm the cluster name to remove: batman5

You are about to remove all information in DCS for batman5, please type: "Yes I am aware": Yes I am aware

重新初始化节点

patronictl -c /etc/patroni/patroni.yml reinit batman5 antdb119

+---------+-------------+---------------+--------+---------+-----------+

| Cluster | Member | Host | Role | State | Lag in MB |

+---------+-------------+---------------+--------+---------+-----------+

| batman5 | antdb117 | 10.21.20.117:6432 | Leader | running | 22 |0.0 |

| batman5 | antdb118 | 10.21.20.118:6432 | | running | 22 |0.0 |

| batman5 | antdb119 | 10.21.20.119:6432 | | running | 22 |0.0 |

+---------+-------------+---------------+--------+---------+-----------+

Are you sure you want to reinitialize members antdb119? [y/N]: y

Success: reinitialize for member antdb119

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

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

相关文章

Revit中楼梯该怎么画?包教包会!

绘制楼梯是室内装修中必不可少的一部分,因为楼梯的安装不仅仅是为了连接不同楼层,更是装饰整个室内空间的重要组成部分。 在楼梯的绘制过程中,需要结合实际情况进行设计,包括楼层高度、楼梯数量、台阶宽度、扶手高度等因素&#…

AntDB数据冷热分离方案

数据冷热分离 数据的存在价值,在于其被使用的程度,即被查询或更新的频率。在不同的业务系统中,人们对处于不同时期的数据有着不同的使用需求。比如,在网络流量行为分析系统中,客户会对最近一个月公司发生的安全事件和…

树莓派系统卸载桌面环境及系统瘦身

在我们刚入门树莓派时使用都是带桌面环境的系统,系统自带了非常多的实用软件,在学习和使用了一段时间后,我发现已经完全用不到桌面环境了,平时几乎都是通过 ssh 远程工具进行交互,并以命令形式来对系统进行操作。 Ras…

PHP日期时间函数date() 详解

**date()函数是我们在php开发中常碰到并且会使用到的一个日期函数,下面我来给大家介绍date()函数的一些基本扮靓和方法,有需要了解的朋友可进入参考. 日期时间函数是PHP 的核心组成部分。无需安装即可使用这些函数。下面来详细说说date函数的具体用法&a…

Python(request)爬虫有多强大?

requests是Python中的一种HTTP客户端库,用于发送HTTP请求并获取服务器响应。使用requests库可以轻松地进行常见的HTTP操作,如GET、POST、PUT、DELETE等,支持HTTPS和HTTP连接以及摘要验证、基本认证等身份验证方式。 因此,Python的…

嵌入式QT 树形浏览 - navListView

目录 1、什么是树形浏览 2、示例 3、树形浏览设计依赖文件 4、navListView 使用过程 4.1 添加文件 4.2 QListView提升为树形浏览 4.3 树形浏览设计 4.4 树形浏览功能实现 4.5 界面切换 4.6 树形浏览实现界面切换 1、什么是树形浏览 像下图这种左侧带有可以点击切换…

“小白“如何理解数据库

目录 前言 1.什么是数据库 2.数据库的用处 2.1数据库与文件的对比 3.使用数据库 3.1建立数据库 3.2建立表 3.3存储数据 4.服务器,数据库,表关系 5.数据库的分类 5.1MySQL架构 5.2SQL分类 5.3存储引擎 5.3.1什么是存储引擎 5.3.2如何查看存…

Lucene(9):Lucene优化

1 解决大量磁盘IO config.setMaxBufferedDocs(100000); 控制写入一个新的segment前内存中保存的document的数目,设置较大的数目可以加快建索引速度。 数值越大索引速度越快, 但是会消耗更多的内存 indexWriter.forceMerge(文档数量); 设置N个文档合并为一个段 …

easyexcel多行不同的表头导出

easyexcel多行不同的表头导出(多表格不同表头) 一、效果展示 二、代码 /*** 导出月度报表数据信息*/ApiOperation(value "导出月度报表数据信息")Log(title "导出月度报表", businessType BusinessType.EXPORT)RequestMapping(…

linux 下 sqlserver 连接 与开发准备

最近需要再linux下开发一个服务链接SQLserver。但是没有相关经验,然后参考了网上的一些博客。有点心得记录如下。 主要参考了这个:linux连接到sqlserver命令行,Linux 下连接sqlserver (上)_廖俊涛的博客-CSDN博客linux连接到sqlserver命令行,Linux 下连…

【网络安全】这份近 200 页应急响应文档,不会还有人没看过吧?

前言 成为伟大黑客的关键在于做自己喜爱的事,要把一件事情做好,你必须热爱它。所以只要你能坚持对安全技术的热爱,到了这种程度,你就会做得更好。 本文档注重理论与实战结合,不仅提供关键源代码供读者快速实践&#…

UnityVR--UIManager--UI管理1

目录 前言 UI节点的结构 需要用到的组件 1. CanvasGroup 2. Button等控件的OnClick()监听 3. EventTrigger 建立UI工具集 1. 管理UI节点 2. UIBase包含了以下的工具 建立分面板的管理工具——以主面板MainUi为例 前言 UI在项目中的重要性不言而喻,并且UI控件的…

将conda环境导入pycharm教程(史上最详细版)

一个不知名大学生,江湖人称菜狗 original author: Jacky LiEmail : 3435673055qq.com Time of completion:2023.6.15 Last edited: 2023.6.15 目录 将conda环境导入pycharm教程(史上最详细版) 步骤一:打开你的pychar…

Esxi直通A40显卡给ubuntu20.4系统驱动安装过程记录

Esxi直通A40显卡给ubuntu20.4系统驱动安装过程记录 背景描述 PowerEdge R750(esxi虚拟化) 服务器已有一张T4显卡,后期新增一张A40显卡,开一台ubuntu20.4系统直通A40显卡无法开机! 开机问题解决后安装显卡驱动也各种报…

可防撞抗震的海格里斯HEGERLS四向穿梭车立体库货架系统

随着经济的高速发展以及科学技术的不断进步,现代仓储和物流行业的发展都有了质的飞跃,技术融入到仓储的研发与生产中,促进了自动化仓储设备的出现。提到自动化仓储设备,那就无法忽视智能搬运机器人四向穿梭车,四向穿梭…

【Spring学习之生命周期】什么是生命周期?什么是作用域?了解六种作用域

前言: 💞💞从前⾯的课程我们可以看出 Spring 是⽤来读取和存储 Bean,因此在 Spring 中 Bean 是最核⼼的操作资源,所以接下来我们深⼊学习⼀下 Bean 对象。 前路漫漫,希望大家坚持下去,不忘初心&…

让你不再疑惑如何转换音频格式

你是否曾经遇到过这样的问题?你有一些wav格式的音频文件,但是它们不能在你的设备上播放,或者你需要将它们转换为其他格式以便更好地编辑和分享。别担心,转换wav格式并不是一件麻烦的事情。如果你还不知道wav格式怎么转换的话&…

今天面了个阿里拿27K出来的测试,真是砂纸擦屁股,给我露了一手啊

2023年春招已经结束,很多小伙伴收获不错,拿到了心仪的 offer。 各大论坛和社区里也看见不少小伙伴慷慨地分享了常见的面试题和八股文,为此咱这里也统一做一次大整理和大归类,这也算是划重点了。 俗话说得好,他山之石…

如何判断测量所得的CSI是视距还是非视距

1、视距(LOS)传播 无线电波沿直线传播的方式称为视距传播。 2、非视距(NLOS)传播 当CSI接收机与基站(BS)之间的直射路径被障碍物挡住后,无线电波只能在经过反射和衍射后到达接收端,此时测量到的数据&…

由于找不到msvcp120.dll怎么办,msvcp120.dll一键修复方法

运行软件程序或游戏,提示由于找不到msvcp120.dll,遇到这种问题要怎么办呢?一般都是计算机系统的dll动态链接库损坏或者文件丢失,不用慌,这个只要修复一下就可以,下面小编就一一道来,还可以实现一…