监控复制:PG_STAT_REPLICATION

简介: 监控复制:PG_STAT_REPLICATION

监控复制:PG_STAT_REPLICATION


PG复制(同步和异步复制)是数据库社区最普遍的功能之一。现在用户通过高可用集群或者使用复制建立只读副本来分散工作负载。这里需要注意,如果使用复制,则必须确保集群受到正确监控。本文目的解释一些基本原理,以帮助集群健壮。


pg_stat_replication:检查当前状态


pg_stat_replication是监控复制状态的方法,该视图:

    test=# \d pg_stat_replication
    View "pg_catalog.pg_stat_replication"
    Column           | Type                    | Collation | Nullable | Default
    -----------------+-------------------------+-----------+----------+---------
    pid              | integer                 |           |          |
    usesysid         | oid                     |           |          |
    usename          | name                    |           |          |
    application_name | text                    |           |          |
    client_addr      | inet                    |           |          |
    client_hostname  | text                    |           |          |
    client_port      | integer                 |           |          |
    backend_start    | timestamp with time zone|           |          |
    backend_xmin     | xid                     |           |          |
    state            | text                    |           |          |
    sent_lsn         | pg_lsn                  |           |          |
    write_lsn        | pg_lsn                  |           |          |
    flush_lsn        | pg_lsn                  |           |          |
    replay_lsn       | pg_lsn                  |           |          |
    write_lag        | interval                |           |          |
    flush_lag        | interval                |           |          |
    replay_lag       | interval                |           |          |
    sync_priority    | integer                 |           |          |
    sync_state       | text                    |           |          |
    reply_time       | timestamp with time zone|           |          |

    视图中列数不断在增加,下面先讨论下基本原理。


    pg_stat_replication:WAL发送信息


    用户通常认为pg_stat_replication在主上,这是不太准确的。这个视图是关于wal_sender进程的信息。换句话说,如果在部署级联复制,备也会显示向下一个备进行复制的信息,如下图:

     

    abd9a27473446143d41e12afe12ccd9f.png

    每个WAL sender进程,对应一个元祖。重要的是,每个服务器只会看到链中下一个服务器,不会跳过一节点看到下下个节点。也就是说,级联复制中,必须要求每个sending服务器获得下一个信息。但是还有更多问题,通常用户必须确定一个备是否是最新的,这里有相关信息:

    sent_lsn:该网络已经发送了多少WAL了

    write_lsn:写到操作系统多少WAL,还没flush

    flush_lsn:有多少WAL刷写到了磁盘

    replay_lsn:WAL回放了多少

     

    PG中提供pg_lsn这个特殊的数据类型表示这些数据,可以标记当前WAL的位置:


    test=# SELECT pg_current_wal_lsn();
    pg_current_wal_lsn
    --------------------
    3/DA06D240
    (1 row)

    可通过下面计算:

      test=# SELECT pg_current_wal_lsn() - '3/B549A845'::pg_lsn;
      ?column?
      -----------
      616376827
      (1 row)

      PG提供各种操作符做这些计算,非常方便计算备机落后了多少。


      flush_lsn vs replay_lsn


      WAL从主到备时,首先通过网络发送,然后发送到操作系统,最后刷写到磁盘。Flush_lsn表示刷到磁盘的最新WAL位置。问题是,数据刷新后就可见吗?当然不是。可能有复制冲突的现象。WAL可能已经在备上持久化了,但是有冲突,所以不能回放,也就是备机上数据还没有回放就可以被终端用户访问了。

      如果看到下面信息,就表示有复制冲突了:

      ERROR: canceling statement due to conflict with recovery

      DETAIL: User query might have needed to see row versions that must be removed.

      有时候非常必要了解复制落后了多少秒,看到两个服务器之间相差多少字节。如果需要量化这个延迟,查看_lag列。这些列数据类型是整型,可以看到延迟的秒数甚至分钟数。如果复制正常,延迟通常非常小(毫秒级),但是仍需要监控。

      注意:如果正在运行诸如vacuum类型的操作,很容易发生磁盘吞吐高于网络带宽的情况。这种情况下,slave可能会落后master。必须容忍这种情况,并确保警报不会过早启动。


      pgwatch2: Ready made tooling


      还有许多现有工具来监控复制,推荐pgwatch2,可以作为一个容器下载。Pgwatch2地址:

      https://www.cybertec-postgresql.com/en/products/pgwatch/


      原文


      https://www.cybertec-postgresql.com/en/monitoring-replication-pg_stat_replication/

      目录
      相关文章
      |
      存储 安全 关系型数据库
      PostgreSQL物化视图增量更新扩展 -- pg_ivm
      PostgreSQL不支持物化视图增量更新,需要定期执行REFRESH MATERIALIZED VIEW命令刷新物化视图。Incremental View Maintenance (IVM)是一种使物化视图保持最新的方法,其中只计算增量更改并将其应用于视图,而不是REFRESH MATERIALIZED VIEW那样从头开始重新计算内容。当只更改视图的一小部分时,IVM可以比重新计算更高效地更新物化视图。
      |
      关系型数据库 PostgreSQL 索引
      PostgreSQL 11 新特性解读:分区表支持创建主键、外键、索引
      PostgreSQL 10 版本虽然支持创建范围分区表和列表分区表,但创建过程依然比较繁琐,需要手工定义子表索引、主键,详见 PostgreSQL10:重量级新特性-支持分区表,PostgreSQL 11 版本得到增强,在父表上创建索引、主键、外键后,子表上将自动创建,本文演示这三种场景。
      7680 0
      |
      SQL 关系型数据库 Linux
      搭建 PostgreSQL 流复制主从指南(适用于 CentOS 7.x)
      搭建 PostgreSQL 流复制主从指南(适用于 CentOS 7.x)
      629 7
      |
      运维 监控 关系型数据库
      【一文搞懂PGSQL】7. PostgreSQL + repmgr + witness 高可用架构
      该文档介绍了如何构建基于PostgreSQL的高可用架构,利用repmgr进行集群管理和故障转移,并引入witness节点增强网络故障检测能力。repmgr是一款轻量级的开源工具,支持一键部署、自动故障转移及分布式节点管理。文档详细描述了环境搭建步骤,包括配置postgresql参数、安装与配置repmgr、注册集群节点以及配置witness节点等。此外,还提供了故障手动与自动切换的方法及常用命令,确保集群稳定运行。
      |
      安全 Linux 网络安全
      【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
      【工具使用】几款优秀的SSH连接客户端软件工具推荐FinalShell、Xshell、MobaXterm、OpenSSH、PUTTY、Terminus、mRemoteNG、Terminals等
      126667 0
      |
      SQL 监控 关系型数据库
      postgresql|数据库|插件学习(二)---postgresql-12的外置插件pg_profile的启用和使用
      postgresql|数据库|插件学习(二)---postgresql-12的外置插件pg_profile的启用和使用
      577 0
      |
      负载均衡 监控 关系型数据库
      PostgreSQL从小白到高手教程 - 第48讲:PG高可用实现keepalived
      PostgreSQL技术大讲堂 - 第48讲:PG高可用实现keepalived
      565 1
      |
      负载均衡 关系型数据库 PostgreSQL
      【一文搞懂PGSQL】6. PostgreSQL + pgpool-II 实现读写分离
      本文介绍了如何使用 PostgreSQL 和 pgpool-II 实现读写分离。pgpool-II 支持连接池、负载均衡等功能,适用于多种模式。文中详细描述了安装、配置及启动过程,并提供了示例命令,帮助读者快速搭建并验证读写分离环境。通过配置 `pgpool.conf` 文件指定监听地址、端口及节点信息等参数,确保系统的高效运行与故障转移。
      |
      Linux Docker 容器
      |
      负载均衡 关系型数据库 网络安全
      Pgpool-II实现高可用+读写分离+负载均衡(二)---- 配置篇
      Pgpool-II是一款工作在PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件。提供了连接池、复制、负载均衡、限制过多连接、看门狗、查询缓存等功能。本篇介绍详细配置。