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

PostgreSQL流复制监控

IT那活儿 2021-06-02
1897

PostgreSQL流复制【同步和异步】是PostgreSQL数据库高可用架构的基础,可以配合KEEPALIVE、REPMGR、PARTRONI+ETCD进行PG高可用架构部署用于数据库故障自动切换,但是监控备库的延迟通常具有很重要的意义,备库延迟于主库有多少等信息。PostgreSQL提供了系统视图pg_stat_replication来监控PG主备流复制信息。

一. 在此简单描述一下流复制启动顺序:

  1. 启动主备服务器
  2. 备用服务器启动walreceiver进程

  3. Walreceiver将连接请求发送到主服务器;如果主库未启动,则walreceiver会定期发送连接请求

  4. 当主库收到从库的连接请求后,启动walsender进程,和从库的walreceiver建立连接

  5. Walreciver发送从库集群最新的LSN

  6. 如果从库的LSN小于主库的最新LSN,则walsender将wal数据发送给从库。然后从库接收并充分WAL数据,直到追赶上主库

  7. 流复制正常工作

二. pg_stat_replication视图字段含义解释:

该视图在主库存在相关的监控信息,但不是绝对的,在PG的级联复制中,A->B->C架构中,B中pg_stat_replication也同样存在相关流复制的监控信息。

Pid:该字段存储的主库上的walsender的进程号

Usesysid:存储流复制用户的oid

Usename:存储流复制的用户名

Application_name:存储walreceiver

Client_addr:存储从库的地址

Client_port:流复制使用的端口

Backend_start:流复制开始时间

Backend_xmin::通过hot_standby_feedback 报告此备用数据的范围,即STANDBY向Master报告这些版本的旧数据从库还需要,Master将延迟清理这些旧版本数据.

State:walsender进程的状态

Startup 代表walsender进程正在启动
Catchup 代表从库正在追赶主库
Streaming 从库追赶上主库后,正在进行流式更改
Backup  walsender正在发送备份
Stopping walsender进程正在停止

Send_lsn:通过网络发送的WAL位置

Write_lsn:写入到操作系统缓存的WAL日志

Flush_lsn:写入磁盘的WAL位置

Replay_lsn:从库回放WAL的位置

Sync_priority:表示同步模式下STANDBY的优先级;0是特殊值,表示处于异步模式下

Sync_state:同步状态;async表示异步;sync表示同步复制,potential表示此standby此时是潜在的同步的,当同步的standby之一出现问题,则可能会变成同步。Async永远不会变为sync和potential状态

三. WAL发送到从库数据就可见吗?

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.

四. 判断主备复制的延迟

  1. 如果主库的send_lsn和reply_lsn值相同,表示,该流复制不存在延迟
  2. select pg_wal_lsn_diff(pg_current_wal_lsn (),replay_lsn) from pg_stat_replication;

END

更多精彩干货分享

点击下方名片关注

IT那活儿

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

评论