问题描述:环境是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. Codeforces Round 917 (Div. 2)

    A. Least Product 存在 \(a[i] = 0\),\(min = 0\),不需要任何操作. 负数个数为偶数(包括0),\(min = 0\),把任意一个改为 \(0\). 负数个数为奇 ...

  2. 应急响应--linux入侵排查

  3. Vue的Vue-ls使用

    Vue插件,用于从Vue上下文中使用本地Storage,会话Storage和内存Storage 1. 安装 NPM npm install vue-ls --save YARN yarn add vu ...

  4. pip install 报错:Versioning for this project requires either an sdist tarball, ...

    问题:Versioning for this project requires either an sdist tarball, or access to an upstream git reposi ...

  5. PyQt5自定义信号

    一.简介 在 PyQt5 中,自定义信号是一个常见的任务,通常用于在对象之间传递信息或触发特定行为.自定义信号需要继承自 QtCore.pyqtSignal 并定义其参数类型. 二.操作步骤 1.导入 ...

  6. 【开源】2024最新python豆瓣电影数据爬虫+可视化分析项目

    项目介绍 [开源]项目基于python+pandas+flask+mysql等技术实现豆瓣电影数据获取及可视化分析展示,觉得有用的朋友可以来个一键三连,感谢!!! 项目演示 [video(video- ...

  7. linux下YUM工具的使用:yum安装/升级/查看/搜索/卸载软件包

    目录 一.关于软件包 二.关于YUM 三.yum工具的使用 3.1 yum安装软件功能 3.2 yum升级软件包功能 3.3 yum查看,搜索功能 3.4 yum卸载功能 3.5 yum安装软件包组功 ...

  8. Python读Excel数据自动化填入日常办公的网页表单

      前言 本篇内容,让你完全掌握Python是如何自动化办公的~ 一.环境准备 1.1  Python 3.7.0 1.2  Pycharm  (Python 开发工具) 1.3 Selenium  ...

  9. C#开发的应用升级更新服务器端工具 - 开源研究系列文章 - 个人小作品

    笔者开发过一些小应用,然后这些应用就需要有升级更新的功能,但是如果每个都集成进去也行,但是就是得写死更新的代码了.于是就想写一个应用升级更新的管理器,以前看到过Github上有一个AutoUpdate ...

  10. Uni-app极速入门(二) - 登录demo

    需求 背景 1.进入小程序,默认页面判断用户是否已经登录,已经登录则进入首页,没有登录则进入登录页面 2.首页为tabbar,包括首页和设置页,设置页可以退出登录,回到登录页面 页面流转 graph ...