#YashanDB高可用概述
高可用( High Availability ),简称HA, 通常是指通过各种技术手段减少系统不能提供服务的时间,保障业务连续性。如果系统每运行100个时间单位中有1个时间单位无法提供服务,则系统的可用性是99%,实际场景中,大多数企业追求的系统可用性目标是尽量接近100%,即7*24小时不间断运行。
YashanDB的高可用架构主要从以下几方面设计,以助力企业达到上述目标:
主备部署,主备实例部署在不同主机上,连接到同一交换机,确保网络低时延,保证高可用避免单点故障。
级联备部署,部署在异地的异步备机,减少主机带宽负载,保证高可用实现异地容灾。
主机节点不可用时,从备机节点自动选举升主,实现发生故障时的自动切换。
分布式部署中,MN节点组、DN节点组均采用主备部署方式,提供分布式集群的高可用能力。
分布式部署中,CN节点组采用多活部署方式,保证高可用并实现负载均衡能力。
# 主备部署
主备复制是数据库最主要的高可用手段,通过将主机上的数据实时复制到备机来实现。主机是执行业务的数据库实例,备机是复制主机数据的数据库实例。当主机发生故障的时候,业务可以转移到备机上继续执行,降低故障对业务的影响,提高数据库的可用性。
主机:
数据库主节点,当前提供在线数据库服务,读写模式。
备机:
数据库副节点,从主机接收日志并回放,只读模式,主机故障时从备机状态切换为主机状态,一台主机可以多台备机(单机部署中最多32个,分布式部署中每个节点组内最多3个)。
YashanDB中,单机部署和分布式部署采用不同的主备部署方式,详细操作请分别参考单机高可用部署和分布式高可用部署。
# 主备复制链路
主机向备机的实时数据复制通过传送redo日志来实现,如下图:
1.日志发送
包括SYNC同步传送和ASYNC异步传送两种模式:
- SYNC同步传送:主机从Log Cache中读取数据发送至备机,性能较高。
- ASYNC异步传送:主机从redo文件读取数据发送至备机,一般适用于异地备机。
日志发送采取SYNC还是ASYNC模式,由系统自动选择。
2.日志回放
备机通过重演主机发送过来的redo日志来恢复数据页面,以达到和主机的及时同步。
当在Log Cache和redo文件中均未找到需要的数据时,将启动线程同步主机上的归档日志文件到备机并从中查找所需数据,最大程度保障主备机的数据一致性。
# 保护模式
主备复制基于网络传输,势必存在一定的延迟和不稳定性,YashanDB提供三种不同的保护模式供选择配置,由用户根据自身对性能或是对数据安全的偏好来决策采用合适的主备复制模式。
最大保护模式
此种模式下,主机事务提交后,必须等待同步备机将对应日志刷盘后,才能向客户端返回事务提交成功。该模式的优点为,如果主机故障,同步备机升主后可以保证数据不丢失;缺点为,如果同步备机断网或故障,将阻塞主机业务。
最大性能模式
此种模式下,主机事务提交无需等待备机复制结果,提交后即向客户端返回事务提交成功。该模式的优点为,主机性能较高,且备机断网或故障不会影响主机业务;缺点为,如果主机故障,备机升主后可能发生数据丢失。
最大可用模式
此种模式下,当任意同步备机连接正常时,采取最大保护模式,当所有同步备机断网或故障时,采取最大性能模式。最大可用模式提供尽可能的数据保护,和主数据库的可用性,但也存在数据丢失风险。
Note:
分布式部署中的MN组固定使用最大保护模式(必须一主两备),最大程度地保障数据不丢失,无需用户配置。
# 主备切换
YashanDB支持在主备机均正常的情况下执行Switchover,也支持在主机异常的情况下执行Failover。
Switchover
Switchover在备机上执行,执行时要求主机和备机的网络连接正常,且主机和备机实例均处于OPEN状态。
启动Switchover后系统执行流程如下:
Failover
Failover在备机上执行,执行时要求备机实例处于OPEN状态,此时由于主机故障,备机的redo日志可能没有完全与主机同步,从而丢失数据,所以Failover后需要重置redo时间线,以便区别旧主机和新主机的redo日志。
启动Failover后系统执行流程如下:
# 级联备部署
级联备,即备机的备机,它和普通备机的区别是,普通备机从主机接收日志,而级联备从其上级备机接收日志。
当某个级联备的上级备机升为主机后,该级联备转为普通备机;当主机切换为备机后,它的备机将变成级联备。
级联备一般被应用到异地容灾部署中,如下图:
一个备机最多可连接32个级联备,级联备可以继续向下连接级联备,没有层数限制,但不可以成环连接。
关于级联备部署的详细操作请参考高可用部署的级联备配置描述。
级联备模式适用于单机部署,分布式部署中无需考虑此种模式。
主备切换
由于级联备未直接与主机连接,因此不能对其执行Switchover,只能执行Failover。但如果级联备的上级备机执行了Switchover,则该级联备的角色将发生变化,而主备切换以系统中当前的角色状态为准,如下图:
# 自动选举
自动选举是在一主多备的情况下,当主机节点发生异常不能对外服务时候,系统通过一定机制,在多个备机节点间选举一个节点提升为主机,其余节点依然为备机,旧的主机降级为备机。
在YashanDB中,是否启用自动选举通过开关控制,关闭时,主备切换由用户自行选择一个备机节点执行Switchover或者Failover;打开时,用户仍可自行选择一个备机节点执行Switchover,而当主机故障时,则由系统启动自动选举并执行Failover。
自动选举机制
YashanDB的自动选举基于Raft协议实现,采用Raft一致性算法中的选举算法:
- 每个Leader都有任期(Term),在没有故障时,任期是无限期的;
- Leader周期性向Follower发送心跳消息;
- Follower在一个选举超时时间内没有收到Leader的心跳消息则成为Candidate,发起预选举并增加任期;
- Candidate的投票请求被多数节点通过(赞成票)之后,将自己提升为主节点;
- Candidate投票未通过则进入下一轮选举直至当选为Leader或其它节点被选为Leader;
- 如果Leader接收到大于自己任期的心跳消息或投票请求,则降为Follower。
实现流程如下图所示:
Quorum机制
YashanDB的Raft选举算法在最大保护模式下启用了Quorum机制进行选主,主要规则为:
- 节点只给数据跟自己一样新,或者比自己更新的节点投票。
- candidate需要收到至少N-Quorum个节点的赞成票,才能保证自己的数据一定是最新的。
其中N为节点数量,Quorum为用户定义的同步备数量(默认值为MAJORITY)。
因此,自动选举同时满足Quorum机制和多数派的条件为:
- 要求赞成票大于等于N-Quorum
- 要求赞成票大于N/2
上述机制下,主副多节点构成了一个Raft集群,该集群需按指定要求预先搭建,且单机部署和分布式部署采用不同的搭建方式,具体操作请参考高可用部署的自动选举配置(单机)或分布式高可用部署(分布式)描述。
# CN多活部署
分布式部署中,在CN组部署多个节点,同时提供在线服务,可以提高CN服务的可靠性,当某个节点出现异常时,其他节点仍可用,对系统整体不构成影响。
关于CN多活部署的详细操作请参考分布式高可用部署描述。
同时,YashanDB支持对CN组进行在线扩缩容,让用户根据业务负载和资源状况对CN多节点能力进行灵活调整。
# 在线扩缩容
当某个备机节点由于本身故障或网络问题等因素导致不可用时,会影响HA的正常运行。因此YashanDB支持在线增删备机,可踢出问题节点,保障HA正常使用。
单机HA在线增删备机
单机部署中,通过在线更改配置参数(立即生效)即可完成主备集群的动态调整,但不允许在自动选举开启的模式下进行此项操作。具体操作步骤请查看单机备机扩缩容章节描述。
# 并行build备机
YashanDB支持在备机上发起build操作,进行备机的初始化。当新建一主多备,或者在线增加多个备机时,使用并行build可以大大提升部署效率。
并行build由主机指定多台备机发起build操作,主机同时向多台备机发送数据(满足主备部署允许的最大备机数据量限制),多台备机同时执行restore。级联备的并行build则由其上级备机发起。
本功能通过BUILD DATABASE语句实现,具体操作请参考其语法描述。
Note:
当主备处于最大保护模式下,备机全部断连,主机事务无法提交,执行build或者并行build会偶现卡主问题。
解决方法:手动切换为最大可用模式,待build执行完成之后酌情修改其他模式。