【无标题】为什么 pg_rewind 在 PostgreSQL 中很重要?

2024-08-23 06:12

本文主要是介绍【无标题】为什么 pg_rewind 在 PostgreSQL 中很重要?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • pg_rewind 的工作原理
  • 使用 pg_rewind 的要求
  • Basic Usage of `pg_rewind`
  • 重要注意事项:
  • 为什么 pg_rewind 需要干净关闭?
  • 无法进行干净关闭的情况
  • 处理不正常关机
  • 结论

pg_rewind 是 PostgreSQL 中的一个实用程序,用于将一个数据库集群与另一个数据库集群同步,通常是在故障转移或主服务器和备用服务器角色切换之后。
当旧主服务器需要在故障转移后作为备用服务器重新加入新的主服务器时,它特别有用。

pg_rewind 的工作原理

发生故障转移时,新的主服务器可能会与旧的主服务器(现在成为备用服务器的候选服务器)产生分歧。

pg_rewind 通过仅复制差异(即更改的块)而不是重新同步整个数据库,有效地使旧主服务器的数据文件与新主服务器的数据文件保持同步。

与完全重新同步相比,此过程更快,占用的带宽更少。

使用 pg_rewind 的要求

  1. WAL archive或replication slot:旧主服务器必须具有足够的 WAL 日志可用来覆盖自分歧以来的时间段。这可以使用 WAL archive或replication slot来管理。
  2. 兼容版本:旧主服务器和新主服务器上的 PostgreSQL 版本必须相同或兼容,pg_rewind 才能工作。
  3. clean关闭:在运行pg_rewind之前,应干净地关闭旧主服务器。

Basic Usage of pg_rewind

要使用“pg_rewind”,请遵循以下常规步骤:

  1. 停止旧主服务器:确保旧主服务器已clean stop。
  2. 运行“pg_rewind”:执行“pg_rewind”命令,指定旧主服务器的数据目录和新主服务器的连接详细信息。
pg_rewind -D data_directory - source-server="connection_string"
  • -D data_directory: 旧主服务器的数据目录(现在正准备作为备用服务器)。
  • — source-server=”connection_string”:到新的主服务器的连接字符串,它提供同步所需的数据。
  • example:
pg_rewind -D /var/lib/postgresql/14/main — source-server=”host=new_primary_host port=5432 user=replication_user dbname=mydb”

在这个范本中:
/var/lib/postgresql/14/main 是旧主服务器的数据目录
new_primary_host new_primary_host是新主服务器的主机名。 —5432是PostgreSQL server的端口号 —replication_user` 是具有适当复制权限的用户。

3.启动回滚后的服务器:在 pg_rewind 完成后,你可以将回滚后的服务器以备用模式启动,并进入复制模式。

重要注意事项:

数据丢失:故障转移前未同步的旧主服务器上的任何未复制数据都可能丢失。

  • 权限:确保运行“pg_rewind”的用户具有访问旧主服务器和新主服务器所需的权限。
  • 备份:在运行“pg_rewind”之前备份关键数据是一种很好的做法,因为如果管理不当,此操作可能会导致数据丢失。

为什么 pg_rewind 需要干净关闭?

为了使 pg_rewind 在 PostgreSQL 中正常运行,通常需要干净关闭旧的主服务器。以下是这很重要的原因:
干净关闭的重要性:

  1. 数据一致性:干净关闭可确保所有待处理事务都已完成,并且数据库处于一致状态。这意味着所有数据更改都已完全写入数据文件,并且 WAL(预写日志)已正确刷新。

  2. 检查点:在干净关闭期间,PostgreSQL 会执行检查点,这是一个将所有脏页(已修改的页面)从缓冲区缓存写入磁盘并记录特殊 WAL 记录以指示一致时间点的过程。

此检查点对于“pg_rewind”至关重要,因为它标记了可以跟踪更改并向前或向后滚动的状态
3. 避免数据损坏:如果服务器没有干净地关闭,可能会有未正确写入磁盘的不完整或损坏的数据。

在这种情况下,pg_rewind 可能无法准确确定旧主服务器和新主服务器之间的差异,从而导致潜在的数据损坏。

无法进行干净关闭的情况

在某些情况下,可能无法进行干净关闭,例如:

  • 突然的硬件故障
  • 系统崩溃
  • 意外断电

注意:在这些情况下,失效主节点的数据目录可能包含未提交的事务或部分写入的数据,这使得其不能立即安全使用或与 pg_rewind 进行同步。

处理不正常关机

如果旧的主服务器没有干净地关闭,可能需要采取额外的步骤:

  1. 手动检查:检查日志和数据文件以评估数据库的状态。
  2. 数据恢复:您可能需要使用其他恢复工具或技术,例如从备份中恢复或谨慎使用 pg_resetwal 工具来重置 WAL 并使数据目录再次可用。
  3. 风险增加:请注意,在非干净关闭后使用 pg_rewind 可能会带来数据丢失或不一致的风险。

结论

干净关闭可确保 pg_rewind 有一个安全且一致的起点来执行其操作,这使其成为准备将发生故障的主服务器与新的主服务器重新同步时的最佳实践。

如果没有干净关闭,则数据不一致的风险更高,并且该过程可能需要额外的手动干预以确保数据完整性。

这篇关于【无标题】为什么 pg_rewind 在 PostgreSQL 中很重要?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1098574

相关文章

Win11安装PostgreSQL数据库的两种方式详细步骤

《Win11安装PostgreSQL数据库的两种方式详细步骤》PostgreSQL是备受业界青睐的关系型数据库,尤其是在地理空间和移动领域,:本文主要介绍Win11安装PostgreSQL数据库的... 目录一、exe文件安装 (推荐)下载安装包1. 选择操作系统2. 跳转到EDB(PostgreSQL 的

SpringBoot整合jasypt实现重要数据加密

《SpringBoot整合jasypt实现重要数据加密》Jasypt是一个专注于简化Java加密操作的开源工具,:本文主要介绍详细介绍了如何使用jasypt实现重要数据加密,感兴趣的小伙伴可... 目录jasypt简介 jasypt的优点SpringBoot使用jasypt创建mapper接口配置文件加密

Ubuntu 22.04 服务器安装部署(nginx+postgresql)

《Ubuntu22.04服务器安装部署(nginx+postgresql)》Ubuntu22.04LTS是迄今为止最好的Ubuntu版本之一,很多linux的应用服务器都是选择的这个版本... 目录是什么让 Ubuntu 22.04 LTS 变得安全?更新了安全包linux 内核改进一、部署环境二、安装系统

对postgresql日期和时间的比较

《对postgresql日期和时间的比较》文章介绍了在数据库中处理日期和时间类型时的一些注意事项,包括如何将字符串转换为日期或时间类型,以及在比较时自动转换的情况,作者建议在使用数据库时,根据具体情况... 目录PostgreSQL日期和时间比较DB里保存到时分秒,需要和年月日比较db里存储date或者ti

Linux Mint Xia 22.1重磅发布: 重要更新一览

《LinuxMintXia22.1重磅发布:重要更新一览》Beta版LinuxMint“Xia”22.1发布,新版本基于Ubuntu24.04,内核版本为Linux6.8,这... linux Mint 22.1「Xia」正式发布啦!这次更新带来了诸多优化和改进,进一步巩固了 Mint 在 Linux 桌面

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

PostgreSQL如何用psql运行SQL文件

《PostgreSQL如何用psql运行SQL文件》文章介绍了两种运行预写好的SQL文件的方式:首先连接数据库后执行,或者直接通过psql命令执行,需要注意的是,文件路径在Linux系统中应使用斜杠/... 目录PostgreSQ编程L用psql运行SQL文件方式一方式二总结PostgreSQL用psql运

PostgreSQL核心功能特性与使用领域及场景分析

PostgreSQL有什么优点? 开源和免费 PostgreSQL是一个开源的数据库管理系统,可以免费使用和修改。这降低了企业的成本,并为开发者提供了一个活跃的社区和丰富的资源。 高度兼容 PostgreSQL支持多种操作系统(如Linux、Windows、macOS等)和编程语言(如C、C++、Java、Python、Ruby等),并提供了多种接口(如JDBC、ODBC、ADO.NET等

PostgreSQL中的多版本并发控制(MVCC)深入解析

引言 PostgreSQL作为一款强大的开源关系数据库管理系统,以其高性能、高可靠性和丰富的功能特性而广受欢迎。在并发控制方面,PostgreSQL采用了多版本并发控制(MVCC)机制,该机制为数据库提供了高效的数据访问和更新能力,同时保证了数据的一致性和隔离性。本文将深入解析PostgreSQL中的MVCC功能,探讨其工作原理、使用场景,并通过具体SQL示例来展示其在实际应用中的表现。 一、