KingbaseES读写分离集群架构解析

一套为企业关键业务而生的数据库架构

在当今数字化转型的浪潮中,KingbaseES推出了基于WAL流复制技术的读写分离集群方案。据了解,这套架构通过JDBC驱动程序实现了智能化的读写分离------写操作交给主库处理,读操作则分散到备库执行,让数据库系统的响应速度和吞吐量都得到了显著提升。

两个"管家"守护着整个集群

KingbaseES的技术负责人介绍说,集群的稳定运行主要依靠两个核心进程来保障。

首先是repmgrd进程,它就像集群的"大管家"。在主节点上,它随时关注着本地数据库的健康状况;在备节点上,它不仅要看好自己家,还要时刻留意主库那边的动静。通过定期检查和sys_stat_replication视图,它能实时掌握数据同步的进展。一旦发现异常,立即启动应急预案。

其次是kbha进程,这是环境监控的"守护神"。它的主要职责是保护repmgrd进程正常运行,同时监控磁盘、网络等基础设施的状态。有意思的是,系统还通过crond服务来保护kbha自己,形成了"守护者的守护者"这样一个巧妙的设计。

数据是如何在主备库之间"传递"的

数据同步的过程其实并不复杂,主要分为三个步骤:

第一步,当主库接收到数据更新请求后,walwriter进程会把变更记录(也就是WAL日志)写入磁盘保存起来。

第二步,walsender进程读取这些WAL日志,通过网络流式传输给备库。这个过程就像快递员把包裹送到目的地一样。

第三步,备库的walreceiver进程接收到WAL日志后,先存储在本地,然后由startup进程重新执行这些操作,完成数据的同步更新。

企业可以根据需要选择不同的同步模式

技术人员表示,通过调整repmgr.conf配置文件中的synchronous参数,企业可以灵活选择适合自己业务特点的同步模式:

  • async模式:所有备库都采用异步复制,速度最快但存在数据丢失风险
  • sync模式:第一个连接的备库同步复制,其他作为候选,兼顾性能和安全
  • quorum模式:任意一个备库完成同步即可,在容错性和性能间找到平衡
  • all模式:所有备库必须同步完成,数据一致性最强但容错性较低
  • custom模式:允许用户自定义同步策略,灵活性最高

据介绍,生产环境通常推荐使用remote_apply级别的同步,这样能确保主备库之间的强一致性。当然,不同的业务场景需要在数据安全性和系统性能之间做出权衡。

当故障来临时,系统如何自救

一套完整的自动恢复体系

双层保护确保管理进程不掉线

为了确保高可用功能始终在线,系统采用了双层守护进程保护架构。kbha进程每3秒检查一次repmgrd的运行状态,发现异常立即重启;而系统的crontab则每分钟检查kbha进程,确保守护进程本身也不会失效。

主库故障后的四步切换流程

当主库发生故障时,备库的repmgrd进程会启动一套精心设计的四阶段切换流程:

第一阶段,先尝试重新连接主库。这是为了避免因为网络抖动造成的误判,毕竟"冤枉"一个正常运行的主库代价太大。

第二阶段,如果确认主库真的出问题了,系统会关闭所有备库的数据接收进程,让大家都"冷静"下来,确保状态一致。

第三阶段,多个备库开始"竞选"新主库。竞选的规则很明确:先看谁的数据最新(通过LSN比较),再看优先级设置,最后看节点ID。为了防止出现"脑裂"(两个主库同时存在),系统还会执行半数节点存活检查。

第四阶段,竞选成功的备库开始升级为主库。这个过程包括检查网络连通性、强制停止原主库(如果还在运行)、挂载VIP地址、执行promote命令升主,最后执行checkpoint确保数据持久化。

切换时间到底需要多久

根据实际测试,故障切换的总时间由5个部分组成:监控检测延迟、故障确认时间、进程处理时间、网络检查时间和VIP切换时间。在最理想的情况下,切换可能只需要几秒钟;而在最坏的情况下,可能需要几分钟。影响切换时间的主要因素包括监控间隔设置、重连参数配置以及网络和VIP的切换速度。

故障节点如何重新加入集群

当一个故障的备库恢复后,主库的repmgrd进程会自动发现并启动恢复流程。整个过程分为7个步骤,从远程调用恢复命令开始,经过状态检查、数据同步(使用sys_rewind工具)、配置复制槽,最后重新启动并注册为备库。如果恢复失败,系统最多会重试3次。

智能的同异步转换机制

集群还具备一个很聪明的功能:根据实际情况自动在同步和异步模式间切换。当发现没有可用的流复制时,系统会自动转为异步模式,避免主库被阻塞;当流复制恢复且主备数据差异小于设定阈值(默认16M)时,又会自动切回同步模式,保证数据一致性。这个过程由主库的repmgrd进程每2秒检查一次,实现了高可用性和数据一致性的智能平衡。

全部宕机后的自启动能力

即使遇到极端情况------集群所有节点都发生故障,只要网络正常且kbha守护进程还在运行,系统也能自动恢复。原主库节点会在确认自己是唯一的主库后,自动启动数据库并触发故障恢复流程,逐步重建整个集群。这个功能通过auto_cluster_recovery_level参数控制,默认是开启状态。

几项提升用户体验的高级功能

VIP让故障切换对应用透明

VIP(虚拟IP)功能让应用程序不需要关心实际连接的是哪个数据库节点。当发生故障切换时,VIP会自动"漂移"到新的主库上,应用程序完全感知不到底层的变化。VIP的变化会在主库注册、故障切换、主备切换等多个时机自动触发,确保业务连续性。

在线修复损坏的数据块

这是一项很有特色的功能。当主数据库在访问数据时检测到坏块,系统会自动从备节点获取正常的数据副本进行修复,整个过程对业务完全透明。系统提供了会话级和系统级的修复数量限制,防止大量坏块影响系统性能。使用这个功能需要先创建auto_bmr扩展,并确保开启了数据校验功能。

网络和存储的健康监测

系统还具备完善的基础设施监测能力。通过配置信任网关,kbha进程会持续ping测网关的连通性,一旦发现网络故障,会接管部分管理功能但禁用自动故障转移,防止出现脑裂问题。

对于存储健康,kbha每60秒会对配置的存储路径进行读写测试------创建临时文件、写入8KB数据、读取验证后删除。如果检测到存储异常,会根据配置决定是否关闭数据库,确保数据安全。

写在最后

通过这套完整的高可用架构设计,KingbaseES读写分离集群实现了从数据同步、故障检测、自动切换到故障恢复的全链路自动化管理。无论是双层守护进程的巧妙设计,还是灵活的同步策略选择,亦或是快速的故障切换机制和数据块级别的修复能力,都体现了国产数据库在高可用技术上的成熟度。

对于那些对可靠性、性能和数据一致性有严格要求的关键业务系统来说,这样一套经过精心设计和充分验证的数据库集群方案,无疑提供了一个值得信赖的选择。

相关推荐
步行cgn1 天前
Java项目包结构设计与功能划分详解
java·开发语言·架构·mvc
市民中心的蟋蟀1 天前
第三章 钩入React 【上】
前端·react.js·架构
奥尔特星云大使1 天前
MySQL 备份基础(一)
数据库·sql·mysql·备份·mysql备份
努力学习的小廉1 天前
初识MYSQL —— 库和表的操作
数据库·mysql·oracle
浔川python社1 天前
网络爬虫技术规范与应用指南系列(xc—1)
数据库·爬虫
代码不停1 天前
计算机工作原理(简单介绍)
数据库·redis·缓存
偷心伊普西隆1 天前
Python Access:删除数据库中指定的表和查询
数据库·python
ACEEE12221 天前
解读DeepSeek-V3.2-Exp:基于MLA架构的Lightning Index如何重塑长上下文效率
人工智能·深度学习·算法·架构·deep
小蒜学长1 天前
springboot基于BS的小区家政服务预约平台(代码+数据库+LW)
java·数据库·spring boot·后端
失散131 天前
分布式专题——26 BIO、NIO编程与直接内存、零拷贝深入辨析
java·分布式·rpc·架构·nio·零拷贝