• pg故障修复记录


    一个线上实例,用户数据大概300g 400g的样子,由于用户自己修改了最大连接数,超过了我们设置的合理范围,导致自动恢复失败,现在需要我们手动搭建起来新的主从关系。
    但是在搭建的过程中,出现了两个比较麻烦的问题。

    第一个问题:主节点不能正确恢复数据
    我们把pgbackrest.conf配置文件中的oss路径改成源pg实例的路径,通过pgbackrest restore进行按时间点恢复。这种恢复方法需要先找到距离本次恢复时间点最近的一次全量备份,然后再把之后到该时间点(包括该时间点)的所有wal日志下载到本地,然后启动pg服务就可以了。
    然而由于数据量比较大,恢复需要一定时间,在恢复的过程中,源实例做了一次自动全量备份(每天晚上自动备份),导致连续的wal日志出现了如下图所示的.backup的备份文件。
    在这里插入图片描述
    按照我的理解,这个.backup文件应该没有什么影响,但是本次全量备份做了大概有40分钟。目标实例在下载wal日志的时候中断在此了。。。
    具体原因也不知道为什么,准备在其他的非生产实例上测试一下这个.backup文件是否会影响wal日志的下载。
    这个问题相对好解决,我们通过pg_waldump定位到了需要的wal日志范围,pgbackrest archive-get命令把需要的wal日志都下载到本地,然后启动pg服务就可以了。

    第二个问题:主从不能正常搭建
    我们使用的主从搭建的工具是repmgr,这个工具大家应该都比较熟悉,一般就是用repmgr或者patroni来进行pg主从的搭建。先注册主节点,然后从节点clone,再register就可以了,按理说没什么难度。但是从节点注册之后,就比主节点多了一条timeline。
    在这里插入图片描述
    对了,刚开始的时候还注册不成功,我在从节点的data目录下手动创建了standby.signal,重启pg服务之后可以注册了。但是主从关系还是不对。
    查了很多资料,卡了2天,但是没有解决。。。
    直接说最后的解决方法吧。我把主节点的pgbackrest配置文件中的oss修改成当前实例,重建了stanza,修改了archive-command,然后又执行了一遍clone和register就成功了0.0.
    感觉是和这个archive-command有关系,之前由于恢复把这个命令改成了/bin/true,忘记改回来了。后面改成pgbackrest archive-push,就成功了。其他的修改感觉用处不大。。

  • 相关阅读:
    手工测试如何进阶自动化测试?8年美团测试工程师浅谈一下...
    Cilium系列-9-主机路由切换为基于 BPF 的模式
    ASP.NET Core框架探索之主机搭建与运行
    elementui-slider 滑动时会重置为0的问题解决
    Android 应用开发-实现将公共存储空间内的文件复制到应用的私用存储空间中
    简单讲解Android Fragment(一)
    MySQL学习记录(7)SQL优化
    C语言基础-指针
    【Java SE】抽象类和接口
    【数据结构】初始化静态分配的顺序表
  • 原文地址:https://blog.csdn.net/code_feien/article/details/127727672