PostgreSQL的startup进程
PostgreSQL的startup进程
在 PostgreSQL 集群中的备库(从库)上,startup 进程也是一个关键的后台进程,负责将主库(主库)发送的 WAL(Write-Ahead Logging)记录应用到数据库,确保备库与主库数据一致。备库上的 startup 进程的主要职责和行为与主库略有不同,关键在于它处理WAL日志和恢复状态。
备库上的 startup 进程的职责
 
- 复制和应用WAL日志:不断从主库或 WAL 归档位置获取和应用WAL日志,保持数据的一致性。
- 恢复数据一致性:在备库启动时检查并应用必要的WAL日志,确保数据文件的完整性与一致性。
- 读取恢复配置:从恢复配置文件读取并执行恢复命令,处理WAL日志恢复。
- 保持热备或异步备份状态:根据配置,备库可以处于热备份(Hot Standby)模式,允许查询操作但不允许写操作。
配置相关参数
在 postgresql.conf 和 recovery.conf(对于 PostgreSQL 13 及更高版本,使用 standby.signal 和 postgresql.auto.conf)文件中,有多个关键配置参数用以设置备库上的恢复行为和WAL日志应用。
复制和恢复相关参数
- restore_command:指定从归档位置恢复WAL文件的命令。
- primary_conninfo:指定连接到主库的参数,用于流复制。
- recovery_target系列参数:指定时间点恢复(PITR)的目标,可设定时间、事务ID、或命名恢复点。
示例配置:
# postgresql.conf 中的配置
hot_standby = on# recovery.conf 配置(适用于 PostgreSQL 13 之前的版本)
restore_command = 'cp /var/lib/postgresql/wal_archive/%f %p'
primary_conninfo = 'host=primary_host port=5432 user=replicator password=mysecretpassword'
对于 PostgreSQL 13 及更高版本:
# 创建 standby.signal 文件
touch /path/to/replica/data/standby.signal# 在 postgresql.auto.conf 中添加配置
echo "primary_conninfo = 'host=primary_host port=5432 user=replicator password=mysecretpassword'" >> /path/to/replica/data/postgresql.auto.conf
echo "restore_command = 'cp /var/lib/postgresql/wal_archive/%f %p'" >> /path/to/replica/data/postgresql.auto.conf
查看备库上的 startup 进程
 
通过操作系统的进程查看工具(如 ps 或 top),可以查看PostgreSQL备库上的 startup 进程。
ps aux | grep postgres
示例输出:
[pg12@test2 archivelog]$ ps aux | grep postgres
pg12      92944  0.0  0.3 274796 13692 ?        Ss   02:48   0:00 /home/pg12/soft/bin/postgres
pg12      92945  0.0  0.0 274952  2864 ?        Ss   02:48   0:00 postgres: startup   recovering 000000050000000000000034
pg12      92946  0.0  0.0 274896  3128 ?        Ss   02:48   0:00 postgres: checkpointer   
pg12      92947  0.0  0.0 274796  1904 ?        Ss   02:48   0:00 postgres: background writer  
pg12      92948  0.0  0.0 129340   968 ?        Ss   02:48   0:00 postgres: stats collector   
pg12      92951  0.0  0.1 275852  5696 ?        Ss   02:48   0:02 postgres: repmgr postgres 192.168.10.101(37248) idle
pg12      94983  0.0  0.0 279532  2380 ?        Ss   03:17   0:01 postgres: walreceiver   streaming 0/340A8268
pg12      96528  0.0  0.0 112812   968 pts/0    S+   03:39   0:00 grep --color=auto postgres
...
在上面的输出中,startup 进程正在应用从主库接收或从归档位置恢复的WAL日志。
总结
startup 进程在PostgreSQL备库上起着至关重要的作用,负责复制和应用WAL日志,确保数据的一致性与实时性。通过适当配置和监控,startup 进程可以帮助实现高效的主从复制和数据恢复。在实际运维环境中,理解和管理这些进程对于维护数据库的高可用性和数据一致性至关重要。
