问题描述:环境是openGauss 5.0集群,在一次意外重启数据库之后。收到了一个主库的主从延迟告警,只有从库才能出现延迟,主库怎么会出现了告警延迟

告警信息:

Status: Resolved
Hostname: hkuatxcrecondb01
IP Address: 192.168.163.21
Alert Message: Opengauss: Streaming lag with {#MASTER} is too high (over 10m in 5m)
Replication: lag in seconds: 0s
Date: 2023.11.13
Time: 11:27:27

监控脚本:

/etc/zabbix/script/opengauss/sql/gsql.replication.lag.sql

DO LANGUAGE plpgsql $$
DECLARE
ver integer;
res text;
BEGIN
SELECT current_setting('server_version_num') INTO ver; IF (ver >= 100000) THEN
SELECT * INTO res from (
SELECT
CASE WHEN pg_last_wal_receive_lsn() = pg_last_wal_replay_lsn()
THEN 0
ELSE COALESCE(EXTRACT(EPOCH FROM now() - pg_last_xact_replay_timestamp())::integer, 0)
END
) T; ELSE
SELECT * INTO res from (
SELECT
CASE WHEN pg_last_xlog_receive_location() = (pg_last_xlog_replay_location()).lsn
THEN 0
ELSE COALESCE(EXTRACT(EPOCH FROM now() - pg_last_xact_replay_timestamp())::integer, 0)
END
) T;
END IF; perform set_config('zbx_tmp.repl_lag_res', res, false);
END $$; select current_setting('zbx_tmp.repl_lag_res');

数据库主备角色状态正常,复制视图还是显示主库是主库,从库是从库。根据sql查询到最后的日志重放时间维持在重启的时候。

官方文档:https://www.postgresql.org/docs/9.1/functions-admin.html

在OpenGauss中,pg_last_xact_replay_timestamp()是一个系统函数,用于获取最后一个事务在流复制过程中被重放的时间戳。它返回一个时间戳,表示最后一个事务在备库上被应用的时间。

在主库上,pg_last_xact_replay_timestamp()函数将返回NULL,因为主库不会进行事务重放。只有在备库上进行流复制时,才会有事务被重放的情况。

当备库从主库接收到事务日志并应用到备库上时,pg_last_xact_replay_timestamp()函数将返回最后一个事务的应用时间戳。这个时间戳可以用于监控和诊断备库的复制进度,以及确定备库是否与主库保持同步。

请注意,pg_last_xact_replay_timestamp()函数只在备库上可用,如果在主库上调用该函数,将返回NULL。

官方文档中的解释:
获取恢复期间重播的最后一个事务的时间戳。这是在主数据库上生成该事务的提交或中止 WAL 记录的时间。如果恢复期间没有重放任何事务,则此函数返回 NULL。否则,如果恢复仍在进行中,这将单调增加。如果恢复已完成,则该值将保持静态,为该恢复期间应用的最后一个事务的值。当服务器正常启动而没有恢复时,该函数返回 NULL。
很有可能意外的重启将数据库认定成为了一个恢复状态。但是这种恢复状态一直会递增,我没有等到这种状态自动消失

根据sql查询监控值:

openGauss=# select COALESCE(EXTRACT(EPOCH FROM now() - pg_last_xact_replay_timestamp())::integer, 0);
coalesce
----------
20888
(1 row) openGauss=# select * from pg_last_xact_replay_timestamp();
-[ RECORD 1 ]-----------------+------------------------------
pg_last_xact_replay_timestamp | 2023-11-13 11:13:11.445842+08

解决方案:其实很简单,手动去重启,数据库的pg_last_xact_replay_timestamp时间戳将会被清理掉

gs_om -t status --detail
gs_om -t restart

gsql ((openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:36:31 commit 0 last mr  )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.

openGauss=# select COALESCE(EXTRACT(EPOCH FROM now() - pg_last_xact_replay_timestamp())::integer, 0);
 coalesce
----------
        0
(1 row)

openGauss=#
openGauss=# select pg_last_xact_replay_timestamp();
 pg_last_xact_replay_timestamp
-------------------------------

(1 row)

openGauss=#

情景再现:

利用磁盘空间满,可以制造相同情景

openGauss集群主库出现流复制延迟告警的更多相关文章

  1. 一张图解释SQL Server集群、镜像、复制、日志传送

    一张图解释SQL Server集群.镜像.复制.日志传送 本文版权归作者所有,未经作者同意不得转载.

  2. MySQL-MHA集群部署(binlog复制)

    MHA的理论知识网上有很多教程,这里不会说明:仅推荐博客链接! MHA的理论说明:http://www.ywnds.com/?p=8094 MHA的安装包需要在google上面下载,或者就是csdn上 ...

  3. MariaDB Galera集群部署--技术流ken

    Galera集群介绍 MariaDB集群是MariaDB同步多主机集群.它仅支持XtraDB/ InnoDB存储引擎. 主要功能 同步复制 真正的multi-master,即所有节点可以同时读写数据库 ...

  4. 【转载】Mysql主从复制、和MySQL集群(主主复制)

    转载:https://www.cnblogs.com/phpstudy2015-6/p/6485819.html 请同时参考和结合这篇文件进行处理:https://blog.csdn.net/envo ...

  5. 使用GTID给Galera集群做数据库异步复制

    一.为什么要做Galera集群异步复制 Galera集群解决了数据库高可用的问题,但是存在局限性,例如耗时的事务处理可能会导致集群性能急剧下降,甚至出现阻塞现象.而不幸的是,类似报表等业务需求就需要做 ...

  6. tomcat 集群配置,Session复制共享

    本配置在tomcat7上验证通过.通过此方法配置的集群,session信息将会被自动复制到各个节点. 1.配置Server.xml 在Server.xml中,找到被注释<Cluster/> ...

  7. Weblogic 12c 集群部署和session复制

    在上一篇Weblogic12c集群搭建的基础上,这一篇介绍Weblogic12c集群应用的部署和session复制. 1.启动服务 首先在weblogic12c控制台,启动受托管服务server1.s ...

  8. ClickHouse之集群搭建以及数据复制

    前面的文章简单的介绍了ClickHouse,以及也进行了简单的性能测试.本次说说集群的搭建以及数据复制,如果复制数据需要zookeeper配合. 环境: 1. 3台机器,我这里是3台虚拟机.都安装了c ...

  9. 集群、限流、缓存 BAT 大厂无非也就是这么做

    前言 前阵子有网友询问,如何优化网站?这个问题真的很大,跟他简单的聊了一下,随便说了几点,觉得有必要整理一篇文章出来,正好前阵子在做爬虫博客,于是把大体思路分享出来,与大家互通有无,共同进步. 优化 ...

  10. (转) Weblogic 12c 集群部署和session复制

    1.启动服务 首先在weblogic12c控制台,启动受托管服务server1.server2.server3. 2.将要部署的应用打包成war文件. 我用的是MyEclipse做的开发,可以用其自带 ...

随机推荐

  1. C#的基于.net framework的Dll模块编程(四) - 编程手把手系列文章

    这次继续这个系列的介绍: 一.命名空间的起名: 对于C#来说,一般命名空间的建议是:公司名(或个人名称).产品名.分类名,比如我这边是用的这个:Lzhdim.LPF.Helper,意思是个人名Lzhd ...

  2. vue-单独引入js文件,构造全局方法-取某个范围的随机数(百分比)案例

    1.项目下建文件夹commonFunction->random.js 这个js文件内复制代码: export default{     randomPercentage:function(a,b ...

  3. Linux服务器安装GaussDB 100及安装过程中常见问题解决

    ******************************** Gaussdb 100安装 ******************************** 1. 创建安装包目录 mkdir -p ...

  4. JWT 构建Rails API 授权登录

    目录 安装jwt组件 创建base_controller.rb控制器 配置路由 用户登陆-api接口 验证用户token信息-api接口(*) 参考下面的连接 使用Rails构建JSON-API ht ...

  5. Swift中的nil

    Swift中的nil和OC中的nil不一样.OC中的nil表示不存在的对象,你无法给NSInteger类型的变量赋值nil,但是Swift中的nil表示不存在,可以给任何Optional的变量或者常量 ...

  6. WEB服务与NGINX(22)- nginx的七层负载均衡功能

    目录 1. NGINX实现负载均衡功能 1.1 nginx负载均衡概述 1.2 nginx实现http的负载均衡 1.2.1 nginx基于http负载均衡场景配置 1.2.1.1 负载均衡相关参数 ...

  7. CMD文件内容统计程序简单版本

    WordCount命令行程序通过CMD接收参数,输出统计结果到指定文件. 项目码云地址:https://gitee.com/ggtc/WordCount.git 实现的功能有: 统计文件字符数 1 u ...

  8. C#WPF的多屏显示问题

    如果想让窗口在第二个屏幕中显示 public MainWindow() { InitializeComponent(); Screen[] _screens = Screen.AllScreens; ...

  9. wpf – 如何在UIElement.Margin上为绑定设置FallbackValue?

    <Border BorderBrush="#cccccc" BorderThickness="1" Margin="{Binding PushM ...

  10. UIView AutoLayout WrapContent,UIview 实现自动包裹

    一.需求 实现一个UI组件,要求组件内部的内容变化的时候,内容需要同时产生变化 二.实现 效果: 一个三个元素的组件,两边固定大小,中间的Label内容会变化 实现的约束: 首先保证三个元素同时居中, ...