【无标题】为什么 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

相关文章

postgresql数据库基本操作及命令详解

《postgresql数据库基本操作及命令详解》本文介绍了PostgreSQL数据库的基础操作,包括连接、创建、查看数据库,表的增删改查、索引管理、备份恢复及退出命令,适用于数据库管理和开发实践,感兴... 目录1. 连接 PostgreSQL 数据库2. 创建数据库3. 查看当前数据库4. 查看所有数据库

PostgreSQL数据库密码被遗忘时的操作步骤

《PostgreSQL数据库密码被遗忘时的操作步骤》密码遗忘是常见的用户问题,因此提供一种安全的遗忘密码找回机制是十分必要的,:本文主要介绍PostgreSQL数据库密码被遗忘时的操作步骤的相关资... 目录前言一、背景知识二、Windows环境下的解决步骤1. 找到PostgreSQL安装目录2. 修改p

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

PostgreSQL中MVCC 机制的实现

《PostgreSQL中MVCC机制的实现》本文主要介绍了PostgreSQL中MVCC机制的实现,通过多版本数据存储、快照隔离和事务ID管理实现高并发读写,具有一定的参考价值,感兴趣的可以了解一下... 目录一 MVCC 基本原理python1.1 MVCC 核心概念1.2 与传统锁机制对比二 Postg

一文详解PostgreSQL复制参数

《一文详解PostgreSQL复制参数》PostgreSQL作为一款功能强大的开源关系型数据库,其复制功能对于构建高可用性系统至关重要,本文给大家详细介绍了PostgreSQL的复制参数,需要的朋友可... 目录一、复制参数基础概念二、核心复制参数深度解析1. max_wal_seChina编程nders:WAL

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

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 内核改进一、部署环境二、安装系统