高可用架构实云数据库
- 格式:docx
- 大小:448.32 KB
- 文档页数:9
一、数据库架构原则1.高可用2.3.高性能4.5.一致性6.7.扩展性8.二、常见的数据库架构方案方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用jdbc:mysql://vip:3306/xxdb1、高可用分析:高可用,主库挂了,keepalive(只是一种工具)会自动切换到备库。
这个过程对业务层是透明的,无需修改代码或配置。
2、高性能分析:读写都操作主库,很容易产生瓶颈。
大部分互联网应用读多写少,读会先成为瓶颈,进而影响写性能。
另外,备库只是单纯的备份,资源利用率50%,这点方案二可解决。
3、一致性分析:读写都操作主库,不存在数据一致性问题。
4、扩展性分析:无法通过加从库来扩展读性能,进而提高整体性能。
5、可落地分析:两点影响落地使用。
第一,性能一般,这点可以通过建立高效的索引和引入缓存来增加读性能,进而提高性能。
这也是通用的方案。
第二,扩展性差,这点可以通过分库分表来扩展。
方案二:双主架构,两个主库同时提供服务,负载均衡jdbc:mysql://vip:3306/xxdb1、高可用分析:高可用,一个主库挂了,不影响另一台主库提供服务。
这个过程对业务层是透明的,无需修改代码或配置。
2、高性能分析:读写性能相比于方案一都得到提升,提升一倍。
3、一致性分析:存在数据一致性问题。
请看,一致性解决方案。
4、扩展性分析:当然可以扩展成三主循环,但笔者不建议(会多一层数据同步,这样同步的时间会更长)。
如果非得在数据库架构层面扩展的话,扩展为方案四。
5、可落地分析:两点影响落地使用。
第一,数据一致性问题,一致性解决方案可解决问题。
第二,主键冲突问题,ID统一地由分布式ID生成服务来生成可解决问题。
方案三:主从架构,一主多从,读写分离jdbc:mysql://master-ip:3306/xxdbjdbc:mysql://slave1-ip:3306/xxdbjdbc:mysql://slave2-ip:3306/xxdb1、高可用分析:主库单点,从库高可用。
海量并发下高可用库存中心的设计与实现在海量并发下实现高可用的库存中心的设计至关重要,这可以确保系统能够稳定地处理大量的库存操作请求,并保证数据的准确性和一致性。
下面是一个可能的设计与实现方案:一、基础架构设计:1.库存中心采用分布式架构,包括多个库存节点,每个节点负责一部分库存数据的管理和处理。
2.使用主从复制的方式保证库存数据的可靠性和高可用性,每个节点都可以接收读操作请求,而写操作只能由主节点处理。
3.引入负载均衡的机制,将请求均匀地分发到各个库存节点,提高系统的吞吐量和并发处理能力。
二、一致性设计:1.引入分布式事务处理机制,确保库存操作的一致性。
通过如分布式锁、分布式事务协调器等技术来实现。
2.库存中心记录每次操作的流水日志,并定期对所有库存节点的数据进行校验和同步,以保证数据的准确性和一致性。
三、高可用性设计:1.使用可插拔式组件,将库存中心与外部系统解耦,以避免单点故障的问题。
2.设置监控系统和告警机制,及时发现和修复系统的故障,提高系统的可用性。
3.使用集群和冗余机制,确保系统在节点故障时仍能正常运行,同时要有自动重启和故障转移的机制。
四、性能优化设计:1.使用内存缓存技术,将热点数据保存在内存中,提高读写操作的性能。
2.利用异步处理和批处理机制,将一些耗时的操作异步化,并以批量方式执行,提高系统的吞吐量和并发能力。
3.优化数据库设计和索引,减少库存查询和更新的耗时,提高数据库的读写性能。
五、故障恢复设计:1.定期备份库存数据,以便在系统故障时能够及时恢复。
2.设计有效的灾难恢复机制,确保在灾难性事件发生时,能够快速将系统恢复到正常运行状态。
六、安全性设计:1.引入身份认证和权限控制机制,保护库存中心免受未经授权的访问和操作。
2.使用加密技术,保护库存数据在传输和存储过程中的安全性。
3.建立日志系统,记录所有的操作记录,以便进行安全审计和追踪。
总结:以上是一个可能的海量并发下高可用库存中心设计与实现的方案。
数据库的高可用性架构与故障恢复随着计算机技术的不断进步,数据库已经成为现代社会中重要的数据存储和处理工具之一。
在大型企业和组织中,数据库的高可用性架构和故障恢复是确保业务连续性和数据完整性的重要组成部分。
本文将探讨数据库的高可用性架构和故障恢复的一些关键概念和方法。
首先,我们需要理解高可用性架构的概念。
高可用性是指在面对硬件、软件或网络故障时,系统仍然能够继续运行并提供服务。
数据库的高可用性架构旨在确保数据库系统在故障发生时能够快速恢复并保持数据的连续性。
为达到这一目标,常见的架构模式包括备份和恢复、主从复制和集群。
备份和恢复是数据库高可用性架构中最常见的一种方式。
它通过定期备份数据库,并在发生故障时恢复备份文件以恢复数据完整性。
备份可以以全量备份或增量备份的方式进行,全量备份是指备份整个数据库,而增量备份则是只备份发生变更的部分。
通过组合使用不同类型的备份,可以保证不同程度的数据丢失。
另一种常见的高可用性架构是主从复制。
主从复制是通过建立一个主数据库和一个或多个从数据库的关系。
主数据库负责处理读写操作,而从数据库则复制主数据库的数据,只处理读操作。
当主数据库发生故障时,从数据库可以接管并提供服务,实现快速故障恢复。
主从复制还可以用于水平扩展,通过增加从数据库来提高处理能力。
除备份和恢复和主从复制外,还有一种被广泛采用的高可用性架构是集群。
集群是指通过多个服务器(节点)组成的系统,这些节点共享相同的硬件和软件配置,并提供相同的数据库服务。
集群通过分布数据和计算负载来提供高可用性和扩展性。
常见的集群技术包括主备集群和主主集群。
主备集群是指在多个节点中,只有一个节点处于活动状态,其他节点处于待命状态,一旦活动节点失败,待命节点可以快速接管。
主主集群则是所有节点都处于活动状态,数据进行双向同步,提供更好的性能和数据一致性。
当数据库发生故障时,快速恢复数据是至关重要的。
数据库的故障恢复可以通过以下步骤来实现。
大数据 云计算数码世界 P .155一种基于占位虚拟机的云数据中心高可用方案黄颖 徐岚 中国电子科技集团公司第二十八研究所摘要:本文针对分布式云数据中心间“数据跨中心备份、服务按需接管”的中心级高可用能力,提出一种基于占位虚拟机的云高可用方案,并将系统技术架构分为网络层、云平台层、数据层、服务层、访问接入层五个层次,分析了每层的高可用技术应用策略,该方案具备较好的应用推广前景。
关键词:高可用 占位虚拟机 云数据中心1 高可用相关概念随着虚拟化、网络化、服务化技术的快速发展,云架构已在各个领域大量运用,数据中心作为云资源的提供者承载了大量不同类型的应用。
目前单一的数据中心已发展为分布式云数据中心模式,对分布式云数据中心构成一体化高可用能力的需求也越来越迫切。
在业界通常概念定义中,高可用性(High Availability ,HA)用来描述一个系统经过专门的设计,以减少停工时间,而保持其服务的高度可用性。
业界通常说的数据中心双活,也属于高可用能力的范畴。
描述系统高可用能力,一般有两个重要指标:系统恢复时间(RTO)和数据恢复点目标(RPO)。
RTO 是针对服务丢失,从业务系统故障开始,到业务系统恢复正常之间的时间段。
RPO 是针对数据丢失,指业务系统和应用数据恢复正常后,系统及生产数据能恢复到过去的哪个时间点。
一般来说,数据中心高可用能力根据备用中心活跃程度由低到高,可定义为5个等级,如图1所示。
对于最高等级的全集双活,两中心技术架构应是完全对称、去中心化的,需要从底层网络到上层应用进行一体化设计,实现起来难度很大,性价比不高。
在大多数工程实践中,一般结合高可用性需求在冷备、热备、只读、分片4个等级中选择,也可采用混合架构,对系统进行分层,不同层采用不同的高可用技术策略。
图1 高可用能力等级示意图2 高可用方案简述在某大型系统建设了相距100公里以内的两个数据中心,作为逻辑一体的后台,共同对前台客户端提供服务。
高可用架构设计及实现方法随着互联网技术的逐渐普及,许多企业开始注重技术的发展和架构的设计。
高可用架构是一种可以保证业务持续稳定运行的设计方案,而在实现高可用架构的过程中,涉及到的技术和策略也是非常关键的。
本文将就高可用架构的设计及实现方法做一些简单的介绍。
一、高可用架构设计概述高可用架构通俗的说法就是“高冗余度”架构,即通过多个节点、多个通道等方式提高整个系统的可靠性和稳定性。
在实际应用中,高可用的架构设计往往考虑的因素非常多,涉及的技术和策略都非常复杂。
其中,以下几个方面是设计高可用架构时必须要考虑的:1.节点冗余设计:我们可以通过备份多个节点来实现系统的整体冗余,即使一台服务器节点出现故障,也可以及时补充其他的节点保证业务的正常进行。
2.数据冗余设计:在系统存储层面,我们也可以通过备份数据、多副本等方式实现数据的冗余,保证我们的数据一旦丢失,可以快速从备盘中恢复。
3.链路冗余设计:在系统通讯方面,我们可以通过多个通道进行数据传输,避免单点故障导致业务中断。
4.负载均衡设计:一台服务器不可能承载所有的请求,因此我们需要将请求均衡地分配到多台服务器中去,以达到负载均衡的效果。
5.监控报警设计:在系统运行过程中,我们需要时刻监控各个节点和关键指标的状态,及时报警并做出相应的处理。
6.可扩展性设计:随着业务规模的不断扩大,我们需要预留足够的扩展空间和具备系统水平扩展的能力,因此在架构设计时需要考虑这方面的问题。
以上这些方面都是设计高可用架构时必须要考虑的,还需要考虑系统的应用场景、业务类型、技术选型等因素,最终综合考虑实现合适的高可用架构。
二、高可用架构的实现方法在高可用架构实现过程中,需要考虑执行上述方面的策略和技术,以下是实现高可用架构常用的方法:1.节点冗余实现方法:为了实现节点冗余,我们可以采用主备模式、双活模式、N+1等方式。
在主备模式下,我们将采用冗余服务器来备份主服务器,这样当主服务器宕机之后,冗余服务器会立即上线并提供服务。
高可用性云计算平台的研究与实现第一章:引言随着信息技术的迅速发展,云计算作为一种新型的计算模式,已经成为各行各业应用的重要手段。
高可用性云计算平台作为云计算的基础设施之一,具有极大的应用潜力。
本文旨在对高可用性云计算平台的研究与实现进行探讨,以期为相关研究和实践提供参考。
第二章:高可用性云计算平台的概述2.1 云计算平台的特点云计算平台作为一种分布式计算模式,具有灵活性、弹性和可扩展性等特点。
高可用性是云计算平台的重要特征之一,为用户提供可靠性和稳定性的服务。
2.2 高可用性云计算平台的定义高可用性云计算平台是指能够提供连续可靠性服务的云计算基础设施,具备自动和快速恢复能力,以实现对故障的快速响应,并保证用户的业务不受影响。
第三章:高可用性云计算平台的关键技术3.1 负载均衡技术负载均衡技术是实现高可用性云计算平台的关键技术之一。
通过将用户请求分配到集群中的多个节点上,实现资源的均衡利用,提高系统的整体性能和可用性。
3.2 容错技术容错技术是保障高可用性云计算平台正常运行的重要手段。
通过使用冗余的硬件、软件和网络设备等手段,实现故障的隔离和恢复。
3.3 弹性扩展技术弹性扩展技术是高可用性云计算平台实现规模性增长和弹性调整的关键技术。
通过监控系统的负载情况,及时调整资源配置,以满足用户的需求变化。
第四章:高可用性云计算平台的实现方法4.1 虚拟化技术虚拟化技术是实现高可用性云计算平台的基础。
通过将物理设备虚拟化成虚拟机,提供资源池的共享和弹性调度,实现对硬件故障的隔离和恢复。
4.2 分布式存储技术分布式存储技术是高可用性云计算平台实现数据备份和容灾的重要手段。
通过将数据分散存储在多个节点上,并实现数据的冗余备份和数据一致性保证。
4.3 容器技术容器技术是高可用性云计算平台实现应用部署和管理的重要技术。
通过将应用程序及其所有依赖项打包到容器中,实现应用的快速迁移和部署。
第五章:高可用性云计算平台的应用案例分析5.1 亚马逊AWS亚马逊AWS是目前应用最广泛的高可用性云计算平台之一。
数据库的容灾与高可用性架构设计在现代企业中,数据库作为存储和管理重要数据的关键组件,在保障数据安全和可用性方面起着至关重要的作用。
为了在遇到灾难性故障时能够实现数据的恢复和系统的快速恢复,数据库的容灾与高可用性架构设计成为不可忽视的问题。
本文将从容灾和高可用性两个方面来探讨数据库架构的设计。
一、容灾架构设计容灾是指在遭受灾害或故障时,能够保证系统和数据的连续性、完整性和可用性的能力。
常见的容灾架构设计方案有备份和恢复、冷备份、热备份、以及异地多活等。
以下将介绍这些方案的特点和适用场景。
1. 备份和恢复备份和恢复是最基本也是最常用的容灾方案。
通过定期对数据库进行备份,并将备份文件保存在不同地点,以便在数据库故障时能够快速恢复。
备份可以是完整备份或增量备份,具体根据数据量和恢复的时间要求来决定。
备份和恢复需要有明确的策略和计划,包括备份频率、备份存储位置、备份验证等。
2. 冷备份冷备份是指在数据库故障时,将备份数据拷贝到目标服务器上,并启动该数据库实例的过程。
由于数据库备份是离线状态进行的,所以恢复数据库的时间较长。
冷备份适用于数据量较大、恢复时间要求相对宽松的情况。
3. 热备份热备份是指在数据库故障时,将备份数据拷贝到目标服务器上,并将该数据文件应用到实时数据库中。
这种方式下数据库恢复的时间较短,可以保证业务的连续性。
热备份适用于恢复时间要求比较短的情况。
4. 异地多活异地多活是指在两个或多个地理位置上构建相同的数据库环境,并通过数据同步来保持数据一致性。
当一个地点的数据库出现故障时,可以切换到另一个地点的数据库继续提供服务。
异地多活适用于对系统可用性要求较高的场景,但需要考虑数据同步和网络延迟等问题。
二、高可用性架构设计高可用性是指系统能够在故障发生时保持功能正常和高效运行的能力。
在数据库高可用性架构设计中,常见的方案有主从复制、主从复制+读写分离、集群等。
1. 主从复制主从复制是指将主数据库的数据实时复制到一个或多个从数据库上,从数据库作为备份和故障切换的目标。
五大常见的MySQL高可用方案首发于1. 概述我们在考虑MySQL数据库的高可用的架构时,主要要考虑如下几方面:∙如果数据库发生了宕机或者意外中断等故障,能尽快恢复数据库的可用性,尽可能的减少停机时间,保证业务不会因为数据库的故障而中断。
∙用作备份、只读副本等功能的非主节点的数据应该和主节点的数据实时或者保持一致。
∙当业务发生数据库切换时,切换前后的数据库内容应当一致,不会因为数据缺失或者数据不一致而影响业务。
关于对高可用的分级在这里我们不做详细的讨论,这里只讨论常用高可用方案的优缺点以及高可用方案的选型。
2. 高可用方案2.1. 主从或主主半同步复制使用双节点数据库,搭建单向或者双向的半同步复制。
在5.7以后的版本中,由于lossless replication、logical多线程复制等一些列新特性的引入,使得MySQL原生半同步复制更加可靠。
常见架构如下:通常会和proxy、keepalived等第三方软件同时使用,即可以用来监控数据库的健康,又可以执行一系列管理命令。
如果主库发生故障,切换到备库后仍然可以继续使用数据库。
优点:1.架构比较简单,使用原生半同步复制作为数据同步的依据;2.双节点,没有主机宕机后的选主问题,直接切换即可;3.双节点,需求资源少,部署简单;缺点:1.完全依赖于半同步复制,如果半同步复制退化为异步复制,数据一致性无法得到保证;2.需要额外考虑haproxy、keepalived的高可用机制。
2.2. 半同步复制优化半同步复制机制是可靠的。
如果半同步复制一直是生效的,那么便可以认为数据是一致的。
但是由于网络波动等一些客观原因,导致半同步复制发生超时而切换为异步复制,那么这时便不能保证数据的一致性。
所以尽可能的保证半同步复制,便可提高数据的一致性。
该方案同样使用双节点架构,但是在原有半同复制的基础上做了功能上的优化,使半同步复制的机制变得更加可靠。
可参考的优化方案如下:双通道复制半同步复制由于发生超时后,复制断开,当再次建立起复制时,同时建立两条通道,其中一条半同步复制通道从当前位置开始复制,保证从机知道当前主机执行的进度。
高可用架构实践云数据库UCloud云数据库(UDB)团队对UDB底层架构进行重构,对其性能和数据一致性等内核方面做了大量深入的工作。
“高可用”英文翻译为“High Availability”,从字面上理解就是要做到服务full-time的持续可用。
但老实说,要做到full-time是不现实的,因为能够影响系统服务可用性的因素实在太多了,除软件BUG、硬件故障外,还包括系统所依赖的一些如运营商提供的带宽等第三方服务,,甚至还包括天灾人祸。
因此,所谓的高可用意味着“更少的停服时间”,而工业界也有一套测量系统可用性的标准,即大家所熟知的SLA(Service Level Agreement),也就是几个9的可用性(如下表):在工业应用场景中,例如做在线服务的各大互联网公司,号称7*24小时不间断服务,如果只是达到一个“9”的可用性,将会是一种什么样的灾难。
然而,要做到5个“9”的可用性,就意味着全年只有一次服务宕机,而且必须在5分钟左右就恢复,其难度不言而喻,因此只是采用技术手段不足以做到,还需要有一整套完备严谨的工程管理防范措施、配套工具及工程运维人员等。
云计算号称互联网公司的水和电,高可用犹如云服务商的生命线。
因为云端成千上万个用户数据库实例所面临的问题会更加五花八门,所以云数据库作为该领域的一项重要服务,更是承受着不同维度的考验。
下面将先介绍MySQL领域的关键技术及适用场景,并在此基础上介绍和分享UDB的高可用方案。
数据库服务和很多工业服务在高可用技术方案是相通的,为了实现高可用,首先实现服务的”冗余”,即服务的集群化。
如果服务有冗余备份,宕机后还有其它备份服务(热备和冷备)可以顶上,所以实现数据库服务的”冗余”也是高可用数据库的核心准则。
不过,有了”冗余”备份后还不够,因为如果每次宕机都需要人工恢复切换至备份服务,那么恢复时间得不到保证,同时人为的故障恢复过程中可能会引入新的风险(人为事故),从而降低了服务的可用性,因此必须还具备”自动故障转移”功能。
数据库服务相比于其它系统的高可用,在上述两个关键技术点的实现上会更加困难,因为传统RDMS对数据、事务的持久性与稳定性要求非高,因此也提高了对冗余数据的一致性要求和实现难度。
下图是Oracle官方对MySQL几种典型高可用方案的可用性总结,由于时间相对较早,并且随着近年来分布式一致性协议在工业界的实践和发展,MySQL高可用方案又有了全新的发展方向以及相对成熟的方案,下面将一并罗列与解析。
(1)MySQL Replication 就是通过MySQL原生复制技术来实现数据的冗余,该方案也是较易实现和通用的方案,相关原理介绍不再详细赘述。
其实现原理主要是通过2PC来实现本地BINLOG与本地数据的一致性,并在此基础上通过IO 线程和SQL线程来实现远端数据与本地数据同步,根据数据一致性程度不同,复制技术又可以分为异步复制、半同步复制以及同步复制。
另外,在此冗余技术上,一般会搭配使用MySQLProxy、keepalived、MHA等第三方软件来实现自动容灾,该技术方案如果不做一定优化,可用性一般不到2个“9”。
(2)MySQL Fabric 是Oracle官方提供的一种MySQL高可用方案,通过数据分片下的读写分离模式,该方案的可用性达到2个“9”。
(3)分布式块设备复制(Distributed Relicated Block Deivce,DRBD)是一种基于软件、网络的块复制存储解决方案,主要用于对服务器之间的磁盘、分区、逻辑卷等生成数据镜像。
当用户将数据写入本地磁盘时,还会把数据发送到网络中另一台主机的磁盘上,使本地主机(主节点)与远程主机(备节点)数据实时同步,当本地主机出现问题时,远程主机上还保留着一份相同的数据,仍能继续使用,保证了数据安全,但该方案的缺点是IO性能影响严重,可用性不到3个“9”。
(4)Solaris Clustering方案代表着另一种技术方向,即以共享存储为基础,实现数据库服务器和存储设备的解耦,其结果是数据库服务器之间的冗余与数据无关,数据冗余通过SAN共享储存或分布式存储系统来实现。
当然,除此之外,Solaris Clustering还提供操作系统、硬件等各个层面的监控机制。
该方案的可用性达到接近4个“9”,但由于价格昂贵,实现代价大。
(5)MySQL Cluster是官方提供的一个开源方案,其将MySQL的集群分为SQL 节点和数据节点,数据节点通过一种内存中的存储引擎来实现自动sharding和复制。
虽然该方案号称接近5个“9”的可用性,但缺点也很多,例如对内存消耗大、使用成本高、牺牲了过多SQL语言特性、配置复杂等。
(6)Paxos 协议主要以多数派投票的方式来就分布式系统中某个值达成一致,该算法被业界认为是分布式一致性算法,包括其在内衍生出来的分布式一致性算法,如Raft,也在很多开源分布式系统得到应用。
Paxos与MySQL相结合可以实现分布式MySQL数据库较终一致性,从而保证高可用,因而使用分布式算法来解决MySQL数据库一致性问题的方法也逐渐被用户所接受,一系列产品如PhxSQL、MariaDB Galera Cluster、Percona XtraDB Cluster等,越来越多的被应用到生产环境。
较近,Oracle官方推出MySQL Group Replication的GA,更使其在MySQL高可用领域成为一种民用技术,因此使用分布式协议和多副本来解决数据库一致性问题已经成为主流方向。
但此类方案还处于初级阶段,不够成熟,同时分布式一致性协议由于网络开销的原因,在性能上还有待提高和优化。
为了实现云数据库服务的高可用,基于半同步复制技术,UDB采用双主的热备架构,实现故障自动转移,并在此基础上实现了Proxy模块,该模块不仅负责数据业务的转发,同时还监控后端DB健康状况和双主数据一致性检测,实现在后端DB宕机但不影响数据一致性的情况下,完成数据业务切换。
整个架构及容灾过程如下图:也许从架构上看很简单,一主一备的架构没有什么新意,但深入到细节中会发现仍有很多问题和难点,或者说这些问题都围绕“如何保证数据一致性”这个目标。
普通异步复制对数据库性能影响较小,但主从数据一致性难以保证;强同步复制虽然保证了主从强一致,但可用性很差,因此UDB选择了折中方案——半同步复制。
不过,只是简单的使用半同步复制依然不够,通过分析半同步复制的过程和原理,UCloud发现半同步复制会存在以下缺陷,在分析缺陷的同时也将介绍UDB的解决方案与策略:1、如何解决临界事务问题?什么是临界事务?临界事务就是在宕机那个时间点主库正在提交的事务,这个事务可能已经提交,可能已经fsync到磁盘,但却没有同步到从库中去。
半同步复制对于临界事务是没法保证的,下图是MySQL5.7无损复制一次事务commit 流程(UDB基于次复制技术做了优化):如上图,UCloud对MySQL5.7版本中无损复制模式(默认模式下)的半同步复制主机commit做了细分,拆成7个可能crash的阶段,考虑到双机切换后可能会导致的数据丢失与数据一致性异常,UCloud对每个阶段做了以下分析:➢在阶段1、2、3发生了crash,由于主库重启后事务会回滚,binlog未发送到从库,所以不会发生异常;➢在阶段4发生异常,由于主库进入了commit阶段,但是binlog尚未发送到从库,在主库重启后仍然会将这个事务发送到从机;➢在阶段5、6、7发生异常,由于从库已经收到了binlog,只要主库重启后即可达到主库和备库数据一致的效果通过上述分析,无损复制模式下,只有在阶段4发生宕机会导致恢复后双主数据不一致,因为发生宕机时,该事务在此阶段并没有发送至从库。
但主库已提交至binlog和redolog,如果此时业务切至从库,主库恢复后会继续将事务commit 并同步到从库。
不过,由于从库上已经有了新事务,因此很可能会与此事务产生冲突(如主键冲突),从而导致双主数据不一致。
所以为了解决宕机时临界事务问题,UCloud通过内核层面在主库重启recovery阶段作了如下调整:有选择性的commit并复制到从库部分事务,回滚掉没有同步到原从库的事务及Truncate掉binlog中相应的event,整个过程如下图:如上图所示,主库恢复后,会向从库或者Proxy询问从本库同步过去的较后一条事务的binlog位置,并以此为基础回滚掉该binlog位置之后的临界事务。
2、如何解决半同步退化问题?由于网络抖动以及从库硬件故障等问题会导致半同步退化为异步,如果在此情况下主库发生宕机并发生切换,会导致数据丢失,对很多数据敏感业务(如金融)造成的后果将非常严重。
因此,虽然当半同步复制退化时,整个集群是不可以容灾切换业务的,但如果主机宕机无法SSH登陆,又将怎样确定主从是否退化以及从库数据是否和主库一致?为了解决此问题,防止错误切换导致数据丢失,UDB通过在Proxy和MySQL 之间以及主从之间增加链接通道,Proxy和MySQL会用专门线程通过此链接通道同步事务信息,如果主库发生宕机,从库可以在本地缓存和远端Proxy获取同步事务信息,并使用该事务信息作为从机是否可以切换的依据,如下图:同时,为了提高可用性,应对短时间网络抖动后造成双主长时间数据不一致的情况,UDB在网络恢复后,会额外启动一个复制链路来追补落后的数据,而原先的半同步复制链路则继续用于复制实时事务。
这样不仅可以提高复制数据效率,而且还避免了由于从库负载过高永远恢复半同步的风险。
3、如何保证Proxy的高可用?通过前述问题以及UDB相应解决方案的分析,可以看出Proxy在整个架构中扮演着极其重要的角色,不仅负责数据转发,同时也为数据一致性和可用性提供保障。
那么关注的另一个问题就出现了:如果Proxy宕机怎么办?为了解决Proxy 高可用问题,UDB对Proxy模块也采用了“一主一备”模式,如下图:当图中左路主Proxy宕机后,ProxyMaster模块会触发容灾处理过程,此时ProxyMaster会将虚拟IP重新绑定至Proxy(backup)并自动启动,启动后Proxy(backup)会重新链路至原MasterDB,以保证业务不间断,而ProxyMaster模块通过ZK服务分布在多个服务器上,有效的保证了Proxy的可用性。
4、其他保障措施实际上,除该双主技术架构外,为了保障服务的高可用,UDB在运维监控等层面也做了大量工作,通过对硬件、操作系统、数据库、网络等各个层面的不间断监控,较大程度及时捕获和恢复数据库服务。
同时,UDB通过自研的大型数据库备份系统,能够应对各种级别宕机故障后的数据恢复,从而保障了用户数据的安全可靠性。