各位大拿,请教一下双机压力情况下倒换后,主备机异步流复制不能同步的问题:
条件:主机38,备机42,keepalived浮动地址40,用pg_bench向浮动地址施压,主备机的同步正常
测试:
1.在主机38上reboot
2.keepalived通知42做新主机,42脚本做pg_promote
3.pg_bench因浮动地址换了设备,重新手工启动进程施压
4.原主机38机器重启后,keep通知成为备机,做pg_rewind(返回值0,但提示的是时间线一致,没有rewind),再pg_ctl start后,pg_log有wal同步不正常报错
如果没有pg_bench持续加压,而是手工向主机插数据,测试后同步是没问题的
第四步start之前有生成recovery.conf
本问题来自云栖社区【PostgreSQL技术进阶社群】。https://yq.aliyun.com/articles/690084 点击链接欢迎加入社区大社群。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
面对您描述的场景,即在双机压力测试环境下,主备切换后出现的同步问题,这里有几个可能的原因和相应的解决建议:
WAL日志不连续:当主机(原38)重启并成为备机时,如果在它离线期间,原备机(42)作为新主机产生了大量的事务,可能会导致WAL日志序列不连续。pg_rewind
操作提示时间线一致且无需rewind,这通常意味着没有检测到需要重放的时间线差异,但实际的WAL记录可能未完全同步。
recovery.conf
配置正确指定了新的主服务器以及正确的恢复目标设置。如果有必要,手动从新的主服务器上复制缺失的WAL段到原主机的pg_wal
目录下。网络延迟或中断:在高压力测试下,网络通信可能存在延迟或短暂中断,影响WAL日志的实时传输。
资源竞争:在重新启动施压后,如果系统资源(如CPU、I/O)被高度占用,可能导致WAL同步进程(如walreceiver
)无法及时处理接收到的日志。
max_wal_senders
、wal_receiver_status_interval
等,以适应更高的负载需求。PostgreSQL版本特性:不同的PostgreSQL版本在处理故障转移和同步机制上可能有细微差别,某些特定版本可能存在已知问题。
日志详细分析:深入分析pg_log
中关于wal同步不正常的报错信息,这些错误信息通常能提供具体的问题线索。
最后,考虑到问题来源于云栖社区的PostgreSQL技术进阶社群,我建议直接在该社群内发起讨论,那里聚集了许多经验丰富的PostgreSQL用户和专家,他们能够提供更加针对性的帮助和实战经验分享。同时,也可以考虑联系阿里云的技术支持团队,特别是如果您正在使用阿里云的RDS for PostgreSQL服务,他们能提供专业的技术支持和排查建议。