数据库作为系统建设中的关键之一,其高可用性一直是系统设计的重要环节。同时,由于数据库是有状态的,因此数据库的高可用有其天生的复杂性。本节将深入浅出、循序渐进地带领读者了解PostgreSQL的高可用技术。
IT 系统在设计之初都会对软件、硬件进行高可用设计,使系统能够从故障中快速恢复正常。高可用,一般指一个整体系统内部的不同服务在受软、硬件故障影响的情况下,对外提供不间断服务的能力,是一种系统内部服务的容错能力。
系统内部故障形式不同,例如应用程序、操作系统,以及服务器、路由器等硬件故障都可能会导致服务中断。对一个系统来说,根据部署规模的不同,异常的影响程度也会不同。但是归根结底,单点始终是系统高可用最大的风险,应该在系统设计的过程中避免单点。
假设一个系统全年都能正常提供服务,那么就可以说这个系统的可用性是100%。但这是在理想状态下。一般都用几个“9”来表示系统的可用性,99.99%表示可用性较高,“9”越多,代表可用性越高。高可用要避免使用单点,而数据库的高可用就是用多个实例组成集群,来解决数据的冗余问题。
恢复时间目标(Recovery Time Objective,RTO)指在故障或灾难发生后,硬件设备或软件服务停止工作的最大可承受时间。RTO 定义了最大容忍时限,必须在此时限内恢复数据。如果说系统需要在灾难发生后的24h内恢复,那么RTO就是24h。RTO也是从故障发生后,系统宕机导致业务中断的那一刻开始,到系统恢复至可以支持各业务正常运作的时间间隔。RTO 是反映系统业务恢复时间的指标,RTO 数值越小,代表容灾系统的数据恢复能力越强。
恢复点目标(Recovery Point Object,RPO)是一个过去的时间点,即当灾难或紧急事件发生时,数据可以恢复到的时间点。例如,每天03:00进行数据备份,如果今天发生了宕机,那么数据可以恢复到的时间点(RPO)就是今天 03:00;如果 05:00 发生了灾难或宕机事件,那么损失的就是 2h 内所产生的数据。RPO 指的是用户允许损失的最大数据量。RPO指标主要反映了业务连续性管理体系下备用数据的有效性,即RPO取值越小,表示系统对数据完整性的保证能力越强。
服务等级协议(Service Level Agreement,SLA)指提供服务的企业与客户之间就服务的品质、水准、性能等方面达成的双方共同认可的协议。
不同公司的不同业务类型对服务等级的要求也不一样,金融类型和互联网类型业务对服务等级的要求较高,其他类型业务,比如统计分析、离线分析等非实时业务系统,对服务等级的要求比金融类型和互联网类型业务低。
服务可用性越低,停机时间越长,可能造成的损失也越大。在IT系统建设过程中,要尽可能地提升SLA服务等级,如表1-1所示。
表1-1 SLA服务等级
续表
平均无故障时间(Mean Time To Failure,MTTF)指系统无故障运行的平均时间,取所有从系统开始正常运行到发生故障之间的时间段的平均值。
平均修复时间(Mean Time To Repair,MTTR)指系统从发生故障到维修结束之间的时间段的平均值。
平均失效间隔(Mean Time Between Failure,MTBF)指系统发生两次故障时间之间的时间段的平均值。