一:高可用性简介
今天越来越多的公司都希望一部分或者所有的关键数据是高可用性的。比如在线交易支付系统,在线订单销售系统,物流运输管理系统等等需要有"24x7"在线支持服务,否则就有可能会有销售额的减少或者利润的损失。
在理想情况下,关键数据应该一直可用,这样业务系统才会一直处于可用状态,并且不能威胁到可用性。但是在实际情况下,会有很多的异常情况导致数据不可用(如DB异常挂掉,数据操作误删,Server软硬件故障等)。因此就要寻求一种可用性的解决方案,来解决由异常带来的数据临时不可用的问题。
和灾难恢复(Disaster Recovery)不同。灾难恢复是在DB发生故障之后(宕机导致数据丢失,数据误删等),通过数据恢复, 使丢失的数据重新可用;高可用性是在数据发生故障之前,为避免对数据的可用性造成影响而使数据处于可用状态的一种解决方案。
二: DOWNTIME和Data Loss的原因
1. 计划内的停工期,不会导致数据丢失
(1) DB维护
数据备份
创建或者重建索引
数据收缩
停机维护(在非工作时间)
(2) 批处理操作
一次查询大量的数据
Table被锁或死锁
(3) DB升级
硬件升级(CPU,RAM,HDD,NetWork…)
软件升级(OS, Microsoft upgrade, SQL Server版本升级)
2. 计划外的停工期,会导致数据丢失
(1) 数据中心故障
会导致整个的系统无法使用
(2) Server故障
软件故障(OS, SQL Server服务启动失效)
硬件故障(CPU, RAM,HDD,NetWork)
(3) IO子系统故障
硬盘故障
RAID控制器故障
IO阻塞
(4) 人为失误
数据误操作
三:高可用性的解决方案
目前我所熟悉的SQL Server 2008提供的高可用性解决方案大致有以下几个,对架构和使用方式做一个总结, 提出一点浅见:
1. Database Snapshots(数据库快照)
2. Log Shipping(日志传送)
3. Database Replication(数据库复制)
4. Database Mirroring(数据库镜像)
5. Failover Clustering(群集故障转移)