基本概念
可用性(availability)是系统能够正常运行的时间比例。经常用两次故障之间的时间长度或在出现故障时系统能够恢复正常的速度来表示。
可靠性(reliability)是软件系统在应用或系统错误面前,在意外或错误使用的情况下维持软件系统的功能特性的基本能力。
高可用性(High Availability)是指提供在本地系统单个组件故障情况下,能继续访问应用的能力,无论这个故障是业务流程、物理设施、IT软/硬件的故障。
MTBF(Mean Time Between Failure),系统平均正常运行时间
MTTR(Mean Time to Repair),系统平均恢复时间
可用性的计算公式: AVAILABILITY = MTBF / ( MTBF + MTTR ) × 100%
例如常提到的“5个9的可用性”即可用性(每年)99.999000%,故障时间(每年) 5.256分钟
DR(Disaster Recovery) 是指异地(同城或者异地)的高可用系统,表示在灾害发生时,数据、应用以及业务的恢复能力。
故障切换(failover),切换有两个维度的成本:RTO (Recovery Time Objective)和 RPO(Recovery Point Objective)。
RTO 是服务恢复的时间,最佳的情况是 0,这意味着服务立即恢复;最坏是无穷大意味着服务永远恢复不了;
RPO 是切换时向前恢复的数据的时间长度,0 意味着使用同步的数据,大于 0 意味着有数据丢失,比如 “RPO = 1 天”意味着恢复时使用一天前的数据,那么一天之内的数据就丢失了.
HA 和 DR区别
•从故障角度,HA 主要处理单组件的故障导致负载在集群内的服务器之间的切换,DR 则是应对大规模的故障导致负载在数据中心之间做切换。
•从网络角度,LAN 尺度的任务是 HA 的范畴,WAN 尺度的任务是 DR 的范围。
•从云的角度看,HA 是一个云环境内保障业务持续性的机制,DR是多个云环境间保障业务持续性的机制。
•从目标角度,HA 主要是保证业务高可用,DR 是保证数据可靠的基础上的业务可用。
常用的高可靠手段
•避免导致不可用的因素,减少不可用的时间
•监控告警:对硬件,软件,操作系统,服务等进行各项指标的监控告警。
•错误检测:服务状态,进程状态,命令/响应、心跳和异常等。
•备份/快照:对重要数据,配置等进行周期备份。
•增加系统冗余,避免单点故障,保障不可用时可以尽快恢复
•硬件基础设施冗余。交换机堆叠,网卡bond等。
•服务的冗余部署。集群,主从,主备等。
•故障转移:快速启用冗余或备用系统/服务。
常见服务冗余架构
双主模式中,两台服务是平等关系,同时对外提供读写服务,客户端任选一台即可。双主模式是可用性最好的,但是这种架构的一致性处理比较困难,需要两台服务进行双向数据同步。一旦它们之间的通信断开,就形成了网络分区,这种分区会带来脑裂(brain-split)问题,并且系统对此无解,必须人工介入。
主备模式中,两台服务不再是平等关系。主服务承担所有的读写请求,备服务只有在主服务不可用时才取而代之。主备服务之间虽然也存在两个方向的数据同步,但跟双主模式不同,它们不会同时发生。正常情况下只存在主向备同步数据。主不可用的时间段内,数据会写到备服务。当主恢复后,才需要由备向主同步数据。在此期间,会双写数据到主备节点,防止主同时再向备同步数据。主备架构比较容易实现,缺点是备服务在绝大部分时间是一种资源浪费。一般数据库系统在部署时会考虑主备架构。
主从模式其实不是主要解决高可用问题的,更多的是为了实现读写分离,来解决高并发问题。实际场景中通常不是一主一从,而是一主多从架构,因为大部分应用都是的读多写少。主节点处理写请求,从节点处理读请求。由于存在多从,读服务的可用性远高于写服务。另外,写服务会存在单点故障。这个问题可以通过集群动态选主来解决:当主节点不可用时,集群自动选出一台新的主节点。
来源:oschina
链接:https://my.oschina.net/u/4376318/blog/4814723