PostgreSQL 10.1 手册_部分 III. 服务器管理_第 26 章 高可用、负载均衡和复制_26.1. 不同方案的比较

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: 26.1. 不同方案的比较 共享磁盘故障转移 共享磁盘故障转移避免了只使用一份数据库拷贝带来的同步开销。 它使用一个由多个服务器共享的单一磁盘阵列。如果主数据库服务器失效, 后备服务器则可以挂载并启动数据库,就好像它从一次数据库崩溃中恢复过来了。

26.1. 不同方案的比较

共享磁盘故障转移

共享磁盘故障转移避免了只使用一份数据库拷贝带来的同步开销。 它使用一个由多个服务器共享的单一磁盘阵列。如果主数据库服务器失效, 后备服务器则可以挂载并启动数据库,就好像它从一次数据库崩溃中恢复过来了。 这是一种快速的故障转移,并且不存在数据丢失。

共享硬件功能在网络存储设备中很常见。也可以使用一个网络文件系统, 但是要注意的是该文件系统应具有完全的POSIX行为 (见第 18.2.2 节)。 这种方法的一个重大限制是如果共享磁盘阵列失效或损坏, 主要和后备服务器都会变得无法工作。另一个问题是在主要服务器运行时, 后备服务器永远不能访问共享存储。

文件系统(块设备)复制

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

预写日志传送

温备和热备服务器能够通过读取一个预写式日志(WAL) 记录的流来保持为当前状态。如果主服务器失效, 后备服务器拥有主服务器的几乎所有数据, 并且能够快速地被变成新的主数据库服务器。这可以是同步的或异步的, 并且只能用于整个数据库服务器。

可以使用基于文件的日志传送(第 26.2 节)、 流复制(见第 26.2.5 节) 或两者的组合来实现一个后备服务器。关于热备的信息可见 第 26.5 节

逻辑复制

逻辑复制允许数据库服务器将数据修改流发送到另一台服务器。 PostgreSQL逻辑复制从WAL构造一个逻辑数据修改流。 逻辑复制允许复制单个表中的数据更改。逻辑复制不需要将特定服务器指定为主服务器或副本, 但允许数据在多个方向上流动。有关逻辑复制的更多信息, 请参阅<第 31 章。通过逻辑解码接口 (第 48 章),第三方扩展还可以提供类似的功能。

基于触发器的主-备复制

一个主-备复制设置会把所有数据修改查询发送到主服务器。 主服务器异步地将数据修改发送给后备服务器。当主服务器正在运行时, 后备服务器可以回答只读查询。后备服务器对数据仓库查询是一种理想的选择。

Slony-I是这种复制类型的一个例子。它使用表粒度, 并且支持多个后备服务器。因为它会异步更新后备服务器(批量), 在故障转移时可能会有数据丢失。

基于语句的复制中间件

通过基于语句的复制中间件,一个程序拦截每一个 SQL 查询并把它发送给一个或所有服务器。 每一个服务器独立地操作。读写查询必须被发送给所有服务器, 这样每一个服务器都能接收到任何修改。但只读查询可以被只发送给一个服务器, 这样允许读负载在服务器之间分布。

如果查询被简单地且未经修改地广播,random()、 CURRENT_TIMESTAMP之类的函数以及序列在不同服务器上可能有不同的值。 这是因为每一个服务器会独立地操作,并且 SQL 查询被广播(而不是真正被修改的行)。 如果这不可接受,中间件或应用必须从一个单一服务器查询这样的值并且然后将那些值用在写查询中。 另一个选项是将这个复制选项和一种传统主-备设置一起使用, 即数据修改查询只被发送给主服务器并且通过主-备复制传播到后备服务器, 而不是通过复制中间件。必须要注意的是,所有事务要么在所有服务器上都提交, 要么在所有服务器上都中止,也许可以使用两阶段提交(PREPARE TRANSACTION 和COMMIT PREPARED)。Pgpool-II 和Continuent Tungsten是这种复制类型的例子。

异步多主控机复制

对于不会被定期连接的服务器(如笔记本或远程服务器), 保持服务器间的数据一致是一个挑战。通过使用异步的多主控机复制, 每一个服务器独立工作并且定期与其他服务器通信来确定冲突的事务。 这些冲突可以由用户或冲突解决规则来解决。Bucardo 是这种复制类型的一个例子。

同步多主控机复制

在同步多主控机复制中,每一个服务器能够接受写请求,并且在每一个事务提交之前, 被修改的数据会被从原始服务器传送给每一个其他服务器。 繁重的写活动可能导致过多的锁定,进而导致很差的性能。事实上, 写性能通常比一个单一服务器还要糟。读请求可以被发送给任意服务器。 某些实现使用共享磁盘来减少通信负荷。同步多主控机复制主要对于大多数读负载是最好的, 尽管它的大优点是任意服务器都能接受写请求 — 没有必要在主服务器和后备服务器之间划分负载, 并且因为数据修改被从一个服务器发送到另一个服务器, 不会有非确定函数(如random())的问题。

PostgreSQL不提供这种复制类型, 尽管在应用代码或中间件中可以使用PostgreSQL的两阶段提交 (PREPARE TRANSACTIONCOMMIT PREPARED) 来实现这种复制。

商业方案

因为PostgreSQL是开源的并且很容易被扩展, 一些公司已经使用PostgreSQL并且创建了带有唯一故障转移、 复制和负载均衡能力的商业性的闭源方案。

表 26.1总结了上述多种方案的能力。

表 26.1. 高可用、负载均衡和复制特性矩阵

特性 共享磁盘故障转移 文件系统复制 预写日志传送 逻辑复制 基于触发器的主-备复制 基于语句的复制中间件 异步多主控机复制 同步多主控机复制
最通用的实现 NAS DRBD 内置流复制 内置逻辑复制,pglogical Londiste, Slony pgpool-II Bucardo  
通信方法 共享磁盘 磁盘锁 WAL 逻辑解码 表行 SQL 表行 表行和行锁
不要求特殊硬件  
允许多个主控机服务器        
无主服务器负载        
不等待多个服务器   with sync off with sync off    
主控机失效将永不丢失数据 with sync on with sync on    
复制接受只读查询     with hot standby
每个表粒度        
不需要冲突解决      

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

数据分区

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

多服务器并行查询执行

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

本文转自PostgreSQL中文社区,原文链接: 26.1. 不同方案的比较
相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
7天前
|
弹性计算 负载均衡 Java
【上云基础系列 02-01】通过SLB+1台ECS+ESS弹性伸缩,搭建一个精简版的上云标准弹性架构(含方案及教程)
通常,构建一个弹性架构(即使是一个最基础的入门版),至少需要2台ECS。但是,很多小微企业刚开始上云的时候,为了节省成本不愿意购买更多的服务器。通过 “ALB+ESS弹性伸缩+1台ECS+RDS”方案,在保障低成本的同时,也不牺牲业务架构的弹性设计,更避免了很多人因为节省成本选择了单体架构后频繁改造架构的困局。 方案中的几个设计非常值得小微企业借鉴:(1)通过ALB/RDS的按量付费,节省了初期流量不大时的费用;(2)通过ESS弹性伸缩,不需要提前购买服务器资源,但是当业务增长或减少时却保持了资源弹性自动扩缩容。
|
7天前
|
存储 人工智能 并行计算
2025年阿里云弹性裸金属服务器架构解析与资源配置方案
🚀 核心特性与技术创新:提供100%物理机性能输出,支持NVIDIA A100/V100 GPU直通,无虚拟化层损耗。网络与存储优化,400万PPS吞吐量,ESSD云盘IOPS达100万,RDMA延迟<5μs。全球部署覆盖华北、华东、华南及海外节点,支持跨地域负载均衡。典型应用场景包括AI训练、科学计算等,支持分布式训练和并行计算框架。弹性裸金属服务器+OSS存储+高速网络综合部署,满足高性能计算需求。
|
1月前
|
存储 负载均衡 NoSQL
搭建高可用及负载均衡的Redis
通过本文介绍的高可用及负载均衡Redis架构,可以有效提升Redis服务的可靠性和性能。主从复制、哨兵模式、Redis集群以及负载均衡技术的结合,使得Redis系统在应对高并发和数据一致性方面表现出色。这些配置和技术不仅适用于小型应用,也能够支持大规模企业级应用的需求。希望本文能够为您的Redis部署提供实用指导和参考。
166 9
|
2月前
|
存储 弹性计算 运维
端到端的ECS可观测性方案,助力云上业务安全稳定
本文介绍了云原生时代保障业务系统可靠性的方法和挑战,重点探讨了阿里云ECS在提升业务稳定性、性能监控及自动化恢复方面的能力。文章分为以下几个部分:首先,阐述了业务可靠性的三个阶段(事前预防、事中处理、事后跟进);其次,分析了云上业务系统面临的困难与挑战,并提出了通过更实时的监测和自动化工具有效规避风险;接着,详细描述了ECS实例稳定性和性能问题的解决方案;然后,介绍了即将发布的ECS Lens产品,它将全面提升云上业务的洞察能力和异常感知能力;最后,通过具体案例展示了如何利用OS自动重启和公网带宽自适应调节等功能确保业务连续性。总结部分强调了ECS致力于增强性能和稳定性的目标。
|
2月前
|
弹性计算 负载均衡 网络协议
ECS中实现nginx4层7层负载均衡和ALB/NLB原SLB负载均衡
通过本文的介绍,希望您能深入理解并掌握如何在ECS中实现Nginx四层和七层负载均衡,以及如何使用ALB和NLB进行高效的负载均衡配置,以提高系统的性能和可靠性。
215 9
|
2月前
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的服务器日志文件
本文介绍了PostgreSQL数据库的物理存储结构,重点讨论了服务器日志文件。通过`pg_ctl`命令启动PostgreSQL实例时,使用`-l`参数指定日志文件位置,记录数据库启动、运行及关闭过程中的关键信息。附有相关视频讲解和日志文件示例。
112 0
|
2月前
|
运维 监控 负载均衡
slb后端服务器故障
slb后端服务器故障
70 13
|
3月前
|
弹性计算 负载均衡 安全
slb应用服务器对Host头有校验要求
slb应用服务器对Host头有校验要求
48 6
|
3月前
|
NoSQL 容灾 MongoDB
MongoDB主备副本集方案:两台服务器使用非对称部署的方式实现高可用与容灾备份
在资源受限的情况下,为了实现MongoDB的高可用性,本文探讨了两种在两台服务器上部署MongoDB的方案。方案一是通过主备身份轮换,即一台服务器作为主节点,另一台同时部署备节点和仲裁节点;方案二是利用`priority`设置实现自动主备切换。两者相比,方案二自动化程度更高,适合追求快速故障恢复的场景,而方案一则提供了更多的手动控制选项。文章最后对比了这两种方案与标准三节点副本集的优缺点,指出三节点方案在高可用性和数据一致性方面表现更佳。
230 5
|
3月前
|
弹性计算 监控 负载均衡