PostgreSQL 10.1 手册_部分 III. 服务器管理_第 26 章 高可用、负载均衡和复制_26.4. 日志传送的替代方法

本文涉及的产品
PolarDB Agent Flow,2核4GB
PolarSearch,搜索节点 4核8GB
云数据库 PolarDB MySQL 版,列存表分析加速 8核16GB
简介: 26.4. 日志传送的替代方法 26.4.1. 实现 26.4.2. 基于记录的日志传送 前一节描述的内建后备模式的一种替代方案是使用一个轮询归档位置的 restore_command。这是版本 8.4 及以下版本中唯一可用的选项。

26.4. 日志传送的替代方法

前一节描述的内建后备模式的一种替代方案是使用一个轮询归档位置的 restore_command。这是版本 8.4 及以下版本中唯一可用的选项。 在这种设置中,设置standby_mode为关闭, 因为你要自行实现后备操作所需的轮询。关于这种实现的一个参考请见 pg_standby模块。

注意在这种模式中,服务器将一次应用一整个文件的 WAL, 因此如果你使用后备服务器来查询(见热备), 那么主服务器上的一个动作和后备服务器上该动作变得可见之间会有一个延迟, 该延迟对应着填满 WAL 文件的时间。archive_timeout 可以被用来缩短该延迟。还要注意你不能把流复制和这种方法组合起来使用。

在主服务器和后备服务器上都会发生的操作是通常的连续归档和恢复任务。 两个数据库服务器之间唯一的接触点是两者共享的 WAL 文件归档: 主服务器写这个归档,后备服务器读取这个归档。 必须要小心地保证来自独立主服务器的 WAL 归档不会混合在一起或者混淆。 如果归档只被后备操作需要,它不必很大。

使得两台松耦合的服务器一起工作的诀窍是在后备服务器上使用的 restore_command,当要求下一个 WAL 文件时, 会等待它在主服务器上变得可用。restore_command在后备服务器的recovery.conf文件中指定。正常的恢复处理将从 WAL 归档请求一个文件, 如果该文件不可用则会报告失败。对于后备处理来说下一个 WAL 文件不可用很正常, 因此后备服务器必须等待它出现。对于以.backup.history 结尾的文件没有必要等待,并且必须返回一个非零的返回码。一个等待的 restore_command可以用一种自定义的脚本编写, 在其中轮询下一个 WAL 文件的存在之后进行循环。也必须有某种方式来触发故障转移, 那将打断restore_command:打破循环并返回一个文件未找到错误给后备服务器。 这会结束恢复并且后备服务器将接下来变成一个正常的服务器。

一个合适的restore_command的伪代码是:

triggered = false;
while (!NextWALFileReady() && !triggered)
{
    sleep(100000L);         /* wait for ~0.1 sec */
    if (CheckForExternalTrigger())
        triggered = true;
}
if (!triggered)
        CopyWALFileForRecovery();

pg_standby模块中提供了一个等待的restore_command 的工作例子。它也可被用作如何正确实现上述逻辑的参考。 它也可以根据需要被扩展来支持指定的配置和环境。

触发故障转移的方法是规划和设计中的一个重要部分。一种潜在的选项是 restore_command命令。它对每一个 WAL 文件执行一次, 但是运行restore_command的进程会为每一个文件创建和死亡, 因此没有守护进程或服务器进程,并且也不能使用信号或信号句柄。因此, restore_command不适合于触发故障转移。可以使用一种简单的超时功能, 特别是和主服务器上已知的archive_timeout设置一起。但是, 由于一个网络问题或者繁忙的主服务器可能足以发起故障转移,这有点容易产生错误。 如果可以安排,一种提醒机制(例如显式创建一个触发器文件)是最理想的。

26.4.1. 实现

使用这种替代方案配置一个后备服务器的简短过程如下所示。对于每一步的细节, 可以参考之前的小节。

  1. 尽可能将主系统和后背系统设置成近乎一致, 包括在同一发行级别上的两个相同的PostgreSQL拷贝。

  2. 在后备服务器上建立从主系统到一个 WAL 归档目录的连续归档。 确保在主服务器上archive_mode、 archive_command和 archive_timeout被恰当地设置 (见第 25.3.1 节)。

  3. 建立主服务器的一个基础备份(见第 25.3.2 节), 并且把该数据载入到后备服务器。

  4. 在后备服务器上开始从本地 WAL 归档的恢复,在recovery.conf 中指定一个按之前所述进行等待的restore_command (见第 25.3.4 节)。

恢复将 WAL 归档当作只读的来处理,因此一旦一个 WAL 文件已经被复制到后备系统, 在它正在被后备数据库服务器读取时可以被同时复制到磁带。因此, 可以在为了长期灾难恢复目的存储文件的同时运行一个用于高可用性的后备服务器。

为了测试的目的,可以在一个相同的系统上运行主服务器和后备服务器。 这对于服务器鲁棒性并不会提供任何有意义的改进,对 HA 也一样。

26.4.2. 基于记录的日志传送

也可以使用这种替代方法来实现基于记录的日志传送,不过这需要定制开发, 并且只有在一整个 WAL 文件被传送之后改变才会对热后备查询可见。

一个外部程序可以调用pg_walfile_name_offset()函数(见第 9.26 节) 来找出 WAL 的当前末端的文件名和其中准确的字节偏移。 它接着可以直接访问 WAL 文件并且将从上一个已知的 WAL 末尾到当前末尾之间的数据拷贝到后备服务器。 通过这种方法,数据丢失的窗口是复制程序的轮询周期时间,这可以为非常小, 并且不会有强制部分使用的段文件被归档所浪费的带宽。注意后备服务器的 restore_command脚本只能处理整个 WAL 文件, 因此增量复制的数据通常不会对后备服务器可用。只有当主服务器死掉时它才有用 — 那时最后一个部分 WAL 文件会在允许它发生之前被送给后备服务器。 这个处理的正确实现要求restore_command脚本和数据复制程序的合作。

PostgreSQL 版本 9.0 开始,你可以使用流复制 (见第 26.2.5 节)来实现事半功倍的效果。

本文转自PostgreSQL中文社区,原文链接:26.4. 日志传送的替代方法

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
存储 关系型数据库 数据库
【赵渝强老师】PostgreSQL的服务器日志文件
本文介绍了PostgreSQL数据库的物理存储结构,重点讨论了服务器日志文件。通过`pg_ctl`命令启动PostgreSQL实例时,使用`-l`参数指定日志文件位置,记录数据库启动、运行及关闭过程中的关键信息。附有相关视频讲解和日志文件示例。
466 0
|
9月前
|
运维 监控 安全
EventLog Analyzer:高效的Web服务器日志监控与审计解决方案
ManageEngine EventLog Analyzer是一款企业级Web服务器日志监控与审计工具,支持Apache、IIS、Nginx等主流服务器,实现日志集中管理、实时威胁检测、合规报表生成及可视化分析,助力企业应对安全攻击与合规挑战,提升运维效率。
437 1
|
11月前
|
人工智能 负载均衡 监控
使用 Go 和 Gin 实现高可用负载均衡代理服务器
本文基于Go语言和Gin框架,实现了一个企业级负载均衡代理服务器,支持动态路由、健康检查、会话保持等功能。具备高可用性与高性能,单节点支持100k+ QPS,延迟达亚毫秒级,并提供完整的压力测试方案与优化建议。
367 7
|
存储 监控 API
【Azure App Service】分享使用Python Code获取App Service的服务器日志记录管理配置信息
本文介绍了如何通过Python代码获取App Service中“Web服务器日志记录”的配置状态。借助`azure-mgmt-web` SDK,可通过初始化`WebSiteManagementClient`对象、调用`get_configuration`方法来查看`http_logging_enabled`的值,从而判断日志记录是否启用及存储方式(关闭、存储或文件系统)。示例代码详细展示了实现步骤,并附有执行结果与官方文档参考链接,帮助开发者快速定位和解决问题。
369 22
|
存储 负载均衡 NoSQL
搭建高可用及负载均衡的Redis
通过本文介绍的高可用及负载均衡Redis架构,可以有效提升Redis服务的可靠性和性能。主从复制、哨兵模式、Redis集群以及负载均衡技术的结合,使得Redis系统在应对高并发和数据一致性方面表现出色。这些配置和技术不仅适用于小型应用,也能够支持大规模企业级应用的需求。希望本文能够为您的Redis部署提供实用指导和参考。
956 9
|
弹性计算 监控 容灾
阿里云ECS提供强大的云上灾备解决方案,通过高可用基础设施、多样的数据备份方式及异地灾备服务,帮助企业实现业务的持续稳定运行
在数字化时代,企业对信息技术的依赖加深,确保业务连续性至关重要。阿里云ECS提供强大的云上灾备解决方案,通过高可用基础设施、多样的数据备份方式及异地灾备服务,帮助企业实现业务的持续稳定运行。无论是小型企业还是大型企业,都能从中受益,确保在面对各种风险时保持业务稳定。
361 4
|
NoSQL 容灾 MongoDB
MongoDB主备副本集方案:两台服务器使用非对称部署的方式实现高可用与容灾备份
在资源受限的情况下,为了实现MongoDB的高可用性,本文探讨了两种在两台服务器上部署MongoDB的方案。方案一是通过主备身份轮换,即一台服务器作为主节点,另一台同时部署备节点和仲裁节点;方案二是利用`priority`设置实现自动主备切换。两者相比,方案二自动化程度更高,适合追求快速故障恢复的场景,而方案一则提供了更多的手动控制选项。文章最后对比了这两种方案与标准三节点副本集的优缺点,指出三节点方案在高可用性和数据一致性方面表现更佳。
1504 5
|
存储 数据采集 分布式计算
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
Hadoop-17 Flume 介绍与环境配置 实机云服务器测试 分布式日志信息收集 海量数据 实时采集引擎 Source Channel Sink 串行复制负载均衡
355 1
|
分布式计算 资源调度 数据可视化
Hadoop-06-Hadoop集群 历史服务器配置 超详细 执行任务记录 JobHistoryServer MapReduce执行记录 日志聚合结果可视化查看
Hadoop-06-Hadoop集群 历史服务器配置 超详细 执行任务记录 JobHistoryServer MapReduce执行记录 日志聚合结果可视化查看
481 1
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
401 21

推荐镜像

更多