代码拉取完成,页面将自动刷新
3544
openGauss资源池化支持极致RTO按需回放
已合并
【标题】
openGauss资源池化支持极致RTO按需回放
【实现内容】:
openGauss资源池化支持极致RTO按需回放,在备机升主时,仅构建恢复所必须的HashMap,之后立即对外提供服务,降低RTO。在对外提供服务后,在后台完成实际回放。
【根因分析】:
不涉及
【实现方案】:
- 现有极致RTO接口统一封装至extreme_redo_api.h,并复制现有极致RTO代码作为按需回放极致RTO代码基线
- 实现按需回放极致RTO,代码检视入口:
https://gitee.com/opengauss/openGauss-server/commit/f9a1e3ea027aed097f148714a53d7f7c6d802761
【关联需求或issue】:
https://e.gitee.com/opengaussorg/dashboard?issue=I6UI0H
【开发自验报告】:
- 请附上自验结果(内容或者截图)
1.1 测试场景1:
采用极致RTO按需回放,模拟触发failover。
(1)使用pg_controldata查询数据库状态先变更为"in on-demand build",之后变更为"in on-demand recovery",此时能够对外提供服务。
(2)此时在升主备机运行TPCC读写,未升主备机运行TPCC只读,1H内TPCC无报错
(3)以上运行中途数据库状态自动变更为"normal",业务不中断
1.2 测试场景2:
新增测试系统函数(函数内部对输入rel的全部页面白盒调用readbuf_common函数,并打印页面checksum结果至文件中),资源池化主备环境,运行一段时间TPCC后,kill所有节点,并备份集群,之后触发重启failover。
(1)采用极致RTO按需回放,对外提供服务后调用测试函数
(2)采用极致RTO回放,回放完成后调用测试函数
(3)对比以上两种回放场景,checksum结果完全一致
测试场景2补充:
采用极致RTO按需回放,特殊情况下,仍能完成回放,并通过测试场景2验证
(1)配置回放内存大小较小时,回放日志量较大
(2)回放过程中包含DDL语句
1.3 测试场景3:
按需回放过程中,升主备机运行一段时间TPCC读写,记录下最后一条XLOG日志LSN。之后模拟该阶段又发生故障,新备机按需回放成功后,回放完成LSN不小于记录的LSN
1.4 测试场景4:
按需回放升级测试
(1)按需回放升级、回滚功能正常
(2)升级过程中,集群发生failover,功能正常 - 是否可以添加fastcheck测试用例,如是,请补充fastcheck用例
否 - 是否涉及资料修改,如是,在docs仓库补充资料
是,https://gitee.com/opengauss/docs/pulls/5364 - 是否考虑升级场景(系统表修改、日志持久化以及修改执行态数据格式)
是,修改了资源池化reform控制文件 - 是否考虑在线扩容等扩展场景
是 - 是否考虑异常场景/并发场景/前向兼容/性能场景
是 - 是否对其他模块产生影响
否,本特性代码和现有极致RTO代码独立
【其他说明】: