PostgreSQL 9.3 Streaming Replication 状态监控
postgresql是使用Streaming Replication来实现热备份的,热备份的作用如下:
- 灾难恢复
- 高可用性
- 负载均衡,当你使用Streaming Replication来实现热备份(hot standby)的时候,可以再standby上执行查询语句,也只允许执行select
那么,当我们有大量使用了流复制的机器之后, 监控 Streaming Replication 的正常运行,在我们的部署中是非常重要的。
那么,我们会有下面的监控问题:
- 如何更好的监控流复制(Streaming Replication)
- 监控它们最好的方法是什么
- 除了使用 Master的
pg_stat_replication视图 监控,还有什么在standby上可用的方法来监控流复制 - 如何计算 replication 滞后时间,以秒、分钟为单位。
针对上面几个常见的问题,下面是一些我认为比较有用的方法。
master/primary server 上的
pg_stat_replication视图pid: walsender process的进程ID
usesysid: 执行流复制的用户的OID
usename: 执行流复制的用户的用户名
application_name: 连接到master的Application name
client_addr: standby/streaming replication的ip地址
client_hostname: Hostname of standby.
client_port: standby上的TCP port
backend_start: 从数据第一次连接master的时间
state: 当前WAL sender状态 i.e streaming
sent_location: Last transaction location sent to standby.
write_location: Last transaction written on disk at standby
flush_location: Last transaction flush on disk at standby.
replay_location: Last transaction flush on disk at standby.
sync_priority: standby服务器的优先级
sync_state: standby的同步类型( async/synchronous)(异步/同步). e.g.:
postgres=# \x
Expanded display is on.
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid | 19597
usesysid | 16384
usename | repl
application_name | walreceiver
client_addr | 210.61.161.183
client_hostname |
client_port | 50474
backend_start | 2015-02-04 11:07:27.137356+08
state | streaming
sent_location | 4/E059E560
write_location | 4/E059E560
flush_location | 4/E059E560
replay_location | 4/E059BEB0
sync_priority | 0
sync_state | async
select pg_is_in_recovery();, 这个函数在standby执行,会告诉你,是否处于recovery 模式!e.g.
# standby处于复制状态,返回 t, 否则返回 f
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
t
(1 row) # 下面不是standby的例子
postgres=# select pg_is_in_recovery();
pg_is_in_recovery
-------------------
f
(1 row)
select pg_last_xlog_replay_location();, 同样是在standby上执行,显示recovery 过程中的最近一个事务。e.g.
postgres=# select pg_last_xlog_replay_location();
pg_last_xlog_replay_location
------------------------------
0/27099838
(1 row)
select pg_last_xlog_receive_location();, standby上执行,standby最后接收到的事务日志,并且已经同步写到硬盘的.e.g.
postgres=# select pg_last_xlog_receive_location();
pg_last_xlog_receive_location
-------------------------------
0/2709CB70
(1 row)
select pg_last_xact_replay_timestamp();, standby上执行,recovery过程中最后一个事务执行的时间e.g.
postgres=# select pg_last_xact_replay_timestamp();
pg_last_xact_replay_timestamp
-------------------------------
2015-02-09 19:48:57.916245+08
(1 row)
接下来的问题,是如何正确的在master和standby上监控Streaming Replication:
standby上的监控:
select pg_is_in_recovery(); 判断是否处于recovery模式
查看recovery的延时情况:
SELECT CASE WHEN pg_last_xlog_receive_location() = pg_last_xlog_replay_location()
THEN 0
ELSE EXTRACT (EPOCH FROM now() - pg_last_xact_replay_timestamp())
END AS log_delay; # 如果receive和replay是同一个位置,延时为0;否则当前时间减去最后一个事务的时间为延时
log_delay
-----------
0
(1 row)
pg_last_xact_replay_timestamp和pg_last_xlog_replay_location判断recovery是否处于工作状态。当Streaming Replication在复制的时候,replay_timestamp和pg_last_xlog_replay_location会一直增长。postgres=# select pg_last_xact_replay_timestamp();
pg_last_xact_replay_timestamp
-------------------------------
2015-02-09 20:53:54.48081+08
(1 row) postgres=# select pg_last_xact_replay_timestamp();
pg_last_xact_replay_timestamp
-------------------------------
2015-02-09 20:53:55.456179+08 postgres=# select pg_last_xlog_replay_location();
pg_last_xlog_replay_location
------------------------------
5/723E528
(1 row) postgres=# select pg_last_xlog_replay_location();
pg_last_xlog_replay_location
------------------------------
5/72514B8
(1 row)
master上的监控:
查看pg_stat_replication 中的状态呢,使用
postgres=# select * from pg_stat_replication;
-[ RECORD 1 ]----+------------------------------
pid | 19597
usesysid | 16384
usename | repl
application_name | walreceiver
client_addr | 210.61.161.183
client_hostname |
client_port | 50474
backend_start | 2015-02-04 11:07:27.137356+08
state | streaming
sent_location | 5/64046A8
write_location | 5/64046A8
flush_location | 5/64046A8
replay_location | 5/64027B0
sync_priority | 0
sync_state | async
在master判断recovery的滞后程度,以字节为单位
postgres=# select pg_xlog_location_diff(sent_location, replay_location) from pg_stat_replication;
pg_xlog_location_diff
-----------------------
1968
(1 row) postgres=# select pg_xlog_location_diff(sent_location, replay_location) from pg_stat_replication;
pg_xlog_location_diff
-----------------------
1488
参考:
Postgresql The Statistics Collector
System Administration Functions
PostgreSQL 9.3 Streaming Replication 状态监控的更多相关文章
- postgresql Streaming Replication监控与注意事项
一监控Streaming Replication集群 1 pg_stat_replication视图(主库端执行) pid Wal sender process的进程ID usesysid 执行流复制 ...
- Streaming replication slots in PostgreSQL 9.4
Streaming replication slots are a pending feature in PostgreSQL 9.4, as part of the logical changese ...
- 配置PostgreSQL Streaming Replication集群
运行环境: Primary: 192.168.0.11 Standby: 192.168.0.21, 192.168.0.22 OS: CentOS 6.2 PostgreSQL: 9.1.2 版本以 ...
- PostgreSQL Streaming Replication的FATAL ERROR
磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面: PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@gm ...
- PostgreSQL的streaming replication
磨砺技术珠矶,践行数据之道,追求卓越价值回到上一级页面: PostgreSQL集群方案相关索引页 回到顶级页面:PostgreSQL索引页[作者 高健@博客园 luckyjackgao@gm ...
- mysql主从同步(4)-Slave延迟状态监控
mysql主从同步(4)-Slave延迟状态监控 转自:http://www.cnblogs.com/kevingrace/p/5685511.html 之前部署了mysql主从同步环境(Mysql ...
- redis状态监控与性能调优
本文主要介绍及演示一些Redis相关的状态监控和性能调优的命令及使用方法: 1.redis-benchmark redis基准信息,redis服务器性能检测 例如: 检测redis服务器性能,本机63 ...
- 6. MGR状态监控 | 深入浅出MGR
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1. 节点状态监控 2. MGR事务状态监控 3. 其他监控 4. 小结 参考资料.文档 免责声明 文章推荐: 关于 ...
- 【VC++技术杂谈003】打印技术之打印机状态监控
在上一篇博文中我主要介绍了如何获取以及设置系统的默认打印机,本文将介绍如何对打印机状态进行实时监控,记录下所打印的文档.打印的份数以及打印时间等打印信息. 1.打印机虚脱机技术 在正式介绍如何对打印机 ...
随机推荐
- String.format()【演示具体的例子来说明】
String.format()[演示样例具体解释] 整理者:Vashon 前言: String.format 作为文本处理工具.为我们提供强大而丰富的字符串格式化功能,为了不止步于简单调用 Strin ...
- 【UML】概念、关联、画画(一)
最近画UML画画,于UML观看视频后还没有学会.它是的结果UML九图是不是太懂,我想加深绘制过程的理解,我一个新的水平. 现在我觉得是时候..地介绍一下UML.了解一下它的基本内容.达到深入浅出的效果 ...
- struts开发步骤
说来惭愧.这是一个简单的struts折腾了很长一段时间,几乎相同的时间量就花了三天时间来解决.下面的步骤总结一下我开发:(我使用的是MyEclipse); 1.新建一个Exercise3的web Pr ...
- Java就业前景怎么样?学了后好找工作吗?
不知道大家对Java就业前景了解多少.随着信息化的发展.IT培训受倒了越来越多人的追捧.在开发领域,JAVA培训成为了很多人的首选!JAVA应用广泛.JAVA培训就业前景良好. 眼下.尽管JAVA人才 ...
- iPhone发展【一】从HelloWorld开始
转载请注明出处.原文网址:http://blog.csdn.net/m_changgong/article/details/8013553 作者:张燕广 从经典的HelloWorld開始踏入iPhon ...
- Linux互斥和同步应用程序(四):posix互斥信号和同步
[版权声明:尊重原创.转载请保留源:blog.csdn.net/shallnet 要么 .../gentleliu,文章仅供学习交流,请勿用于商业用途] 在前面讲共享内 ...
- FastDFS设备、构造、配置()一-安装和部署
FastDFS是一个开源的.高性能的的分布式文件系统,他基本的功能包含:文件存储.同步和訪问,设计基于高可用和负载均衡,FastDFS很适用于基于文件服务的站点.比如图片分享和视频分享站点 FastD ...
- Solr/SolrCloud -error
状态 2014-08-20 10:46:22,356 INFO [coreZkRegister-1-thread-1] [org.apache.solr.cloud.ShardLeaderElecti ...
- [Android] App在三星某些机子上闪退:"不保留活动"
今天遇到用户反映应用总是闪退. 现象:在MainActivity后,只要进入任何主进程相关的二级界面,都会导致应用闪退(注:不是崩溃引起的,只是闪退) 分析:1.看log日志,退出前有抛出异常,但查看 ...
- 5、Cocos2dx 3.0小游戏开发的例子寻找测试三个简单的介绍和总结
繁重的劳动开发商,当转载请注明出处:http://blog.csdn.net/haomengzhu/article/details/27186557 測试例子简单介绍 Cocos2d-x 为我们提供了 ...