Halo
数据库
pg_rewind
使用
一、
pg_rewind
介绍
pg_rewind
工具,能够调整并重新对齐一个已经与原始数据目录不同步的副本目录。它在故障后快速恢复复制
状态的情况下特别有用,避免了整体数据库备份和恢复所需的更多时间。
二、
pg_rewind
参数
pg_rewind
的关键参数包括:
--target-pgdata
:指定目标数据库的数据目录。
--source-server
:提供当前主数据库的连接信息,格式为连接字符串。
-P
或
--progress
:显示进度信息。
例如,命令如下:
pg_rewind --target-pgdata=/data/oldmaster --source-server='host=newmaster port=1921 user=replica
password=secret dbname=postgres' -P
三、
pg_rewind
如何工作
pg_rewind
的工作流程包括以下几个步骤:
1.
从源集群和目标集群时间线分叉点之前的最近一个检查点开始,扫描目标集群的
WAL
日志。为了生成目标
集群中所有已更改数据块的列表。时间线分叉点是指源集群和目标集群开始出现数据不一致的那个时间点。通
过扫描从这个检查点开始到当前的所有
WAL
记录,可以确定哪些数据块在目标集群中已经发生了更改。
2.
将所有这些更改的块复制到目标集群。确保了目标集群中的关系文件(数据文件)被更新到与源集群时间线
分叉点之前的最后一个完成的检查点相同的状态。此时,目标集群已经包含了源集群所有块更改到分叉点的数
据。
3.
从源集群拷贝所有其他文件,包括新的关系文件(
new relation les
)、
WAL
段(
WAL segments
)、
事务状态文件(
pg_xact
)和配置文件(
conguration les
)。这些文件对于数据库的运行和数据一致性至
关重要。通过拷贝这些文件,确保目标集群拥有源集群在故障转移时刻的完整数据和配置。
4.
创建一个
backup_label
文件,从故障转移时的检查点开始,重放
WAL
日志并更新
pg_control
文件中的
LSN
(
Log Sequence Number
)信息。这个步骤是为了标记恢复过程的开始点,并确保在接下来的恢复过程
中,所有必要的
WAL
记录都会被应用到数据库中,以此来更新数据到最新的状态。
5.
应用所有需要的
WAL
日志,使数据库恢复到一致状态。在完成前四步后,最后一步是通过重放剩余的
WAL
日志来完成数据库的恢复。这包括从故障转移时刻开始到最新的所有
WAL
记录。应用这些
WAL
记录确保了数
据库中的数据能够反映源集群在最后一刻的状态,从而实现数据的完整性和一致性。
评论