Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >openGauss中的最大可用模式为什么PG不做?

openGauss中的最大可用模式为什么PG不做?

作者头像
数据库架构之美
发布于 2020-10-09 07:51:50
发布于 2020-10-09 07:51:50
1.1K0
举报
pg有个一直遭人诟病的地方就是主备同步模式不能自动降级,这样会造成在同步模式下备库故障会影响主库的可用性。其实主流商业数据库如oracle、mysql等都支持在同步模式备库异常时自动进行降级,不影响或者短暂影响主库可用性。

至于pg为什么不做这个功能我也想了很久,下面是我自己的一点猜测。pg是个追求完美主义的数据库,他从架构设计层面就会考虑如何做到完美,比如说他不用主流数据库都在使用的undo,我猜测这个原因是因为,使用undo有一个问题,undo空间不管是文件系统还是表空间都是有大小限制的,而数据库未提交的事务信息可能是无限大的,这样数据的前镜像总有可能将undo空间撑爆掉,这样就需要清理旧的undo段,如果需要查询的undo前镜像备清理了,数据库就会跑出错误,这就是oracle中经典的snapshot too old报错。所以pg摒弃了这种模式,因为他觉得必须要提供给用户一个需要的数据一定能查到的数据库,而不是本该能查到的数据被无端清理掉了,所以pg使用了多数据版本来解决这个问题,将前镜像的真实数据放在数据文件中,真正确保没有事务可能再去访问该数据时才进行清理。当然这样也带来膨胀的问题,这其实也是pg最遭人诟病的问题。

再来说说最大可用。pg为了追求完美,一定要确保在同步模式下切换不丢数据,这个其实保证的是:如果在pg里设置成主从同步,那么在主备failover或者备库直接promote那一刻主备的数据是完全一致的,这个我觉得是pg想保证的东西,因为既然说是同步模式,那么不丢数据是基本要求。那么再来看看最大可用有什么问题。最大可用模式的解释是:在主备连接正常情况下,主备之间以同步模式提交数据,当主备之间遭遇异常导致主备连接失败那么会自动切为异步模式,不影响主机可用性。

这里其实有两个问题,第一个是虽然设置了同步模式,但是不能保证切换那一刻主备数据是完全一致的,试想如果某个时间点主备之间网络发生闪断或者波动,这时很短地切为了异步模式,这时候主库依旧在写入数据,备库此时依旧同步不到了,如果这时候发生了切换,备机提升后数据相比主库是少的。这种情况的概率很低,但是有可能发生。所以我猜测pg的考虑是将低概率事件也进行消灭,给用户确切的保证,追求完美。另外一点是最大可用需要有超时窗口,这样其实是在给用户一个选择,让用户去决定我有多大事件的可用性容忍度,如果超过这个容忍度,那么我宁愿冒着可能的数据丢失风险也要进行切换保证可用性。这个参数其实是必须的,目前openGauss虽然做了最大可用,但是缺乏这个参数,主备降级很快,目前测试应该是1s以内完成切换,这个其实不合理,超时参数的需求已经提交给华为。

总体上我觉得最大可用模式还是利大于弊,如果没有最大可用,那么我们需要额外开发监控体系监控备机的可用性,在备机异常时触发降级。这样其实很不友好,还是希望pg将这个功能尽快实现。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
openGauss与PostgreSQL的对比
华为公司今年6.30开源了openGauss数据库,openGauss数据库内核基于postgresql9.2.4演进而来,pg11.3版本数据库中共有290个数据库参数,而openGauss目前有515个数据库参数,每个参数对应一个数据库内核功能,所以可以看到华为公司对pg的内核还是做了非常大的改造和增强。
数据库架构之美
2020/08/05
10.8K0
数据库高可用架构浅析
数据库作为信息系统重要的基础设施,一直承担着压舱石的角色。互联网应用的高并发、海量数据使得数据库的负载越来越重,这在数据大集中的情况下愈发明显。而数据库作为信息系统唯一的“单点”,稳定性、可用性是首先要保证的目标。这里的单点并不是指数据库没有高可用方案,而是因为数据库只要涉及到数据的复制就一定是有状态的,有状态的应用更加难以运维,并且在遭遇异常时并不能做到真正意义上的无缝切换。
数据库架构之美
2019/12/18
1K0
数据库高可用架构浅析
2018-11-05 传统关系数据库高可用的缺失
关系数据库的事务(transaction)是一组操作序列,比如读,插入,删除,更新等等。事务有四个基本要素,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),即ACID:
Albert陈凯
2018/12/06
4650
2018-11-05 传统关系数据库高可用的缺失
深度干货 如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术
数据库高可用(High Availability,HA)是指在系统遇到故障或异常情况时,能够自动快速地恢复并保持服务可用性的能力。如果数据库只有一个实例,该实例所在的服务器一旦发生故障,那就很难在短时间内恢复服务。长时间的服务中断会造成很大的损失,因此数据库高可用一般通过多实例副本冗余实现,如果一个实例发生故障,则可以将业务转移到另一个实例,快速恢复服务。
qiaoyikefu
2025/01/17
1010
深度干货 | 如何兼顾性能与可靠性?一文解析YashanDB主备高可用技术
2024【崖山论”见“】已强势回归!即日起,将不定期把 Meetup 中YashanDB 技术专家的精彩分享整理成文章,方便大家学习回顾。今天带来第一篇主备高可用技术文章。
用户11498166
2025/02/14
570
面试系列-mysql高可用
两个节点可以采用简单的一主一从模式,或者双主模式,并且放置于同一个VLAN中,在master节点发生故障后,利用keepalived/heartbeat的高可用机制实现快速切换到slave节点;
用户4283147
2022/10/27
1.1K0
面试系列-mysql高可用
MHA vs MGR谁更合适用在生产系统
MySQL为什么如此流行的原因是因为它很早就有了非常成熟的高可用方案,这个方案就是mha,很多互联网公司都是基于mha做的高可用,所有受众面非常广。其实还有个小原因就是我们从上大学学习数据库原理这门课的时候老师就是拿mysql数据库作为例子,使得我们大部分人对它更加熟悉。
数据库架构之美
2019/12/18
4.3K0
MHA vs MGR谁更合适用在生产系统
PostgreSQL从小白到高手教程 - 第48讲:PG高可用实现keepalived
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。
用户5892232
2024/03/22
3420
PostgreSQL从小白到高手教程 - 第48讲:PG高可用实现keepalived
PostgreSQL从小白到高手教程 - 第44讲:pg流复制部署
PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。
用户5892232
2024/02/02
4640
PostgreSQL从小白到高手教程 - 第44讲:pg流复制部署
一篇彻底搞懂MySQL选择AP模型还是CP模型?
MySQL实例主从配置,可以实现数据同步、备份、读写分离、容灾:可以在主库挂掉后从备用从库中选举新Master进行数据恢复动作。
极简架构
2023/01/06
1.4K0
一篇彻底搞懂MySQL选择AP模型还是CP模型?
MySQL高可用九种方案
MySQL 高可用方案之 MMM(Multi-Master Replication Manager)是一种常用的解决方案,用于实现 MySQL 数据库的高可用性和负载均衡。
程序员朱永胜
2023/09/13
2.5K0
MySQL高可用九种方案
【基础概念】YashanDB主备复制及切换
主备复制是指通过将主库上的数据实时复制到备库实现高可用,是数据库最主要的高可用措施。
用户11498166
2025/02/25
970
Postgresql主从复制
Postgresql主从复制 主备数据库启动,备库启动wal_receiver进程,wal进程向主库发送连接请求; 主库收到连接请求后启动wal_sender进程,并与wal_receiver进程建立tcp连接; 备库wal_receiver进程发送最新的wal lsn 给主库; 主库进行lsn 对比,定期向备库发送心跳信息,来确认备库的可用性,并且将没有传递的wal日志文件进行发送,同时调用SyncRepWaitForLSN()函数来获取锁存器,并且等待备库响应;锁存器的释放时机和主备同步模式的选择有
用户7353950
2022/05/11
8640
Postgresql主从复制
复制架构,Redis Sentinel分析
Sentinel 是决策者, master 是主库,follow 是从库,下面按照数据复制,状态决策2个角度进行分析
温安适
2023/10/16
1870
复制架构,Redis Sentinel分析
破解分布式数据库的高可用难题:TDSQL高可用方案实现
腾讯云数据库国产数据库专题线上技术沙龙正在火热进行中,3月12日张文的分享已经结束,没来得及参与的小伙伴不用担心,以下就是直播的视频和文字回顾。
腾讯云数据库 TencentDB
2020/03/25
3.9K0
第十二章《mysql的日志优化》
一、日志 1.redo、undo 2.mysql主要的日志:1、错误日志2、查询日志(普通查询日志和慢查询日志)3、二进制日志
Java架构师必看
2021/06/02
3840
第十二章《mysql的日志优化》
基于scn备份解决dg归档丢失的方法论
作者介绍 黄堋 多年一线DBA经验,曾服务于电信、电网、医院等行业客户。擅长数据库优化、数据库升级迁移、数据库故障处理 当主备同步中断了,备库想快一点恢复,偏偏这个时候归档太多恢复不过来或者说需要的归
数据和云
2018/03/08
1.2K0
基于scn备份解决dg归档丢失的方法论
海豚 VS 大象 功能对比
MySQL为多线程架构后台有多个线程处理内部操作例如:刷脏、Undo purge、checkpoint等,整体上MySQL分为两层Server/存储引擎。存储引擎层可支持多种,Server层负责接收请求对于每个请求创建新的线程,同时SQL解析、查询优化、复制都是在Server处理。
田帅萌
2018/10/18
1.8K0
openGauss主备搭建方法详解
在当今数字化时代,数据库的高可用性至关重要,OpenGauss 作为一款高性能、高可靠的开源关系型数据库,其主备搭建能有效保障数据的安全性与业务的连续性。本文将详细介绍 OpenGauss 主备搭建的方法,帮助大家深入了解这一关键技术实践。
炒香菇的书呆子
2025/01/11
1530
【阿里数据库面试题解】MySQL高可用原理
正常情况下,只要主库执行更新生成的所有binlog,都可以传到备库并被正确执行,备库就能达到跟主库一致的状态,这就是最终一致性。
JavaEdge
2021/12/07
6660
【阿里数据库面试题解】MySQL高可用原理
相关推荐
openGauss与PostgreSQL的对比
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档