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日志清理。

posted @ 2022-10-08 09:11  KINGBASE研究院  阅读(275)  评论(0编辑  收藏  举报