案例说明:

在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. Swoole从入门到入土(17)——WebSocket服务器[成员函数与配置选项]

    这一节,我们重点了解websocket server的成员函数以及相关的配置选项. 1.成员函数 push:向 WebSocket 客户端连接推送数据,长度最大不得超过 2M. Swoole\WebS ...

  2. Vue+SpringBoot+ElementUI实战学生管理系统-7.专业管理模块

    1.章节介绍 前一篇介绍了院系管理模块,这一篇编写专业管理模块,需要的朋友可以拿去自己定制.:) 2.获取源码 源码是捐赠方式获取,详细请QQ联系我 :)! 3.实现效果 专业列表 修改专业 4.模块 ...

  3. 案例分享:Qt工程机械真空激光焊接系统软件产品定制(西门子PLC,mysql数据库,用户权限控制,界面配置,参数定制,播放器,二维图标,rgv小车,期限控制,参数调试等)

    需求   1.触摸屏控制,按照客户需求,ui由本司美工承担设计,显示分辨率1280 x 1024,同时支持鼠标操作.  2.权限控制:三种权限,分为管理员(可以定制模块界面,修改产品名称等定制化软件和 ...

  4. vi或vim中底行模式的查找并替换

    # 格式 s/要查找的内容/替换为的内容/修饰符 # 说明 要查找的内容:可使用基本正则表达式模式 替换为的内容:不能使用模式,但可以使用\1,\2...等后向引用符号,还可以使用"& ...

  5. 【Filament】绘制圆形

    1 前言 ​ Filament环境搭建中介绍了 Filament 的 Windows 和 Android 环境搭,绘制三角形中介绍了绘制纯色和彩色三角形,绘制矩形中介绍了绘制纯色和彩色矩形,本文将使用 ...

  6. Java面向对象之内部类的几类使用场景

    介绍 Java内部类是一种特殊的类,它定义在另一个类的内部.内部类提供了许多有用的特性,包括访问外部类的私有成员.隐藏实现细节以及实现回调接口等.以下是Java内部类的一些常用场景及其举例说明: 回调 ...

  7. logback中使用MDC自定义日志输出格式

    logback-MDC 相当于自定义日志格式输出 写在过滤器中 示例: try { Context context = createContext(request, response); proces ...

  8. 【Azure 应用服务】应用代码中需要使用客户端证书访问服务接口,部署在应用服务后报错不能找到证书(Cannot find the X.509 certificate)

    问题描述 在应用中,需要访问另一个服务接口,这个接口需要使用客户端证书进行认证.在代码中使用 System.Security.Cryptography.X509Certificates 加载Windo ...

  9. Java 临时笔记

    1 //srand((unsignedint)time(NULL)); C 2 //获取随机数 10-99 3 4 //int value = (int)(Math.random() * 90+10) ...

  10. Openssl命令详解 - 密钥篇

    非对称算法密钥生成和公钥提取 # ecc算法 openssl ecparam -out pri.key -name prime256v1 -genkey #生成ec密钥,国密使用-name SM2 o ...