SQL Server Always On AG 运维(Windows 和 Linux)
SQL Server难度: 高级耗时: 15–90 分钟(视场景而定)这不是安装指南,而是已安装的 Always On 可用性组的日常运维与故障场景:健康检查、延迟和日志增长诊断、计划内故障转移、强制故障转移(FORCE_FAILOVER_ALLOW_DATA_LOSS)及其后续处理、挂起/恢复数据移动、同步/异步模式、添加数据库(自动种子设定或备份/还原)、添加/删除副本、只读路由和侦听器变更。Windows 上使用 WSFC 命令,Linux 上使用 Pacemaker(pcs)命令。
在场景卡片中选择要执行的操作;也可以把错误号(例如 9002、35264、41142)输入目录搜索,直接打开相关场景。如果还没有 AG:AG (Windows) 或 AG (Linux)。
架构: 2–9 个副本的 AG(Windows WSFC 或 Linux Pacemaker)
场景
- AG 健康检查(仪表板查询) — 一切是否正常?副本/数据库状态、故障转移就绪情况、群集以及最近的角色变更。不做任何更改。
- 辅助副本落后 / 日志文件增长(延迟诊断) — send/redo 队列在增长、辅助副本上的数据陈旧、主副本上的日志即将写满(log_reuse_wait = AVAILABILITY_REPLICA),或者提交变慢(HADR_SYNC_COMMIT)。
- 计划内故障转移(switchover,无数据丢失) — 为维护、打补丁或测试,把主副本切换到一个同步提交且处于 SYNCHRONIZED 状态的辅助副本;中断几秒钟,无数据丢失。
- 主副本丢失:强制故障转移(FORCE_FAILOVER_ALLOW_DATA_LOSS) — 主副本(或整个站点/群集仲裁)丢失且无法等待:接受数据丢失,把一个辅助副本提升为主副本;然后比对数据并恢复其他副本。
- 挂起 / 恢复数据移动(SUSPEND / RESUME) — 暂时停止向辅助副本发送数据(网络维护、批量操作),或恢复卡在 SUSPENDED 状态的数据库。
- 更改同步 / 异步模式 — 将副本在 SYNCHRONOUS_COMMIT 和 ASYNCHRONOUS_COMMIT 之间切换(远程站点、慢速网络、DR 演练),并配置提交保护(REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT)。
- 向 AG 添加数据库(自动种子设定或备份/还原) — 把新的或现有的数据库加入 AG:中小型数据库使用自动种子设定,大型数据库或网络较慢时从备份初始化。
- 添加副本(节点) — 向 AG 添加新的辅助副本:节点加入群集,准备端点,ADD REPLICA + JOIN,数据库通过种子设定同步过来。
- 删除副本(节点) — 从 AG 和群集中删除一个将要下线或重建的辅助副本。
- 只读路由(read-only routing) — 将 ApplicationIntent=ReadOnly 连接通过侦听器路由到可读辅助副本(把报表负载从主副本卸载)。
- 创建或修改侦听器(IP、端口) — 没有侦听器时创建它,修改其端口,或(Windows 上)为第二个子网添加 IP。
开始之前
- 每个节点上都有 sqlcmd(/opt/mssql-tools18/bin/sqlcmd),… 为 sysadmin;具有 root 权限(pcs)。密码:read -rsp 'Password: ' SQLCMDPASSWORD; export SQLCMDPASSWORD 和 sudo --preserve-env=SQLCMDPASSWORD bash <script>.sh。
- 已用一个在 SQL Server 中为 sysadmin、在 WSFC 中为管理员的域帐户以管理员身份打开 PowerShell;sqlcmd 和 FailoverClusters 模块可用。
- 表单中副本列表的第 1 行是当前主副本(用健康检查的第一个查询确认);各步骤会按此顺序放到正确的节点上。
- 变更窗口已批准,并已通知应用团队…:侦听器会中断几秒钟,未完成的事务会回滚……:端口/IP 变更会影响连接字符串…。
- 强制故障转移的决定由授权人员作出,且已接受数据丢失:主副本无法访问,并且在合理时间内不会恢复。如果主副本能够恢复,等待或执行计划内故障转移总是更好的选择。
指南阶段
- AG 健康检查 — AG 仪表板:副本、数据库、故障转移就绪情况 · 群集状态(WSFC) · 群集状态(Pacemaker) · 最近的角色变更(AlwaysOn_health)
- 延迟和日志增长诊断 — 诊断:队列、速率和预计追平时间(主副本) · 诊断:提交等待(主副本) · 诊断:redo 是否被阻塞?(在辅助副本上) · 解决方案和日志检查
- 计划内故障转移 — 诊断:目标是否已做好故障转移准备?(…) · 安全检查:是否有长事务或正在运行的作业?(主副本) · 故障转移:让 … 成为主副本(T-SQL) · 故障转移:让 … 成为主副本(pcs) · 验证:新的主副本和侦听器
- 强制故障转移(可能丢失数据) — 诊断:目标状态和可能的数据丢失(…) · 强制启动 WSFC 仲裁(…) · 停止 Pacemaker 对 AG 资源的管理(…) · 强制故障转移:让 … 成为主副本 · 验证:新的主副本已打开,其他副本为 SUSPENDED · 在旧主副本上创建快照以找回丢失的数据(…,恢复后) …
- 挂起 / 恢复数据移动 — 诊断:已挂起的数据库及原因 · …挂起数据移动(SUSPEND)…恢复数据移动(RESUME)… · 验证并监视
- 更改可用性模式 — 诊断:当前模式和提交保护 · … → … · 配置提交保护(Windows) · 配置提交保护(Pacemaker) · 验证
- 向 AG 添加数据库 — 诊断:数据库是否符合加入 AG 的条件?(主副本) · 准备:FULL 恢复模式和备份(主副本) · 将副本切换为手动种子设定(主副本) · 将数据库添加到 AG(主副本) · 监视种子设定(主副本) · 在辅助副本上从备份准备(NORECOVERY):… …
- 添加副本 — 将新节点添加到 WSFC(主副本) · 启用 Always On(新节点) · 创建端点并授权(新节点) · 准备新节点:HA 代理、Always On、群集软件 · 将端点证书复制到新节点(主副本) · 证书、端点和 Pacemaker 登录名(新节点) …
- 删除副本 — 诊断:要删除的副本和剩余配置 · 从 Pacemaker 群集中删除节点(主副本) · 从 AG 中删除副本(主副本) · 从 WSFC 中删除节点(可选) · 清理已删除节点上的 RESTORING 数据库(…)
- 只读路由 — 诊断:读取访问和当前路由 · 定义路由 URL 和列表(主副本) · 验证:路由列表 · 测试:ReadOnly 连接被路由到哪里? · 测试:ReadOnly 连接被路由到哪里?
- 侦听器 — 诊断:现有侦听器 · 创建虚拟 IP 资源和约束(Pacemaker) · …创建侦听器…修改侦听器端口…向侦听器添加 IP…(主副本) · 防火墙和 DNS 设置 · 防火墙设置 · 验证:通过侦听器连接