今天发现一套流复制环境备库异常, 已经不能和主库同步了, 这个库是日志库, 经常出现主备数据同步延迟的告警, 这类告警经常被俺疏忽, 环境信息如下:
流复制环境
PG 版本: 9.2.8
数据库大小 : > 3 TB
业务类型: 日志库
高可用: 流复制
WAL SIZE: 16 MB
每天归档量: 30000 个左右 WAL
备库数据库日志
1 |
2014-07-16 10:14:33.515 CST,,,1202,,53c5e009.4b2,2,,2014-07-16 10:14:33 CST,,0,FATAL,XX000,"could not receive data from WAL stream: FATAL: requested WAL segment 00000006000060EB000000A2 has already been removed",,,,,,,,"libpqrcv_receive, libpqwalreceiver.c:389","" |
备注:大量上述日志, 关于这个问题, 之前写了 blog ,如下:
PostgreSQL:“ FATAL: requested WAL segment 0000000800002A0000000000 has already been removed”
之前的处理方法是重做备库, 这次不需要, 因为前段时间已开启了此库的归档。
查看主库的归档
1 |
postgres@db--> psql |
备注: 每天一个归档目录, 既然有了归档, 计划将归档目录 nfs 共享给备库做恢复
归档目录
1 |
postgres@db--> ls /pg_arch/arch/ |
配置 NFS
修改主库 /etc/exports
1 |
/pg_arch 192.168.xxx.xxx/32(rw,no_root_squash,sync) |
重启 nfs 服务
1 |
[root@db- arch]# service nfs restart |
备库 mount 归档目录
1 |
[root@db2 ~] |
备注: 我们将归档目录 mount 到 /pg_restore 目录, nfs 其它配置这里不记录了.请查看 nfs 相关文档,接下来可以进行还原操作了.
修改备库配置
修改备库 recovery.conf 文件的以下参数
1 |
restore_command = 'cp /pg_restore/arch/2014-07-[1-3][0-9]/%f %p;' |
备注: 因为要取多天归档, 所以用了正则.
修改主库配置
操作前, 调整主库参数
1 |
wal_keep_segments = 20000 |
备注: 之前设置得太小了,调整后执行 reload 操作。
重启备库
1 |
pg_ctl restart -m fast -D $PGDATA |
备注: 接下来进行备库恢复操作, 重启备库。
查看备库日志
1 |
2014-07-16 10:14:54.583 CST,,,1305,,53c5e01e.519,1,,2014-07-16 10:14:54 CST,,0,LOG,00000,"database system was shut down in recovery at 2014-07-16 10:14:42 CST",,,,,,,,"StartupXLOG, xlog.c:6273","" |
备注: 可以看到, 备库在拼命地读归档日志并 apply, 库比较大, WAL 也很多, 共有两天的 WAL 日志需要应用 , 估计没个一天半载跑不完。( 后来花了一天半才恢复!)
后续措施
- 调高 wal_keep_segments 参数
- 加大监控力度
参考
- 正则表达式
- restore_command (string)
- PostgreSQL:“ FATAL: requested WAL segment 0000000800002A0000000000 has already been removed”
原创文章,作者:6024010,如若转载,请注明出处:https://blog.ytso.com/238636.html