← 目录从入门到精通SQL Server

高可用与灾难恢复

2024/10/22

SQL Server 高可用与灾难恢复

在现代企业的数据库管理中,数据的高可用性与灾难恢复能力至关重要,以确保业务的连续性和数据的安全性。SQL Server 提供了多种高可用性与灾难恢复(High Availability and Disaster Recovery, HADR)技术,包括数据库镜像、日志传送和 AlwaysOn 可用性组等。本文将详细讲解这些 HADR 技术的工作原理、配置步骤及使用场景,帮助您构建稳健的数据保护策略。


1. 数据库镜像

数据库镜像概述

数据库镜像(Database Mirroring)是一种实现数据库高可用的技术,通过在两个服务器实例之间创建一个数据库的同步或异步副本,确保数据库发生故障时能够快速恢复。数据库镜像有以下几种运行模式:

  • 高安全模式(同步模式):主、副数据库实时同步,确保数据一致性。
  • 高性能模式(异步模式):副本异步复制,适用于对性能要求较高但允许一定数据延迟的场景。

配置数据库镜像

1. 启用数据库镜像的先决条件

  • SQL Server 实例需在同一域中。
  • 数据库的恢复模式需设置为 FULL(完整恢复模式)。
  • 数据库需要先完成一次完整备份和事务日志备份。

2. 数据库镜像的配置步骤

sql
-- 在主服务器上进行完整备份和事务日志备份
BACKUP DATABASE SampleDB TO DISK = 'D:\Backups\SampleDB.bak';
BACKUP LOG SampleDB TO DISK = 'D:\Backups\SampleDB_log.bak';

-- 将备份文件复制到镜像服务器上

在镜像服务器上恢复备份:

sql
RESTORE DATABASE SampleDB FROM DISK = 'D:\Backups\SampleDB.bak' WITH NORECOVERY;
RESTORE LOG SampleDB FROM DISK = 'D:\Backups\SampleDB_log.bak' WITH NORECOVERY;

3. 启动数据库镜像

在主服务器和镜像服务器分别启用数据库镜像:

sql
ALTER DATABASE SampleDB SET PARTNER = 'TCP://MirrorServer:5022';
ALTER DATABASE SampleDB SET PARTNER = 'TCP://PrincipalServer:5022';

4. 监控数据库镜像

通过 SQL Server Management Studio(SSMS)中的镜像监视器,您可以查看镜像状态、延迟以及故障转移情况。


2. 日志传送

日志传送概述

日志传送(Log Shipping)是一种常用的灾难恢复方案,通过定期将主数据库的事务日志备份传送到一个或多个副本服务器上并进行还原,实现数据的异地备份。

日志传送的主要组件

  • 主数据库:生成事务日志并传输给次级数据库。
  • 次级数据库:从主数据库获取事务日志备份,并按时还原。
  • 监视服务器:监控日志传送状态和各组件的连接情况。

配置日志传送

1. 配置前的准备

确保数据库恢复模式为 FULL。

sql
ALTER DATABASE SampleDB SET RECOVERY FULL;

2. 配置日志传送计划

在 SSMS 中:

  1. 右键点击目标数据库,选择“任务” -> “日志传送配置”。
  2. 设置备份路径及备份间隔。
  3. 配置副本服务器并指定还原路径和还原时间间隔。
  4. 添加监视服务器以监控日志传送状态。

3. 日志传送的监控与管理

日志传送管理器提供自动化的监控和报警功能,如果检测到传送失败或延迟超出设定阈值,会触发警报以便管理员及时处理。


3. AlwaysOn 可用性组

AlwaysOn 可用性组概述

AlwaysOn 可用性组(AlwaysOn Availability Groups)是 SQL Server 高可用和灾难恢复的高级解决方案。通过将一组数据库置于主副本服务器之间的同步或异步复制中实现 HADR 功能,适用于高并发访问、数据保护要求高的场景。

AlwaysOn 的主要组件

  • 主副本(Primary Replica):主副本负责处理应用程序的读写请求。
  • 次要副本(Secondary Replicas):可以配置多个次要副本,用于读操作或灾难恢复。
  • 监听器(Listener):为应用程序提供一个单一的连接端点,以自动连接到可用的主副本。

配置 AlwaysOn 可用性组

1. 启用 AlwaysOn 功能

在 SQL Server 配置管理器中:

  • 打开“SQL Server 服务”,右键点击 SQL Server 实例,选择“AlwaysOn 可用性组”。
  • 勾选“启用 AlwaysOn 可用性组”。

2. 配置 AlwaysOn 可用性组

  1. 在 SSMS 中创建新的可用性组。
  2. 选择需要包含的数据库,设置同步或异步副本。
  3. 配置可用性监听器,以便客户端自动连接。

3. 示例代码:创建可用性组

以下示例代码展示了通过 T-SQL 创建 AlwaysOn 可用性组:

sql
CREATE AVAILABILITY GROUP [AG_SampleGroup]
FOR DATABASE SampleDB
REPLICA ON 'PrimaryServer' WITH (
    ENDPOINT_URL = 'TCP://PrimaryServer:5022',
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    FAILOVER_MODE = AUTOMATIC),
'SecondaryServer' WITH (
    ENDPOINT_URL = 'TCP://SecondaryServer:5022',
    AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
    FAILOVER_MODE = AUTOMATIC);

4. AlwaysOn 的监控与故障转移

AlwaysOn 提供自动故障转移和手动故障转移功能,管理员可在 SSMS 中监视可用性组的健康状况、同步状态和延迟情况。


4. 比较与选择适合的 HADR 方案

功能 数据库镜像 日志传送 AlwaysOn 可用性组
同步支持 是 否 是
故障转移方式 自动或手动 手动 自动或手动
适用场景 高可用性、灾难恢复 灾难恢复 高并发、高可靠性、高可用性
支持多个副本 否 是 是
读操作 不支持 不支持 支持(在只读副本上)
使用复杂度 中等 简单 高

选择建议

  • 如果需要高可用性并且支持自动故障转移,可以选择 AlwaysOn 可用性组。
  • 如果仅需灾难恢复且操作相对简单,可以选择 日志传送。
  • 若仅需要单个副本的高可用性方案,可以选择 数据库镜像。

5. 总结

SQL Server 提供了丰富的高可用性与灾难恢复技术,包括数据库镜像、日志传送和 AlwaysOn 可用性组。通过合理选择和配置这些技术,能够有效提升数据库的容错性和可用性,为企业的核心业务提供可靠的数据保护。