案例说明:

在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. SpringCloud Bus动态刷新中心化配置

    说明 上一篇我们介绍了配置中心实战,并留下了一个配置修改后如何实现自动刷新的问题,下面就实际操作一下,首先是手动刷新单个微服务,其次是利用消息总线实现全部刷新. 手动动态刷新 动态刷新是当远程配置文件 ...

  2. Spring rce CVE-2022-22965

    原理大致是这样:spring框架在传参的时候会与对应实体类自动参数绑定,通过"."还可以访问对应实体类的引用类型变量.使用getClass方法,通过反射机制最终获取tomcat的日 ...

  3. windbg 分析 32 位进程的 64 位转储文件

    场景: x86 的项目在 x64 的 windows 机器上运行时出现未响应的情况,使用任务管理器创建该进程的转储文件 因为项目是 32 位的,所以使用 x86 的 windbg 来调试 dmp 文件 ...

  4. 【Python爬虫】手刃豆瓣近十多年电影排行数据!

    源码见我github仓库:https://github.com/xzajyjs/Python_FilmInfo_reptile 爬取豆瓣上2009-2021年共13年的年度电影排行榜数据,可全自动爬取 ...

  5. 详解SSL证书系列(2)SSL证书对网站的好处

    在如今谷歌.百度等互联网巨头强制性要求网站 HTTPS 化的情况下, 网站部署 SSL 证书已然成为互联网的发展趋势,我们也知道了 SSL证书可以防止网络安全威胁.那么除此外为网站部署 SSL 证书还 ...

  6. 【Azure 应用服务】在App Service 中如何通过Managed Identity获取访问Azure资源的Token呢? 如Key Vault

    问题描述 当App Service启用了Managed Identity后,Azure中的资源就可以使用此Identity访问. 如果需要显示的获取这个Token,如何实现呢? 问题解答 在App S ...

  7. 【Azure 云服务】如果云服务证书过期会有什么影响,证书时间应该如何查看

    问题描述 如果云服务证书过期会有什么影响,证书时间应该如何查看 问题答案 在云服务中,有两种证书:服务证书 和 管理证书 什么是服务证书? 通过浏览器访问云服务中的服务(Web Role)时候所使用的 ...

  8. Python 中read()、 readline() 、readlines()三者之间的区别?

    read()方法用于一次性读取整个文件的内容,并将其作为一个字符串返回. readline()方法用于逐行读取文件的内容.每次调用readline()方法,它会读取文件的下一行,并将其作为一个字符串返 ...

  9. C++中的不规则二维数组

    技术背景 最近刚学习C++的一些编程技巧,对于一些相对比较陌生的问题,只能采取一些简单粗暴的方案来实现.就比如说,我们可以在Python中定义一个[[0,0,0],[1,2],[1,1,1],[3]] ...

  10. 内存缓存 Gcache VS Caffeine源码详解

    转一篇.后续再尝试自己实践一下