HAC集群切换后断档问题处理
文章目录
- 环境
- 症状
- 问题原因
- 解决方案
环境
系统平台:N/A
版本:4.5.8,4.5.7
症状
hghac集群的备库,因为服务器重启或其他某些原因导致hghac服务停止。在服务恢复后,发现备库无法自动重新同步。
集群状态如下:
[root@dyoa ~]# hghactl list + Cluster: see-cluster (71457020xxxxxxxxxxxxxxxx) ----+-----------+-----------------+ | Member | Host | Role | State | TL | Lag in MB | Pending restart | +--------+-------------------+---------+---------+----+-----------+-----------------+ | hac1 | 192.168.10.1:5866 | Replica | running | | 3173 | * | | hac2 | 192.168.10.2:5866 | Leader | running | 84 | | * | +--------+-------------------+---------+---------+----+-----------+-----------------+备库上的相关日志:
2025-04-21 18:33:36.559 CST,,,16751,,68061f00.416f,1,,2025-04-21 18:33:36 CST,,0,日志,00000,"在时间点: 5AA/BB000000 (时间安排84)启动日志的流操作",,,,,,,,,"" 2025-04-21 18:33:36.559 CST,,,16751,,68061f00.416f,2,,2025-04-21 18:33:36 CST,,0,致命错误,XX000,"无法从WAL流中获得数据: 错误: 所要求的WAL段00000054000005AA000000BB已经被删除",,,,,,,,,""问题原因
备库hac服务停止后,集群会自动从主库删除该备库节点对应的复制槽。此时假如备库停止过长时间,会导致主库清理备库同步所需的WAL日志
解决方案
一 重做备库
1.1 停止备库的hac服务
systemctl stop hghac1.2 移除有问题备库的PGDATA
找到hghac.yml中的data_dir路径配置,此处为/data/highgo/data
cd /data/highgo mv data data_bak注意:假如数据目录采用软链接方式,则务必保证hghac.yml中的data_dir路径可用且为空,权限为700。
1.3 启动hac服务,重新同步
systemctl start hghac等待备节点为running或Streaming,且Lag in MB为0时,表示同步成功。
二 考虑调整wal保留参数
配置wal_keep_segments和max_wal_size,保留备库所需要的WAL文件。
流复制或集群环境下wal_keep_segments如何确定?
根据备用服务器的复制延迟,与PGDATA目录所在硬盘的容量综合设置。
例如,若需要至少能保证延迟 1 小时不清理WAL,可以参考最近服务器业务高峰时期,统计每小时生成的 WAL 段数。
假设每小时产生1000个WAL日志,可以按照如下配置:
1. 配置 wal_keep_segments=1000 2. 配置 max_wal_size =1000*16MB=16GB 3. min_wal_size: 通常保持max_wal_size*25%,或者一半即可。所有数据库节点执行命令如下:
altersystemsetwal_keep_segments=1000;altersystemsetmax_wal_size='16GB';altersystemsetmin_wal_size='4GB';selectpg_reload_conf();--reload conf 使参数生效