PostgreSQL流复制【同步和异步】是PostgreSQL数据库高可用架构的基础,可以配合KEEPALIVE、REPMGR、PARTRONI+ETCD进行PG高可用架构部署用于数据库故障自动切换,但是监控备库的延迟通常具有很重要的意义,备库延迟于主库有多少等信息。PostgreSQL提供了系统视图pg_stat_replication来监控PG主备流复制信息。
一. 在此简单描述一下流复制启动顺序:
启动主备服务器 备用服务器启动walreceiver进程
Walreceiver将连接请求发送到主服务器;如果主库未启动,则walreceiver会定期发送连接请求
当主库收到从库的连接请求后,启动walsender进程,和从库的walreceiver建立连接
Walreciver发送从库集群最新的LSN
如果从库的LSN小于主库的最新LSN,则walsender将wal数据发送给从库。然后从库接收并充分WAL数据,直到追赶上主库
流复制正常工作
二. 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进程的状态
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发送到从库数据就可见吗?
ERROR: canceling statement due to conflict with recovery
DETAIL: User query might have needed to see row versions that must be removed.
四. 判断主备复制的延迟
如果主库的send_lsn和reply_lsn值相同,表示,该流复制不存在延迟 select pg_wal_lsn_diff(pg_current_wal_lsn (),replay_lsn) from pg_stat_replication;


更多精彩干货分享
点击下方名片关注
IT那活儿






