暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【TCHouse】PostgreSQL 10.0 主备库日志同步状态异常处置

661
腾讯云数据仓库 TCHouse-P( Tencent Cloud House-P,TCHouse-P )提供简单、快速、经济高效的 PB 级云端数据仓库解决方案。云数据仓库兼容 PostgreSQL 开源数据仓库,是一种基于 MPP(大规模并行处理)架构的数仓服务。

1问题描述

从Hadoop离线数据中台把百亿条业务数据同步到TCHouse数据仓库进行大数据实时分析,整个过程大批量数据写入到数据库,产生大量的WAL日志。由于备库未能及时接收主库的WAL日志,从而导致数据节点出现“日志同步状态异常”。

2问题分析

(1)根据告警信息在管理平台找到dn007的主节点登录信息,登录到对应的数据库检查主从同步情况。从查询结果可以看到,只有一个备库在进行流复制,另一个备库已经中断了。

    psql -h xx.xx.xx.xx -p 11005 -U tbase -d postgres
    psql (PostgreSQL 10.0 @ TBase_v3.16.4.2 TBase V5.21 2024-04-12 10:33:16)
    Type "help" for help.
    postgres=#


    postgres=# select application_name,state,sync_state from pg_stat_replication;
    application_name | state | sync_state
    ---------------------+-----------+------------
    xx.xx.xx.xx:11011 | streaming | sync
    (1 row)

    (2)登录备库对应的服务器,通过关键词FATAL查看日志文件。日志文件出现could not receive data from WAL stream: ERROR:  (58P01) requested WAL segment 0000000100000CE00000005E has already been removed异常错误,说明备库请求的WAL文件已经被删除。

      2024-05-12 21:41:38.916 
      FATAL,XX000,
      "could not receive data from WAL stream:
      ERROR: (XX000) requested WAL segment 0000000100000CE00000005E
      has already been removed",,,,,,,,,""

      (3)登录主库对应的服务器,通过关键词FATAL查看日志文件。在日志中可以看到,对应时间段的WAL FILE文件已经被自动删除。

        2024-05-12 21:36:41.021 CST,,,3586998,coord(0,0),,66401417.36bbb6,coord(0,0),coord(0,0),1510,,2024-05-12 08:57:59 CST,,0,LOG,00000,
        "checkpoint complete: wrote 457660 buffers (21.8%);
        0 WAL file(s) added, 2 removed, 260 recycled; write=7.954 s, sync=0.005 s, total=8.247 s; sync files=125, longest=0.000 s, average=0.000 s;
        distance=4292407 kB, estimate=10804761 kB; pre-point=CE4/FA97FE40, cur-point=CE6/C991E0",,,,,,,,,""


        2024-05-12 21:41:38.880 CST,"tbase","",3587254,coord(0,0),"xx.xx.xx.xx:38064",66401419.36bcb6,coord(0,0),coord(0,0),13,
        "streaming CE0/5ECA0000",2024-05-12 08:58:01 CST,21/0,0,ERROR,XX000,
        "requested WAL segment 0000000100000CE00000005E has already been removed",,,,,,,,,"xx.xx.xx.xx:11011"


        (4)检查数据库WAL日志保留个数参数wal_keep_segments设置为10000,同时检查主库PG_WAL目录的WAL个数已大于10000。

          postgres=# show wal_keep_segments ;
          wal_keep_segments
          -------------------
          10000


          select setting::int8 as wal_keep_segments from pg_settings
          where name = 'wal_keep_segments';
          wal_keep_segments
          -------------------
          10000

          [root@localhost pg_wal]# ls |wc -l
          10264                                                                 

          (5)根据上述分析,可以推断大量数据写入,产生大量的WAL日志。由于主库的WAL日志被自动删除,未完全同步到备库,从而导致备库与主库同步出现异常。

          3问题解决

          (1)由于WAL日志缺失,无法修复备库,只能重建备库。

          (2)TCHouse重做备机步骤简单,只需要节点管理列表点击“重做备机”,然后等待管理平台自动完成备机重做。

          如果进行大批量的业务数据导入,建议把wal_keep_segments参数调大点

          4推荐阅读

          流复制是基于WAL物理复制,WAL (Write-Ahead Logging) 日志记录数据库的变化,格式为二进制格式,当主机出现异常断电时,如果WAL文件已经写入成功,但还没来得及刷新数据文件,当数据库再次启动时会根据WAL日志文件信息进行事务前滚,从而恢复数据库到一致性状态。

          默认状态下的流复制是以异步模式工作的,主库写WAL日志,通过wal sender进程把WAL日志发送给从库的wal receiver进程,wal receiver接收到WAL日志,并持久化到存储。

          PG主备总体框架图:

          近期热门文章:

          👉日常运维|数据仓库 TCHouse事务回滚比例过高处置
          👉【TDSQL】手动调整备份节点或冷备节点
          👉【TDSQL】TCPMSS最大数据分段大小值不合理导致JAVA程序连接数据库异常案例
          👉教你快速上手TiDB DM数据迁移工具并实现MySQL数据迁移同步
          👉TiDB 7.5 实验测试环境搭建及小插曲处理
          👉学好Oracle只需要看一本书就够了?

          全文完,希望可以帮到正在阅读的你,如果觉得有帮助,可以分享给你身边的朋友,同事,你关心谁就分享给谁,一起学习共同进步~~~

          欢迎关注公众号!

          文章转载自数据库运维之道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论