KingbaseES V8R6集群运维案例之---自动清理集群主库wal日志
案例说明:
在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日志的更多相关文章
- KingbaseES V8R6集群运维案例之---repmgr standby promote应用案例
案例说明: 在容灾环境中,跨区域部署的异地备节点不会自主提升为主节点,在主节点发生故障或者人为需要切换时需要手动执行切换操作.若主节点已经失效,希望将异地备机提升为主节点. $bin/repmgr s ...
- KingbaseES V8R3集群运维案例之---用户自定义表空间管理
案例说明: KingbaseES 数据库支持用户自定义表空间的创建,并建议表空间的文件存储路径配置到数据库的data目录之外.本案例复现了,当用户自定义表空间存储路径配置到data下时,出现的故障问 ...
- KingbaseES V8R3集群运维案例之---主库系统down failover切换过程分析
案例说明: KingbaseES V8R3集群failover时两个cluster都会触发,但只有一个cluster会调用脚本去执行真正的切换流程,另一个有对应的打印,但不会调用脚本,只是走相关的 ...
- KingbaseES V8R3集群运维案例之---kingbase_monitor.sh启动”two master“案例
案例说明: KingbaseES V8R3集群,执行kingbase_monitor.sh启动集群,出现"two master"节点的故障,启动集群失败:通过手工sys_ctl启动 ...
- KingbaseES V8R3集群运维案例之---cluster.log ERROR: md5 authentication failed
案例说明: 在KingbaseES V8R3集群的cluster.log日志中,经常会出现"ERROR: md5 authentication failed:DETAIL: password ...
- PB 级大规模 Elasticsearch 集群运维与调优实践
PB 级大规模 Elasticsearch 集群运维与调优实践 https://mp.weixin.qq.com/s/PDyHT9IuRij20JBgbPTjFA | 导语 腾讯云 Elasticse ...
- 集群运维ansible
ssh免密登录 集群运维 生成秘钥,一路enter cd ~/.ssh/ ssh-keygen -t rsa 讲id_rsa.pub文件追加到授权的key文件中 cat ~/.ssh/id_rsa.p ...
- 阿里巴巴大规模神龙裸金属 Kubernetes 集群运维实践
作者 | 姚捷(喽哥)阿里云容器平台集群管理高级技术专家 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击即可完成下载. 导读:值得阿里巴巴技术人骄傲的是 2019 ...
- KingbaseES V8R6集群管理运维案例之---repmgr standby switchover故障
案例说明: 在KingbaseES V8R6集群备库执行"repmgr standby switchover"时,切换失败,并且在执行过程中,伴随着"repmr stan ...
- PB级大规模Elasticsearch集群运维与调优实践
导语 | 腾讯云Elasticsearch 被广泛应用于日志实时分析.结构化数据分析.全文检索等场景中,本文将以情景植入的方式,向大家介绍与腾讯云客户合作过程中遇到的各种典型问题,以及相应的解决思路与 ...
随机推荐
- java去除字符串空格
package test; /** * 去除字符串空格 * * @author xusucheng * @create 2018-07-04 **/ public class RemoveWhites ...
- python基础语法知识
1.多组输入没有结束标志的两种表示形式 #method1: try: while True: #代码 except EOFError: pass #method2: while True: try: ...
- centos7 搭建snmpv3靶场
安装文件 yum install net-snmp net-snmp-utils -y 关闭服务创建用户 systemctl stop snmpd # 添加一个用户 如 root net-snmp-c ...
- goroutine并发
每一个并非的执行单元叫作一个goroutine.设想这里的一个程序有两个函数,一个函数做计算,另一个输出结果,假设两个函数没有相互之间的调用关系.一个线性的程序会先调用其中的一个函数,然后再调用另一个 ...
- CentOS 设置系统时间与网络时间同步
CentOS 设置系统时间与网络时间同步 一.Linux的时间分为(两种) System Clock(系统时间) 指当前Linux Kernel中的时间 Real Time Clock (硬件时间,简 ...
- Redis高级数据类型
## 1.Redis相关配置信息 服务器端设定 设置服务器以守护进程的方式运行 daemonize yes|no 绑定主机地址 (只能此ip访问) bind 127.0.0.1 设置服务器端口号 po ...
- jsPlumb导航器
开源项目地址:https://gitee.com/easyxaf/jsplumb-navigator 前言 jsPlumb可用于连接DOM元素,它不依赖框架,所以与主流框架都可以无缝的集成.但比较遗憾 ...
- Abp.Zero 手机号免密登录验证与号码绑定功能的实现(二):改造Abp默认实现
接下来我们重写原Abp的部分实现,来驳接手机号相关业务. 改造User类 重写PhoneNumber使得电话号码为必填项,和中国大陆手机号11位长度 public new const int MaxP ...
- Springboot-1.5.10.RELEASE 升级到 2.2.4.RELEASE版本遇到的一些问题总结
由于现在springboot的主流版本都已经是2.x的了,因此自己也打算将项目中使用的springboot1.5.10升级到2.2.4这个版本. 自己也能够预料得到,在升级过程中肯定会遇到各种各样的问 ...
- 开源:基于mybatis和jpa的数据库安全加密脱敏插件,围观交流
开源:基于mybatis和jpa的数据库安全加密脱敏插件,围观交流