沃趣科技独家揭秘移动云数据库SQL Server HA 技术内幕
科技
科技 > 传媒 > 正文

沃趣科技独家揭秘移动云数据库SQL Server HA 技术内幕

随着沃趣云数据库MySQL在移动云的成功运营,沃趣与云厂商树立了一个坚定的信心:kubernetes完全具备大规模编排调度有状态数据库应用的能力。基于k8s的云数据库SQL Server项目也在云数据库MySQL上线后立即提上日程,此次SQL Server项目同样由沃趣科技容器数据库QFusion中标,并于2020年11月25日正式上线移动云。

容器化的SQL Server

提起SQL Server,很多人的印象是“必须部署在windows上”、“图形化界面管理”、“丰富且强大的功能”。因为必须运行在window上,所以似乎和容器化扯不上什么关系。但是随着SQL Server 2017的发布,现在SQL Server这款企业级的数据库也可以跑在linux上了,且有官方docker镜像提供下载。Linux版的SQL Server除了部署平台的区别,对于用户来说使用感受是一样的,同样可以使用SSMS来连接管理,同样具备Windows上SQL Server的强大功能。这样一来,基于k8s的云数据库SQL Server就有了坚实的基石。

云数据库SQL Server HA 技术选型

SQL Server的高可用方案有:镜像,日志传输,故障转移群集实例,AlwaysOn可用组。镜像只能1主1备,且备库不可读,日志传输无法保障数据的实时传输应用,故障转移群集实例实质上只是share storage,同样无法做到数据多副本及副本只读。最终我们选择了AlwaysOn作为云数据库SQL Server 的HA方案。AlwaysOn作为SQL Server最新且最强大的HA架构,具备多数据副本同步,副本只读,故障切换等功能,可以满足云上数据库的高可用需求。

云数据库SQL Server HA 的技术实现

相信很多人有安装部署过AlwaysOn,在windows平台上安装部署AlwaysON时,我们需要AD域控做验证,依托WSFC服务做仲裁及自动切换。那么在k8s上我们怎么实现呢?没有AD做验证,可以采用证书验证方式。但是没有WSFC,就意味健康监控检测,自动主备切换等等必须通过业务代码实现。

健康监控

健康监控相对简单,业务代码里包含定期执行一个查询一个更新操作,由此判断实例是否健康。

同步状态监控

SQL Server提供了丰富的视图用于监控AlwaysOn可用组状态,包括副本同步状态,日志传输速率,应用速率等等,比较重要的状态表述列有synchronization_state、is_failover_ready、is_suspended等。基于这些系统视图,我们还创建了一系列业务视图用于整合这些状态。这些状态足够我们对可用组的健康情况作出正确判断。

数据库初始化

当在AlwaysOn主实例上创建数据库之后,我们还需将该库同步到多副本。这个步骤称为数据库初始化。

我们采用auto_seeding方案实现数据库初始化,通过相关视图来监控数据库初始化成功与否,并设计了重试逻辑。

仲裁实现

通过etcd集群提供的分布式锁服务用作仲裁。当primary健康时,它持有该锁,发生故障后,锁被释放。多个secondary副本将参与选主流程,选举的新主持有分布式锁。

故障切换

故障切换是leader组件的核心功能,也是整个HA技术实现的核心。通过健康监控判断当前primary是否故障,这点相对简单,误判的可能很小,并且有分布式锁作为仲裁,不存在网络故障导致多主的可能。关键点在于如何从多个secondary副本中选择一个提升为主,保证数据一致性,并在切换后重新构建同步关系。

总结概述

云数据库SQL Server HA 的技术实现总而言之就是,通过AlwaysOn技术来保证多数据副本同步及副本只读,通过k8s上的etcd集群提供分布式锁服务用作仲裁,通过自研的leader组件做健康检测、可用组状态监控、数据初始化、以及自动切换。

免责声明:市场有风险,选择需谨慎!此文仅供参考,不作买卖依据。

亲爱的凤凰网用户:

您当前使用的浏览器版本过低,导致网站不能正常访问,建议升级浏览器

第三方浏览器推荐:

谷歌(Chrome)浏览器 下载

360安全浏览器 下载