暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

数据库之高可用方案

1485

最近看了一篇文章,讲数据库的高可用,个人觉得写的很好。

原文:https://dbaplus.cn/news-11-3732-1.html

本文是对这篇文章的一个总结和梳理。

1、什么是高可用?

从定义上,高可用指的是服务的可用性比较高,是指为让一个系统能够无中断的执行其功能的能力,是可用性的衡量指标。

 

2、如何达到高可用?

通常,我们需要“冗余”机制来实现。即使有一个或者一部分发生故障,还有其他冗余的服务或者组建能够对外提供服务,从而达到整个服务的高可用。

3、高可用的分类?

按照一般业务架构类型来分,可以有业务高可用,计算高可用和存储高可用。

业务高可用/计算高可用:比如我们的业务服务可以有多个,且都提供相同的逻辑,这个时候基本上只要增加冗余,部署同样的业务服务后者增加可以实现同样功能的业务组件,就可以实现业务的高可用或者计算的高可用。

存储高可用:相对来说复杂,因为数据库是有状态的,数据在不同的节点,不同的时刻,会有不同的事务,会有各种不同的状态,并不是完全的两份就可以了。

4、数据库高可用/存储高可用。

 

数据库的高可用,本质上存储的高可用。其高可用模型,至少需要三个模块方面的功能。

数据同步模块:高可用基础,实现“冗余”和“多副本”。

高可用管理模块:高可用实现,状态判断,故障切换。

统一访问模块:高可用接口,对外应用访问透明。

因为数据库有状态,而这种状态的同步,在实现冗余的时候,我们需有数据同步模块来实现两个数据库实例,甚至多个数据库实例具有一致性数据状态的这样的功能。——同步模块。数据库同步模块,一般是基于数据库本身的一些功能,比如事务日志,关系型数据库会将数据库的所有变化记录到日志中,日志还可以进行归档,当日志文件传输到其他节点上面,节点可以基于这些日志进行重做。

在高可用模型的最上面,数据库要对业务暴露连接,那么当数据库底层发生变化时,应用最好是无感知的,所以需要一个统一的访问接口。——统一访问模块。

在数据同步模块和统一访问模块之间,对高可用的架构和高可用本身进行管理,包括状态判断,以及在异常情况下的故障切换等。——高可用管理模块。

应用与数据库访问的方式,可以通过直连数据库,也可以通过中间层访问数据库,通过中间层访问数据库的好处是:统一入口,对应用透明,故障切换时endpoint不发生改变,常用的有vip、dns、proxy。

5、典型通用的高可用方案。

不论哪种数据库,底层通过数据库各种不同的数据库全量备份和增量同步来建立数据同步的机制,通过haproxy和keepalive来实现健康检查、负载均衡和其他的一些代理的功能,最后vip段提供服务,这是一种通用的数据库高可用方案。

6、postgresql的高可用方案

对于PG的高可用方案,从原理上来讲,高可用也要实现数据同步模块、高可用管理模块以及对外统一访问接口三个层面。

从数据同步层面来讲,pg的高可用架构可分为:

1)共享存储

2)流复制(同步流复制和异步流复制)

3)逻辑复制

扩展:

逻辑复制和流复制之间的差别是:

• 流复制里只有一个主节点,可以挂很多从节点。逻辑复制里所有的节点都是对等的主节点,都可以提供对外读写操作。

• 逻辑复制实际是从逻辑上把 SQL解析出来,到其他订阅节点进行重放,相当于SQL的重放。流复制发布的数据是更改的数据块。

至于高可用管理层和统一访问接口层可以使用通用的方案。

pg的高可用方案业内用的比较多的方案有两个:pgpool-II和patroni

7、高可用主要检测哪些故障?

绝大数的高可用检测的故障,一是存活状态,二是网络状态。两者有一定的关联性。假设网络是稳定的,在网络正常情况下,实际上就是实例的存活状态。存活状态如果想细化,可以去查询一组数据,能查询到,我们就认为是正常,也可以选一个固定的用于检测的表,来进行update。一方面保证数据库的端口在,另一方面保证有数据,第三个是能读取,能修改

参考:

https://dbaplus.cn/news-11-3732-1.html

https://developer.aliyun.com/article/783103

文章转载自PostgreSQL运维技术,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论