Postgresql高可用-知识概要

Postgresql高可用-知识概要

  1. 什么是高可用(HA)

‌    高可用性(High Availability,简称HA是指系统或服务能够在长时间内保持正常运行的能力,即使在出现部分故障的情况下也能够继续提供服务。高可用性的主要目的是保障业务的连续性,确保系统在用户眼中始终是正常对外提供服务的。

   数据库高可用性(Database High Availability是指数据库系统在出现故障或不可用情况时,仍能保持持续可用和正常运行的能力。数据库高可用性是数据库领域的一个重要概念,确保数据库系统在任何时刻都能够提供数据访问和服务,从而确保业务的连续性和稳定性      

  2. 高可用性的度量

        在传统领域,SLA用于在商业上定义系统的高可用。SLA全称是service level agreement,SLA是服务提供者与用户之间协商并签订的一个具有法律约束力的合同,合同规定了在服务提供过程中双方所承担的商务条款。在软件领域,最广泛使用的指标是平均服务时间。

业界用 N 个9 来量化可用性, 最常说的就是类似 “4个9(也就是99.99%)” 的可用性。

如果按照年为单位计算系统的故障时间,公式:故障时间秒数=(1-可用性) * 365 * 24 * 3600。如下图:

高可用架构核心准则:冗余+故障转移(容灾恢复)。

 3. 容灾恢复-关键指标

■ RPO:(Recovery Point Obejective,恢复点目标)是指业务系统所允许的在灾难过程中的最大 数据丢失量,用来衡量容灾系统的数据冗余备份能力。

■ RTO:(Recovery Time Objective,恢复时间目标)是指信息系统从灾难状态恢复到可运行状态 所需的时间,用来衡量容灾系统的业务恢复能力。

4.  容灾恢复-指标等级

 

5. 高可用不同方案

5.1 比较共享磁盘故障转移

共享磁盘故障转移是一种在服务器发生故障时,通过共享磁盘快速恢复服务的技术。它通过使用由多台服务器共享的单个磁盘阵列来实现,当主数据库服务器发生故障时,备用服务器能够挂载并启动数据库,从而实现快速故障转移而不会丢失数据1

5.2 实现共享磁盘故障转移的方法

iSCSI共享磁盘:在Windows Server环境中,可以通过部署iSCSI共享磁盘来搭建故障转移群集。具体步骤包括在域控制器中安装iSCSI服务,创建虚拟磁盘,并在节点服务器上配置虚拟磁盘,使其能够在故障发生时快速接管服务2

文件系统复制:另一种方法是使用文件系统复制技术,如DRBDDistributed Replicated Block Device),它通过镜像文件系统的所有更改到另一台计算机上的文件系统,确保备用服务器具有完整的数据副本

事务日志传送:通过读取预写日志(WAL)记录流,温备用服务器和热备用服务器可以保持最新状态。如果主服务器发生故障,备用服务器可以快速接管服务

5.3 共享磁盘故障转移的优缺点
  • 优点
    • 数据一致性:共享磁盘确保了数据的一致性,避免了数据同步的开销。
    • 快速恢复:在故障发生时,备用服务器可以迅速接管服务,减少服务中断时间。
  • 缺点
    • 单点故障:如果共享磁盘阵列发生故障或损坏,主服务器和备用服务器都将无法运行。
    • 维护复杂:共享磁盘的管理和维护相对复杂,需要确保所有节点同步更新

通过以上方法和技术,可以实现高效的共享磁盘故障转移,确保服务的连续性和数据的完整性

5.4 文件系统(块设备)复制

共享硬件功能的一种修改版本是文件系统复制,其中所有更改对一个文件系统的镜像到驻留在另一台计算机上的文件系统。唯一的限制是该镜像过程必须能保证后备服务器有一份该文件系统的一致的拷贝, 特别是对后备服务器的写入必须按照主控机上相同的顺序进行。DRBD是用于 Linux 的一种流行的文件系统复制方案。

主要特征:

– 避免只使用一份数据库拷贝带来的同步开销

– 使用一个由多个服务器共享的单一磁盘阵列

– 如果主数据库服务器失效, 后备服务器则可以挂载并启动数据库

– 这是一种快速的故障转移,并且不存在数据丢失。

– 共享硬件功能在网络存储设备中很常见;

– 可以使用一个网络文件系统, 但是要注意的是该文件系统应具有完全的POSIX行为 。 主要问题:

– 共享磁盘阵列失效或损坏, 主节点和后备服务器都会无法工作

– 在主要服务器运行时, 后备服务器永远不能访问共享存储。

 5.5 预写式日志传送

通过读取预写日志(write-ahead log, WAL)流,热备和热备服务器可以保持当前状态记录。如果主服务器发生故障,备用服务器几乎包含主服务器的所有数据,并且可以快速制作新的主数据库服务器。这可以是同步的,也可以是异步的并且只能对整个数据库服务器执行此操作。

备用服务器可以使用基于文件的日志传送或流实现, 复制,或者两者的组合来实现一个后备服务器。

 5.6 逻辑复制

逻辑复制允许数据库服务器向另一个服务器发送数据修改流服务器。PostgreSQL逻辑复制从WAL构造一个逻辑数据修改流。逻辑复制允许在每个表的基础上复制数据更改。此外,发布自己更改的服务器也可以订阅来自另一个服务器的更改,允许数据向多个方向流动。通过逻辑解码接口,第三方扩展也可以提供类似的功能。

 5.7 基于触发器的主-备复制

基于触发器的复制设置通常将数据修改查询传送到指定的主服务器。在每个表的基础上操作,主服务器发送数据更改(通常)异步到备用服务器。备用服务器可以回答查询,而主服务器可以回答运行时,可能允许一些本地数据更改或写入活动。这种形式的复制通常是用于卸载大型分析或数据仓库查询。

Slony-I就是这种类型复制的一个例子,它具有逐表粒度,并支持多表三个备用服务器。因为它异步地(批量地)更新备用服务器,所以存在故障转移过程中可能丢失的数据。

 5.8 基于SQL的复制中间件

使用基于SQL的复制中间件,程序拦截每个SQL查询并将其发送给一个或所有服务器。每个服务器独立运行。读写查询必须发送给所有服务器,以便每个服务器接收任何更改。但是只读查询只能发送给一个服务器,允许在它们之间分配读工作负载。

如果查询只是不加修改地广播,那么像random(), CURRENT_TIMESTAMP,序列在不同的服务器上可以有不同的值。这是因为每个服务器都在运行因为SQL查询是广播的,而不是实际的数据更改。如果这是不可接受的是,中间件或应用程序必须从单个源,然后在写查询中使用这些值。还必须注意所有的交易在所有服务器上提交或中止,可能使用两阶段提交(PREPARE TRANSAC)准备好提交和提交)。Pgpool-II和continuous Tungsten就是这种类型的例子的复制。

 5.9 异步多主控机复制

对于不经常连接或通信链路较慢的服务器,如笔记本电脑或远程服务器,保持服务器之间的数据一致性是一个挑战。使用异步多主机复制,每个服务器独立工作,并定期与服务器通信其他服务器识别冲突的事务。这些冲突可以由用户或冲突来解决决议规定。Bucardo就是这种复制的一个例子。

       bucardo是PostgreSQL数据库中实现双向同步的软件 可以实现PostgreSQL数据库的双master的方案 bucardo中的同步都是异步的是通过触发器记录变化,程序是perl写的 可以实现postgresql的多主复制、主从同步; 甚至可以以postgresql为源库 可以和oracle、mysql、mongodb等很多数据库进行数据异步同步

 5.10 同步多主控机复制

在同步multimaster复制中,每个服务器都可以接受写请求和修改的数据在每个事务提交之前从原始服务器传输到每个其他服务器。繁重的写活动可能会导致过度的锁定和提交延迟,从而导致性能下降。读请求可以发送到任何服务器。一些实现使用共享磁盘来减少通信开销。同步多主机复制最适合大多数读工作负载,尽管它的最大优点是任何服务器都可以接受写请求,但不需要分区主服务器和备用服务器之间的工作负载,因为数据更改是从其中一个服务器发送的从服务器到另一个服务器,对于像random()这样的非确定性函数没有问题。

PostgreSQL不提供这种类型的复制,尽管可以在应用程序中应用代码或中间件实现这一点的两阶段提交(PARE TRANSACTION and COMMIT PREPARED)。

 5.11 高可用、负载均衡和复制特性矩阵

有一些方案不适合上述的类别:

数据分区

数据分区将表分开成数据集。每个集合只能被一个服务器修改。例如,数据可以根据办 公室划分,如伦敦和巴黎,每一个办公室有一个服务器。如果查询有必要组合伦敦和巴 黎的数据,一个应用可以查询两个服务器,或者可以使用主/备复制来在每一台服务器上 保持其他办公室数据的一个只读拷贝。

多服务器并行查询执行

上述的很多方案允许多个服务器来处理多个查询,但是没有一个允许一个单一查询使用 多个服务器来更快完成。 这种方案允许多个服务器在一个单一查询上并发工作。 这通 常通过把数据在服务器之间划分并且让每一个服务器执行该查询中属于它的部分,然后 将结果返回给一个中心服务器,由它整合结果并发回给用户。 这也可以使用PL/Proxy工 具集来实现这种方案。

 5.12 其它方案

国内较流行的开源高可用组件

– Repmgr;Patroni+Etcd;Keepalived、Pacemaker+Corosync;

商业方案

– 带有唯一故障转移、 复制和负载均衡能力的商业性的闭源方案。

数据分片(分布式)

– 数据分区将表分开成数据集。每个集合只能被一个服务器修改。

– 开源产品 GP、Citus、Tbase

多服务器并行查询执行

– 这种方案允许多个服务器在一个单一查询上并发工作。

– Pgpool-II具有这种能力,也可以使用 PL/Proxy工具集来实现这种方案。

6. 高可用方案目标总结:

    (1) 保证业务连续性:支持7*24*365业务运行;

    (2)系统高效,稳定可靠;

    (3) 负载均衡,实现容灾;

    (4)部署简单:简化维护和管理;

    (5)性价比高,实惠好用

参考文献: 1 postgresql-17-A4.pdf  2.中国PostgreSQL培训认证课程之 高可用概要

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值