案例说明:

在KingbaseES V8R6 主备流复制的集群,配置复制槽(replication slot)。复制槽提供了一种自动化的方法来确保主控机在所有的后备机收到 WAL 段 之前不会移除它们,并且主控机也不会移除可能导致 恢复冲突的行,即使后备机断开也是如此。

当集群中备库节点长时间宕机后,在主库端会保留大量的wal日志,在没有有效监控的情况下,将容易导致主库磁盘存储空间溢出,造成主机宕机。本案例通过脚本监控standby节点状态及wal日志磁盘空间的占用,当超过存储空间阈值后,启动wal日志的清理,避免磁盘空间溢出。

适用版本:

KingbaseES V8R3/R6

集群节点信息:

wal日志清理脚本:(在CentOS 7, 物理流复制测试)

[kingbase@node101 ~]$ cat wal_clean.sh
#!/bin/bash #目标:
#1、查询备库复制槽状态,如果有备库复制槽状态为‘f’,则监控磁盘使用。
#2、如果数据库磁盘空间使用超过阈值,启动wal日志的清理。
#3、查询控制文件所在的wal日志,wal日志清理到检查点所在的wal。
#4、风险提示:wal日志被清理,有可能在执行sys_rewind时缺少对应的日志。 #数据存储目录
DATA_DIR=/data/kingbase/r6ha/data
#数据库可执行文件路径
CMD_DIR=/home/kingbase/cluster/R6HA/kha/kingbase/bin
#数据库存储磁盘已使用空间(G)
DATA_DSK_USED=`/bin/df -h|grep data|awk '{print $3}'|sed 's/G//'`
#Data所在磁盘最大可用空间,磁盘空间阈值(G)
MAX_DSK_USED=21
#查询复制槽状态
Q_RESULT=`$CMD_DIR/ksql -U system test -t -c "select distinct active from sys_replication_slots where active='f'"`
#复制槽状态为‘f’时,磁盘使用超过阈值,执行wal日志清理,查看当前控制文件,将旧的wal日志文件清理到检查点所在的wal
#echo "Replication slot stat is:$Q_RESULT"
if [ -z $Q_RESULT ]; then
echo 'Standby is active!'
else
echo 'Standby is inactive!' #判断磁盘使用空间
if [ $DATA_DSK_USED -gt $MAX_DSK_USED ]; then
echo "Clean older wal file to checkpoint redo!"
#查看当前控制文件对应的wal日志文件
CHK_WAL_FILE=`$CMD_DIR/sys_controldata -D $DATA_DIR|grep -i 'redo wal'|awk -F: '{print $2}'`
#执行wal日志的清理
$CMD_DIR/sys_archivecleanup $DATA_DIR/sys_wal $CHK_WAL_FILE
else
exit
fi
fi

测试案例:

一、查看备库复制槽信息

Tips:备库正常状态时,active字段值为't'。

二、wal日志清理前主机状态信息

1、数据库磁盘使用状态

kingbase@node101 bin]$ df -h
Filesystem Size Used Avail Use% Mounted on
......
/dev/mapper/centos-root 39G 21G 18G 54% /
/dev/sdb1 61G 22G 39G 37% /data #数据库存储磁盘
/dev/sda1 497M 219M 278M 45% /boot
/dev/mapper/centos-home 19G 7.9G 11G 43% /home

2、主库节点wal日志信息

......
-rw------- 1 kingbase kingbase 16M Sep 20 16:25 0000001D000000040000005C
-rw------- 1 kingbase kingbase 16M Sep 20 16:25 0000001D000000040000005D
-rw------- 1 kingbase kingbase 16M Sep 20 16:25 0000001D000000040000005E
-rw------- 1 kingbase kingbase 16M Sep 20 16:25 0000001D000000040000005F.partial
-rw------- 1 kingbase kingbase 1.2K Sep 20 16:25 0000001D.history
-rw------- 1 kingbase kingbase 16M Sep 20 17:35 0000001E000000040000005F
-rw------- 1 kingbase kingbase 16M Sep 20 17:35 0000001E0000000400000060.partial
-rw------- 1 kingbase kingbase 1.3K Sep 20 16:25 0000001E.history
-rw------- 1 kingbase kingbase 16M Sep 20 17:55 0000001F0000000400000060
-rw------- 1 kingbase kingbase 16M Sep 20 18:00 0000001F0000000400000061
-rw------- 1 kingbase kingbase 16M Sep 21 11:23 0000001F0000000400000062
-rw------- 1 kingbase kingbase 16M Sep 21 11:23 0000001F0000000400000063
-rw------- 1 kingbase kingbase 1.3K Sep 20 17:35 0000001F.history
drwx------ 2 kingbase kingbase 76K Sep 21 11:23 archive_status

3、查看控制文件信息

[kingbase@node101 bin]$ ./sys_controldata -D /data/kingbase/r6ha/data/
sys_control version number: 1201
Catalog version number: 202112261
Database system identifier: 7080367334319169673
Database cluster state: in production
sys_control last modified: Wed 21 Sep 2022 10:35:52 AM CST
Latest checkpoint location: 4/62001398
Latest checkpoint's REDO location: 4/62001368
Latest checkpoint's REDO WAL file: 0000001F0000000400000062 .....
......
### checkpoint所对应的wal日志

三、模拟备库故障执行wal日志清理

1、备库数据库服务down

[kingbase@node102 bin]$ ./sys_ctl stop -D /data/kingbase/r6ha/data/

2、查看备库复制槽信息

=如上所示,备库数据库服务down后,复制槽状态为‘f’。=

3、执行脚本清理日志

[kingbase@node101 bin]$ sh rep.sh
Standby is inactive!
Clean older wal file to checkpoint redo!

4、查看清理后wal日志信息

......
-rw------- 1 kingbase kingbase 1.2K Sep 20 16:25 0000001D.history
-rw------- 1 kingbase kingbase 1.3K Sep 20 16:25 0000001E.history
-rw------- 1 kingbase kingbase 16M Sep 21 11:23 0000001F0000000400000062
-rw------- 1 kingbase kingbase 16M Sep 21 11:23 0000001F0000000400000063
-rw------- 1 kingbase kingbase 16M Sep 21 11:24 0000001F0000000400000064
-rw------- 1 kingbase kingbase 1.3K Sep 20 17:35 0000001F.history
drwx------ 2 kingbase kingbase 76K Sep 21 11:23 archive_status ##如上所示,在checkpoint对应wal日志之前的日志已被清理。

四、总结

1、此脚本在主备物理流复制及CentOS环境下测试,其他的操作系统需按照实际环境测试和使用。

2、将主库wal日志清理到最新checkpoint所对应的日志文件,有可能会影响到集群sys_rewind的使用。

3、可以放到crontab任务中执行脚本,自动监控standby的状态、磁盘的使用及wal日志清理。

KingbaseES V8R6集群运维案例之---自动清理集群主库wal日志的更多相关文章

  1. KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例

    案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作.若主节点已经失效,希望将异地备机提升为主节点. $bin/repmgr s ...

  2. KingbaseES V8R3集群运维案例之---用户自定义表空间管理

    ​案例说明: KingbaseES 数据库支持用户自定义表空间的创建,并建议表空间的文件存储路径配置到数据库的data目录之外.本案例复现了,当用户自定义表空间存储路径配置到data下时,出现的故障问 ...

  3. KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析

    ​ 案例说明: KingbaseES V8R3集群failover时两个cluster都会触发,但只有一个cluster会调用脚本去执行真正的切换流程,另一个有对应的打印,但不会调用脚本,只是走相关的 ...

  4. KingbaseES V8R3集群运维案例之---kingbase_monitor.sh启动”two master“案例

    案例说明: KingbaseES V8R3集群,执行kingbase_monitor.sh启动集群,出现"two master"节点的故障,启动集群失败:通过手工sys_ctl启动 ...

  5. KingbaseES V8R3集群运维案例之---cluster.log ERROR: md5 authentication failed

    案例说明: 在KingbaseES V8R3集群的cluster.log日志中,经常会出现"ERROR: md5 authentication failed:DETAIL: password ...

  6. PB 级大规模 Elasticsearch 集群运维与调优实践

    PB 级大规模 Elasticsearch 集群运维与调优实践 https://mp.weixin.qq.com/s/PDyHT9IuRij20JBgbPTjFA | 导语 腾讯云 Elasticse ...

  7. 集群运维ansible

    ssh免密登录 集群运维 生成秘钥,一路enter cd ~/.ssh/ ssh-keygen -t rsa 讲id_rsa.pub文件追加到授权的key文件中 cat ~/.ssh/id_rsa.p ...

  8. 阿里巴巴大规模神龙裸金属 Kubernetes 集群运维实践

    作者 | 姚捷(喽哥)阿里云容器平台集群管理高级技术专家 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击即可完成下载. 导读:值得阿里巴巴技术人骄傲的是 2019 ...

  9. KingbaseES V8R6集群管理运维案例之---repmgr standby switchover故障

    案例说明: 在KingbaseES V8R6集群备库执行"repmgr standby switchover"时,切换失败,并且在执行过程中,伴随着"repmr stan ...

  10. PB级大规模Elasticsearch集群运维与调优实践

    导语 | 腾讯云Elasticsearch 被广泛应用于日志实时分析.结构化数据分析.全文检索等场景中,本文将以情景植入的方式,向大家介绍与腾讯云客户合作过程中遇到的各种典型问题,以及相应的解决思路与 ...

随机推荐

  1. 如何避免FOUC

    如何避免FOUC FOUC即无样式内容闪烁也可以称为文档样式短暂失效,主要就是指HTML已加载而样式表并未加载,此后样式表再加载而产生的闪烁现象. 样式表前置 根据浏览器渲染的顺序,将CSS在< ...

  2. B - Bracket Sequence题解

    B - Bracket Sequence 思路: 用一个flag来标记括号的数目,如果括号数目是个偶数的话,就代表当前要执行'+'操作,反之就是'*'操作.对于最外层的数,是没有计算的. 所以最后要单 ...

  3. SBI信息反馈法

    https://baijiahao.baidu.com/s?id=1605128367255769158&wfr=spider&for=pc

  4. 硬件开发笔记(十一):Altium Designer软件介绍、安装过程和打开pcb工程测试

    前言   前面做高速电路,选择是阿li狗,外围电路由于读者熟悉AD,使用使用ad比较顺手,非高速电路就使用AD了,其实AD也可以做高速电路,由于笔者从13年开始做硬是从AD9开始的,所以开始切入AD做 ...

  5. 解决macOS Big Sur系统pyenv不能安装python3.6.x版本的问题及pyenv-virtualenv的安装使用

    前置 先安装好pyenv brew install pyenv 配置环境 echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n ...

  6. 第136篇:动画API:setInterval 与 requestAnimationFrame的区别

    好家伙,书接上文   function animate() { //请求-动画-框架 requestAnimationFrame( animate ); //改变正方体在场景中的位置,让正方体动起来 ...

  7. 关于Python中math 和 decimal 模块的解析与实践

    本文分享自华为云社区<Python数学模块深度解析与实战应用>,作者: 柠檬味拥抱. 在Python中,math 和 decimal 模块是处理数学运算的重要工具.math 提供了一系列常 ...

  8. Nebula Graph 源码解读系列 | Vol.06 MATCH 中变长 Pattern 的实现

    目录 问题分析 定长 Pattern 变长 Pattern 与变长 Pattern 的组合 执行计划 拓展一步 拓展多步 保存路径 变长拼接 总结 MATCH 作为 openCypher 语言的核心, ...

  9. 二十一: Mysql 锁机制

    Mysql 锁机制 事务的 隔离性 由这章讲述的 锁 来实现. 1. 概述 锁是计算机协调多个进程或线程并发访问某一资源的机制.在程序开发中会存在多线程同步的问题,当多个线程并发访问某个数据的时候,尤 ...

  10. shell脚本的基本使用

    本文是对菜鸟教程 shell编程原文 的总结并记录 如有侵权 联系删除 简介 说明: Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁.这个应用程序提供了一个界面,用户通过这 ...