1. pg_rewind工具深度解析
PostgreSQL数据库的高可用架构中,主从切换是常见操作。但传统的主从切换后,原主库需要重新通过pg_basebackup进行全量同步,这对于大型数据库来说耗时且低效。pg_rewind的出现完美解决了这一痛点。
这个工具自PostgreSQL 9.5版本引入,其核心价值在于能够智能识别并仅同步变更的数据块,而非全量数据。想象一下,你有一个10TB的数据库,主从切换后只有几百MB的数据差异,pg_rewind可以让你在几分钟内完成同步,而不是花费数小时进行全量备份。
1.1 工作原理剖析
pg_rewind的工作机制相当精妙。它会扫描原主库的pgdata目录,通过对比WAL日志确定自主从切换时间点以来发生变更的数据块。具体来说:
- 首先定位"分歧点" - 即主从数据库开始出现差异的WAL位置
- 从该点开始,分析所有后续WAL记录,构建变更数据块的位图
- 仅复制这些变更的数据块,其他文件(如配置文件)则完整复制
- 最后应用这些变更,使原主库与新的主库保持同步
这种机制的关键依赖是:
- wal_log_hints参数启用(在postgresql.conf中设置)
- 或数据库初始化时启用了数据校验(initdb时使用--data-checksums)
重要提示:在生产环境中,强烈建议同时启用wal_log_hints和数据校验,这不仅能支持pg_rewind,还能提高数据完整性保障。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 实战:使用pg_rewind进行主从同步
2.1 环境准备与前置条件
假设我们有以下环境:
- 原主库:192.168.9.128:5432
- 新主库(原备库):192.168.9.129:5433
在开始前,请确保:
- 数据库版本≥9.5
- 已启用wal_log_hints或数据校验
- 配置了适当的pg_hba.conf规则,允许复制连接
- 有足够的磁盘空间存放临时文件(约为数据库大小的5-10%)
2.2 详细操作步骤
步骤1:停止原主库服务
bash复制systemctl stop postgresql-pri.service
步骤2:执行pg_rewind命令
切换到postgres用户执行:
code复制
