摘要:
高可用高可靠,华为云数据库有话说。
对于数据库来说,可用性是永恒的话题。DBA(数据库管理员) 会按照业务的不同要求,选择不同的策略,保证系统正常运作。其中包含数据库本身内核提供的能力,和外部的监控管理系统。那么真正高可用的数据库,应该具备哪些技能呢? 这还得从头说起。
众所周知,商用数据库提供全套的管理系统,缺点只有一个,贵。开源数据库有很多生态工具,此外借助其他组件的解决方案,也能完成相应功能;但使用开源数据库,有一定技术门槛和维护成本。
云数据库的出现,刚好弥补了两者间的不足。一方面,云数据库服务以较低的价格提供了企业级解决方案,节省运维成本,且只需要配置,服务就能按照业务诉求执行不同的管理策略。另一方面,按需付费按需扩展,弹性伸缩能力强,是企业的高性价比选择。
需要注意的是,不同云厂商提供的可用性方案和策略也不同。从底层实现上有两类,一是通过底层能力,比如 AWS 的 DRBD 方案,类似传统 Shared disk(共用磁盘) 的冷备方案。 一是大部分厂商都使用的,利用数据库本身能力即数据库主备同步方式来实现。
我们以最受欢迎的开源数据库 MySQL 为例。MySQL 同步模式:
异步: 主机事务提交不会确认备机是否接到数据,写入和数据传输是个异步过程,主机性能比较好。
半同步:通常情况下主机会等待备机收到同步过去的 binlog 日志才提交数据,这样是为了保证数据不丢失。
那么,半同步是否能保证数据不丢失呢? 答案是否定的。
当网络异常或其他因素影响时,MySQL 的半同步复制方式会降为异步;因此,其半同步大体来说就是尽量保证数据不丢失,但在异常情况下下,可用性优先。
这就会导致一个问题,当数据库连接增多时,备实例收集和执行日志中事务的速度较慢,处理事务能力远落后于主实例,高负荷的情况越持久,事务积压越严重,故障情况下恢复所需的时间越长。
也就是说,在高并发场景下,开源 MySQL 不但复制延迟突出、故障恢复时间长,而且受可用性优先的同步机制影响,可能出现数据丢失的情况。
华为云数据库 RDS for MySQL 是怎么做的呢?
首先,客户可以根据业务选择复制模式。如果业务有对账系统,希望保证最大的可用性和性能,可以选择异步; 如果对可靠性要求较高可以选择半同步。
其次,华为云数据库还增加了 HA 高可用策略,客户可以选择高可用模式和高可靠模式。 HA 监视器(monitor)除了对主备实例进行健康检查以外,还记录主备同步情况,在高可用模式下发现故障直接切换。
高可靠模式下,HA monitor 会根据当前的主备延迟进行判断,达到一定阈值,则进行可靠性保护,不进行切换,保证数据库的可靠性。(故障处理方式见下文。)
有了这两种设置,客户可以充分根据业务进行灵活选择。
这些就完了吗,当然没有。
除了 HA 处理外,华为云数据库还提供了补偿机制,可以将HA 丢失数据找回。(在云下,这种高端操作可是要给 DBA 加鸡腿的。)
当主备切换、原主实例恢复后,会与原备实例、现在的新主实例做数据检查,将丢失的部分数据生成一个“碎片备份”, 客户可以在备份列表中看到,然后根据业务需要选择将这部分数据插入。
以上是华为云在云服务化方面的优化处理,以提供强大的管理能力。此外,华为云数据库增强版更是结合内核和服务化,对其性能进一步优化提升。还是以 MySQL 为例:
同步模式上:华为云数据库 MySQL 增强版屏蔽异步模式,对半同步模式性能、并行复制等进行优化。半同步模式下不但性能损耗大幅降低,而且能提供业界领先的性能表现。在高并发场景下,华为云数据库 MySQL 增强版始终保持高 QPS,性能达社区版本 MySQL 5.6 的 3 倍、5.7 的 1.5 倍。
在 HA 策略上:华为云数据库 MySQL 增强版提供探针和降异步接口,控制降异步的过程,根据客户的选择可以提供强同步模式,保证数据0丢失。 在此模式下,如果发生故障则不进行切换,但是对于故障不会置之不理,而是提供虚拟化层面的可靠性策略,可以进行虚拟机层的 HA 漂移,将原主恢复。
从服务化到数据库内核到底层平台,华为云数据库提供了 360 度的数据库 SLA 服务等级保障。目前,华为云多款高可用数据库引擎可 1 元试用 30 天,配套数据库免费迁移 “零”中断上云活动,欢迎大家体验。