详解金仓数据库 KingbaseES 主备流复制集群数据块恢复神器 auto_bmr

一、背景和痛点
1.1 数据块损坏背景
对于任何组织,数据都是非常宝贵的资产。因此,数据存储安全至关重要。但是当数据块的运行环境出现软硬件故障或系统 bug 时,导致数据从缓存写入数据块时存储失败。例如以下场景:在执行数据查询时,遇到"ERROR: invalid page in block 10 of relation ‘base/13593/11025587’" 或数据库备份报错“ERROR: invalid memory alloc request size 18446744073709551613”等典型的数据块损坏故障,当业务访问数据库读取此数据块时,访问将失败;如果数据块数据无法恢复时,将导致业务数据丢失,严重影响业务数据的安全。
1.2 数据库数据块恢复痛点
1.2.1 数据坏块特征
对于数据坏块,可以分为物理坏块和逻辑坏块。
物理坏块,是由于硬件 I/O 故障或操作系统故障而引起的数据块写入错误,数据库不能识别块:校验和是无效的,块包含的全是 0 或块头是损坏的。
逻辑坏块,数据块头信息被写坏,导致头信息与数据块内容不匹配。可见,导致数据库坏块的原因很多,例如主机硬件故障、存储硬件和软件故障、操作系统故障、数据库软件故障等,甚至应用软件压力过大都可能导致数据库出现坏块。
数据块的损坏的情形比较复杂,所以如何恢复,或者是能恢复到什么情形不能一概而论。最好的情况是丢失一个数据块里面的所有记录(也有可能只丢失某些记录,但是方法比较复杂),最坏也有可能整个表数据丢失。
1.2.2 数据块恢复的流程
以下是常见的数据块损坏的恢复流程:

例如在 Oracle 数据库中,对于物理损坏的数据块,可以通过 RMAN 块介质恢复(block media recovery)功能来完成受损块的恢复,而不需要恢复整个数据库或所有文件来修复这些少量受损的数据块。但前提条件是你得有一个可用的 RMAN 备份存在,因此,无论何时备份就是一切。
其他常见的数据库对数据块损坏的恢复,前提也都是要建立在有效的备份基础之上。
二、KingbaseES auto_bmr 简介
对于主备复制这种集群环境,当主库数据块出现物理坏块,怎样才能快速、高效的进行恢复呢?
对于用户来讲,希望主备复制这种架构能发挥其高可用的特性,提升数据块坏块的恢复效率。
主备流复制集群中,主数据库访问持久化用户表数据、索引时,从磁盘读取数据块至共享缓冲区,如果检测到坏块,自动从备节点获取坏块的副本,并修复坏块。
三、KingbaseES auto_bmr 特点
3.1 auto_bmr 处理流程

3.2 auto_bmr 配置参数
auto_bmr.enable_auto_bmr:是否开启自动块修复功能,取值范围 0/1,默认为 1,支持 reload。
auto_bmr.auto_bmr_req_timeout:块自动修复的超时时间,取值范围 0 至 INT_MAX,默认为 60s,0 表示不限制,支持 set。
auto_bmr.auto_bmr_sess_threshold:session 级最大块修复数量,取值范围 0 至 INT_MAX,默认为 100,0 表示不限制,支持 set。
auto_bmr.auto_bmr_sys_threshold:系统级最大块修复数量,取值范围 0 至 INT_MAX,默认为 1024,0 表示不限制,支持 reload。
约束
只支持主库自动块修复,需将 auto_bmr.enable_auto_bmr 参数设置为 1,并且需创建 auto_bmr 扩展插件。
如果 checksum 没有打开,只检测块的头部是否有效;checksum 打开时,同时检查块的头部和块数据是否有效。
如果开启 zero_damaged_pages,此参数会在块修复结束后生效。
四、KES auto_bmr 实测
4.1 查看对 auto_bmr extension 的支持
4.2 创建 auto_bmr extension
4.3 查看 auto_bmr 的配置
4.4 模拟主库数据数据块故障
4.4.1 查看表存储信息
4.4.2 模拟表数据文件块故障
4.5 auto_bmr 自动修复主库数据块故障
4.5.1 清理缓存(重启数据库服务)
4.5.2 访问表数据执行自动修复
如下图所示,在执行表数据查询时,出现故障,并且在执行自动修复时,无法识别 funcation。

创建 auto_bmr 的 extension。

主库 sys_log:
4.5.3 验证表数据
---如上所示,备库在表文件故障的情况下,通过 auto_bmr 功能读取备库数据实现了块修复。
4.5.4 测试小结
结合实际的业务场景,在主备复制这种架构下,当主库出现物理坏块时,启用 Auto_bmr 功能后,可以快速的通过备库的数据块修复主库的物理坏块,解决数据坏块恢复的复杂性问题,并提升了业务数据的安全性。
结语
数据存储的安全,是数据库最基本的功能。保证用户业务数据的安全,是数据库最基本的需求之一。当出现数据存储故障时,快速恢复数据也是对数据库管理最基本的诉求。Auto_bmr 通过主备复制的高可用架构,有效提升了集群架构中数据坏块恢复的效率,确保了用户业务数据的安全。
评论