SQL Server Always On 可用性组
建立在 Windows Server 故障转移集群(WSFC)之上的数据库级高可用方案:把一组数据库作为单元复制到多个副本,同步提交副本在主库故障时可自动故障转移且不丢数据,异步副本用于异地容灾。客户端通过监听器(Listener)连接统一入口,副本切换后不需要改连接串。
基本信息
| 适用平台 | SQL Server(Standard 版与 Enterprise 版能力有差异) |
|---|---|
| 依赖组件 | Windows Server 故障转移集群(WSFC) |
| 复制模式 | 同步提交(零丢失、影响写延迟)与异步提交 |
| 入口 | 监听器提供统一连接端点,切换后无需改连接串 |
典型使用场景
- 同城双机房主备:同步副本保证核心库零丢失切换
- 异地灾备:异步副本作为跨地域的容灾节点
- 只读分流:把报表与查询流量导向可读的辅助副本
- 补丁与升级:把副本逐个滚动更新,减少停机时间
- 故障转移演练:手动切换验证应用是否能自动重连
查看副本与同步状态
查看副本与同步状态
-- 可用性组与副本配置
SELECT ag.name AS ag_name, ar.replica_server_name,
ar.availability_mode_desc, ar.failover_mode_desc
FROM sys.availability_groups ag
JOIN sys.availability_replicas ar ON ag.group_id = ar.group_id;
-- 数据库级别的同步状态与健康度
SELECT ag.name, drs.database_id, drs.synchronization_state_desc,
drs.synchronization_health_desc, drs.log_send_queue_size
FROM sys.dm_hadr_database_replica_states drs
JOIN sys.availability_groups ag ON drs.group_id = ag.group_id;
-- 手动故障转移(同步提交副本、无数据丢失)
ALTER AVAILABILITY GROUP [AG_AppDB] FAILOVER;状态读法
| 字段 | 含义 | 异常表现 |
|---|---|---|
| synchronization_state_desc | 副本同步状态 | SYNCHRONIZING 表示未追平,此时不能零丢失切换 |
| synchronization_health_desc | 同步健康度 | NOT_HEALTHY 需立即排查 |
| availability_mode_desc | 提交模式 | 期望同步但显示异步,切换会丢数据 |
| log_send_queue_size | 待发送日志量 | 持续增长说明副本落后或网络受限 |
可用性组是数据库级保护:登录名、作业、链接服务器、维护计划等实例级对象需要额外的同步策略,否则故障转移后会出现『连得上但权限与调度缺失』。
异步副本不能当零丢失方案:故障转移时会丢数据,必须评估丢失量与业务容忍度,并明确区分自动与手动转移的条件。