
流复制浅析 —— 物理流复制监控
发布日期:2021-05-08 12:23:09
浏览次数:20
分类:精选文章
本文共 5069 字,大约阅读时间需要 16 分钟。
作者:瀚高PG实验室(Highgo PG Lab)-天蝎座
流复制部署完成后,监控即为避不开的话题,本文介绍如何对流复制进行监控。
pg_stat_replication视图对于监控流复制至关重要。postgres=# select * from pg_stat_replication ;-[ RECORD 1 ]----+-----------------------------pid | 6569usesysid | 10usename | postgresapplication_name | walreceiverclient_addr | 192.168.80.127client_hostname |client_port | 63434backend_start | 2019-03-12 15:46:05.73722+08backend_xmin |state | streamingsent_lsn | 0/4166330 WAL发送进程最近发送的WAL日志位置write_lsn | 0/4166330 备库最近写入的WAL日志位置,此时WAL日志流还在操作系统缓存flush_lsn | 0/4166330 备库最近写入的WAL日志位置,此时日志流已经写入备库WAL日志文件replay_lsn | 0/4166330 备库最近应用的WAL日志位置write_lag | 返回确认信息的时间flush_lag | replay_lag |sync_priority | 0 基于优先级模式中备库被选中称为同步备库的优先级,对于基于quorum的选举模式无影响。sync_state | async async 表示异步流复制。sync表示为同步流复制,potential表 示备库当前为异步同步模式,如果当前的同步备库宕机,异步备库 可升级成为同步备库。quorum表示备库为quorum standbys的候 选。后面会详细介绍。application_name 连接WAL发送进程的应用别名,备库recovery文件中primary_conninfo参数的 application_name选项的值。state :startup表示WAL进程启动过程中,catchup表示备库正在追赶主库,streaming表示备库已经追赶上了主库,并且主库向备库发送WAL日志流,这个状态是流复制的常规状态,backup表示通过pg_basebackup正在进行备份,stopping表示WAL进程正在关闭。监控主备延迟:两个方面来衡量主备库之间的延迟1.通过WAL延迟时间衡量postgres=# select pid,usename,client_addr,state,write_lag,flush_lag,replay_lag from pg_stat_replication ;pid | usename | client_addr | state | write_lag | flush_lag | replay_lag------+----------+----------------+-----------+-----------------+-----------------+-----------------6569 | postgres | 192.168.80.127 | streaming | 00:00:00.001207 | 00:00:00.003164 | 00:00:00.003798(1 row)对于一个有稳定写事务的数据库,备库收到主库发送的WAL日志流后首先是写入备库操作系统缓存,之后写入备库WAL日志文件,最后应用WAL日志。理论上: replay_lag>flush_lag>write_lagreplay_lag,flush_lag,write_lag 这三个字段为PG10 版本的新增字段,在之前的版本pg_stat_replication视图不提供这三个字段,但是可以通过其他方法来监控主备延迟,在备库监控如下所示SQL:highgo=# select pg_last_xlog_receive_location(),pg_last_xlog_replay_location(),pg_last_xact_replay_timestamp(),now();pg_last_xlog_receive_location | pg_last_xlog_replay_location | pg_last_xact_replay_timestamp | now-------------+-------------+------------------------------+-----------------73F/5DBF9880 | 73F/5DBF9880| 2019-03-18 10:39:59.282002+08 | 2019-03-18 10:38:58.094224+08(1 row)pg_last_xact_replay_timestamp 函数显示备库最近WAL日志应用的时间,但是如果近期主库只有读操作,那么这个结果并不准确。2.通过WAL日志应用延迟量衡量通过流复制备库WAL的应用位置和主库本地WAL写入位置之间的WAL日志量能够准确判断主备延时,单位为字节数select pid,state,usename,client_addr,sync_state,pg_wal_lsn_diff(pg_current_wal_lsn(),write_lsn) write_delay,pg_wal_lsn_diff(pg_current_wal_lsn(),flush_lsn) flush_delay,pg_wal_lsn_diff(pg_current_wal_lsn(),replay_lsn) replay_delayfrom pg_stat_replication;pid | state | usename | client_addr | sync_state | write_delay | flush_delay | replay_delay------+-----------+----------+----------------+------------+-------------+-------------+--------------6569 | streaming | postgres | 192.168.80.127 | async | 13836288 | 14098432 | 14491696(1 row)pg_stat_wal_receiver视图:select * from pg_stat_wal_receiver;-[ RECORD 1 ]---------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------pid | 20776 WAL接受进程的进程号status | streaming WAL接收进程的状态receive_start_lsn | 0/4000000 WAL接收进程启动后使用的第一个WAL日志位置receive_start_tli | 1 received_lsn | 0/13655BE0 最近接收并写入WAL日志文件的WAL位置received_tli | 1last_msg_send_time | 2019-03-18 14:32:01.459362+08 备库接收到发送进程最后一个消息后,向主库发回确认消息的发送时间。last_msg_receipt_time | 2019-03-18 14:32:01.399589+08 备库接收到发送进程最后一个消息的接收时间latest_end_lsn | 0/13655BE0latest_end_time | 2019-03-18 14:14:59.692535+08slot_name |sender_host | 192.168.80.126sender_port | 5432conninfo | user=postgres passfile=/home/postgres/.pgpass dbname=replication host=192.168.80.126 port=5432 fallback_application_name=walreceiver sslmode=disable sslcompression=0 target_session_attrs=any相关系统函数显示恢复进程是否处于恢复模式,f为主库,t为备库postgres=# select pg_is_in_recovery();pg_is_in_recovery-------------------f(1 row)postgres=# select pg_last_wal_receive_lsn(),pg_last_wal_replay_lsn(),pg_last_xact_replay_timestamp();pg_last_wal_receive_lsn | pg_last_wal_replay_lsn | pg_last_xact_replay_timestamp-------------------------+------------------------+-------------------------------0/13655BE0 | 0/13655BE0 | 2019-03-18 14:11:15.377822+08(1 row)pg_last_wal_receive_lsn():显示备库最近接收的WAL日志位置pg_last_wal_replay_lsn(): 显示备库最近应用WAL日志的位置pg_last_xact_replay_timestamp():显示备库最近事务的应用时间pg_wal_lsn_diff(pg_last_wal_receive_lsn(),pg_last_wal_replay_lsn()):计算两个日志位置的偏移量。
发表评论
最新留言
逛到本站,mark一下
[***.202.152.39]2025年03月24日 00时37分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
时间序列神器之争:Prophet VS LSTM
2021-05-09
SpringBoot中关于Mybatis使用的三个问题
2021-05-09
MapReduce实验
2021-05-09
Leaflet 带箭头轨迹以及沿轨迹带方向的动态marker
2021-05-09
java大数据最全课程学习笔记(1)--Hadoop简介和安装及伪分布式
2021-05-09
java大数据最全课程学习笔记(2)--Hadoop完全分布式运行模式
2021-05-09
大部分程序员还不知道的 Servelt3 异步请求,原来这么简单?
2021-05-09
[apue] popen/pclose 疑点解惑
2021-05-09
[apue] getopt 可能重排参数
2021-05-09
移动互联网恶意软件命名及分类
2021-05-09
adb shell am 的用法
2021-05-09
PySide图形界面开发(一)
2021-05-09
Android如果有一个任意写入的漏洞,如何将写权限转成执行权限
2021-05-09
三角网格体积计算
2021-05-09
现代3D图形编程学习-基础简介(2) (译)
2021-05-09
Github教程(3)
2021-05-09
vue实现简单的点击切换颜色
2021-05-09
vue3 template refs dom的引用、组件的引用、获取子组件的值
2021-05-09
深入浅出mybatis
2021-05-09
Zookeeper快速开始
2021-05-09