案例说明:

在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. colrm命令

    colrm命令 colrm命令用于编辑源代码文件,脚本文件或常规文本文件中的文本,此命令从文件中删除选定的列,列定义为一行中的单个字符.索引总是从1开始,而不是0.如果同时指定了开始和结束,则它们之间 ...

  2. Spring Boot图书管理系统项目实战-2.项目搭建

    导航: pre:  1.系统功能和架构介绍 next:3.用户登录 只挑重点的讲,具体的请看项目源码. 1.项目源码: 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.添加依赖 <depe ...

  3. Servlet实现导出下载csv文件

    工作上遇到的场景,需要将客户列表数据导出成csv文件.测试了一个最简单版本,记录一下. 订单实体类: package entity; /** * 订单信息实体 * Created by dylan-p ...

  4. 面试官:你知道Comparable 和 Comparator 的区别吗?我:巴拉巴拉

    写在开头 面试官:"我们在Java的集合和数据结构中都离不开比较器,请你聊一聊Comparable 和 Comparator 这两种的区别吧" 内心活动:"上来就这么直接 ...

  5. h5页面在微信打开,ios底部存在返回横条的问题

    我的问题比较简单,一个处理链接的页面,二次跳转进入真正的页面,导致ios出现返回横条,点击后退回到了处理链接页面.因为这个后退不会重新加载,导致一直处在处理链接的这个空页面. 所以我用replace代 ...

  6. 异步aioredis连接时报错TypeError: duplicate base class TimeoutError问题

    版本 python3.11版本,aioredis 2.0.1版本,redis 7.x版本 redis.conf配置文件 daemonize yes bind 0.0.0.0 port 6379 pro ...

  7. 我的第一个项目(十五) :完成数据保存功能(后端,改update)

    好家伙,   代码已开源(Gitee) PH-planewar: 个人开发的全栈小游戏 前端:vue2 + element-ui 后端: Springboot + mybatis-plus 数据库: ...

  8. mysql常用语句(持续更新)

    查询数据库中各表数量 select table_name,table_rows from information_schema.tables where TABLE_SCHEMA = 'miot' o ...

  9. 游戏H5引擎Canvas屏幕自适应CSS代码

    canvas.style = `touch-action: none; width:${ width }px; height:${ height }px; cursor: inherit;`;

  10. 【Azure Redis 缓存】Redis导出数据文件变小 / 在新的Redis复原后数据大小压缩近一倍问题分析

    问题描述 使用 Azure Cache for Redis 服务,在两个Redis服务之间进行数据导入和导出测试.在Redis中原本有7G的数据值,但是导出时候发现文件大小仅仅只有30MB左右,这个压 ...