Windows Server 2012R2 集群故障自动转移高可用配置案例


Windows Server 2012R2 集群故障自动转移高可用配置案例

SQL Server 2012+AlwaysOn 实现数据库故障自动转移高可用

一、环境规划

  • 服务器信息

    • DC01:域控制器 (192.168.1.10)
    • SQL01:主数据库服务器 (192.168.1.11)
    • SQL02:辅助数据库服务器 (192.168.1.12)
  • 域名:corp.local

  • AlwaysOn 侦听器:AGListener (192.168.1.15)

二、域控制器配置(DC01)

  1. 安装 Active Directory 域服务
    • 打开「服务器管理器」→ 点击「添加角色和功能」
    • 点击「下一步」直到「服务器角色」,勾选「Active Directory 域服务」
    • 点击「添加功能」→ 连续点击「下一步」完成安装
    • 安装完成后,点击「将此服务器提升为域控制器」
    • 选择「添加新林」,输入根域名(如 corp.local)→ 点击「下一步」
    • 设置 Directory Services 还原模式密码 → 一路点击「下一步」直至安装完成
    • 服务器将自动重启
  2. 创建 SQL 服务账户
    • 重启后,打开「服务器管理器」→ 工具 →「Active Directory 用户和计算机」
    • 展开 corp.local → 右键「Users」→ 新建 → 用户
    • 姓名和用户登录名均输入 svc_sql → 点击「下一步」
    • 设置密码,取消勾选「用户下次登录时必须更改密码」,勾选「密码永不过期」
    • 点击「完成」创建账户
    • 右键新建的 svc_sql 账户 → 属性 → 隶属于 → 添加 → 输入「Domain Admins」→ 确定

三、数据库服务器准备(SQL01 和 SQL02 均执行)

  1. 将服务器加入域
    • 打开「服务器管理器」→ 点击「本地服务器」→ 点击「工作组」
    • 点击「更改」→ 选择「域」,输入 corp.local → 点击「确定」
    • 输入域管理员账号和密码 → 点击「确定」→ 重启服务器
  2. 安装 .NET Framework 3.5
    • 打开「服务器管理器」→ 「添加角色和功能」
    • 点击「下一步」至「功能」→ 勾选「.NET Framework 3.5 功能」
    • 点击「下一步」→ 安装 → 完成后关闭
  3. 安装故障转移集群功能
    • 打开「服务器管理器」→ 「添加角色和功能」
    • 点击「下一步」至「功能」→ 勾选「故障转移集群」
    • 点击「添加功能」→ 下一步 → 安装 → 完成后关闭
  4. 配置 SQL Server 服务账户
    • 打开「SQL Server 配置管理器」
    • 展开「SQL Server 服务」→ 右键「SQL Server (MSSQLSERVER)」→ 属性
    • 切换到「登录」选项卡 → 选择「此账户」→ 点击「浏览」
    • 输入 svc_sql → 检查名称 → 确定 → 输入密码 → 确定
    • 同样方法配置「SQL Server 代理 (MSSQLSERVER)」服务
    • 右键这两个服务 → 重启
  5. 启用 AlwaysOn 高可用性
    • 在 SQL Server 配置管理器中,右键「SQL Server (MSSQLSERVER)」→ 属性
    • 切换到「AlwaysOn 高可用性」选项卡 → 勾选「启用 AlwaysOn 可用性组」
    • 点击「确定」→ 点击「重启」服务

四、创建 Windows 故障转移集群

  1. 验证集群配置
    • 在 SQL01 上,打开「服务器管理器」→ 工具 →「故障转移集群管理器」
    • 点击「验证配置」→ 点击「下一步」→ 输入 SQL01 和 SQL02 → 添加 → 下一步
    • 选择「运行所有测试」→ 下一步 → 等待测试完成
    • 确保没有关键错误 → 关闭报告
  2. 创建集群
    • 在故障转移集群管理器中,点击「创建集群」→ 下一步
    • 输入 SQL01 和 SQL02 → 添加 → 下一步
    • 输入集群名称(如 SQLCluster)→ 输入 IP 地址(如 192.168.1.14)
    • 下一步 → 完成 → 确认集群创建成功

五、配置数据库镜像端点(SSMS 图形化操作)

  1. 在 SQL01 上创建端点

    • 打开 SQL Server Management Studio (SSMS) → 连接到 SQL01
    • 展开「服务器对象」→ 右键「端点」→「新建」→「数据库镜像端点」
    • 名称输入 Hadr_endpoint
    • 协议选择「TCP」→ 端口输入 5022
    • 角色选择「所有」→ 点击「确定」
  2. 配置端点权限

    • 展开「端点」→ 右键「Hadr_endpoint」→ 属性
    • 切换到「权限」页签 → 点击「搜索」→ 输入 svc_sql → 检查名称 → 确定
    • 授予「连接」权限 → 确定
  3. 在 SQL02 上重复以上步骤

  4. 最后配置文件共享见证(由于是就两台节点服务器,故障一台没办法投票,需要配置第三方仲裁见证。防脑裂)

    在 Windows Server 故障转移集群中,文件共享见证(File Share Witness)是仲裁机制的关键组件,其核心作用是为双节点或多节点集群提供 “额外投票权”,确保集群在部分节点故障时仍能判定 “多数存活”,避免因节点分裂导致的服务中断。

    • 配置文件共享见证

      1. 在共享存储或第三方文件服务器上创建一个空文件夹(如\\FileServer\ClusterWitness),设置读写权限给所有集群节点的计算机账户。
      2. 在故障转移集群管理器中,右键点击集群名称 → 配置集群仲裁设置选择仲裁见证配置文件共享见证,输入共享路径。
    • 验证仲裁状态

      执行以下 PowerShell 命令:

      powershell

      Get-ClusterQuorum
      

      确保输出包含 “File Share Witness” 且状态为 “Online”。

六、准备数据库(主服务器 SQL01 上操作)

  1. 设置数据库恢复模式
    • 在 SSMS 中,展开「数据库」→ 右键需要配置的数据库 → 属性
    • 选择「选项」→ 恢复模式选择「完整」→ 确定
  2. 备份数据库
    • 右键数据库 → 任务 → 备份 → 备份类型选择「完整」
    • 点击「添加」→ 指定备份路径和文件名 → 确定 → 点击「确定」完成备份
    • 再次右键数据库 → 任务 → 备份 → 备份类型选择「事务日志」
    • 同样方法备份事务日志
  3. 在 SQL02 上还原数据库
    • 在 SSMS 中连接到 SQL02 → 右键「数据库」→ 还原数据库
    • 选择「设备」→ 点击「...」→ 添加 → 选择在 SQL01 上创建的完整备份
    • 勾选「还原」→ 切换到「选项」页签
    • 勾选「覆盖现有数据库」和「RESTORE WITH NORECOVERY」
    • 点击「确定」完成还原
    • 同样方法还原事务日志(同样选择 WITH NORECOVERY)

七、创建可用性组

  1. 启动新建可用性组向导
    • 在 SQL01 的 SSMS 中,展开「AlwaysOn 高可用性」
    • 右键「可用性组」→ 新建可用性组向导 → 下一步
    • 输入可用性组名称(如 AG_ProdDB)→ 下一步
  2. 选择数据库
    • 勾选需要加入可用性组的数据库(状态必须为「符合条件」)
    • 下一步
  3. 指定副本
    • 点击「添加副本」→ 连接到 SQL02 → 确定
    • 在副本列表中,选择 SQL01 → 可用性模式选择「同步提交」→ 故障转移模式选择「自动故障转移」
    • 选择 SQL02 → 同样设置为「同步提交」和「自动故障转移」
    • 下一步
  4. 配置端点
    • 确保两个副本的端点 URL 正确(TCP:// 服务器名:5022)
    • 下一步
  5. 选择初始数据同步
    • 选择「自动种子设定」(如果数据库不大)或「完整数据库和日志备份」
    • 指定备份共享路径(确保两台服务器都能访问)
    • 下一步
  6. 创建可用性组侦听器
    • 点击「添加」→ 输入侦听器 DNS 名称(如 AGListener)
    • 端口输入 1433 → 选择「静态 IP」→ 点击「添加」
    • 输入 IP 地址(如 192.168.1.15)、子网掩码 → 确定
    • 下一步 → 验证 → 完成 → 关闭
  7. 验证配置
    • 展开可用性组 → 查看数据库状态应为「已同步」
    • 确认侦听器已创建并在线

八、故障转移测试

  1. 手动故障转移测试
    • 在 SSMS 中,右键可用性组 → 故障转移 → 下一步
    • 选择目标副本(SQL02)→ 下一步 → 连接 → 完成
    • 验证:
      • 可用性组主副本已切换到 SQL02
      • 应用程序通过 AGListener 仍能连接数据库
    • 执行反向故障转移,将主副本切换回 SQL01
  2. 自动故障转移测试
    • 确保应用程序通过 AGListener 连接数据库并持续访问
    • 登录到当前主服务器(SQL01)
    • 打开「服务」→ 找到「SQL Server (MSSQLSERVER)」→ 右键「停止」
    • 观察:
      • 故障转移集群管理器中,资源会自动转移到 SQL02
      • SSMS 中查看可用性组,主副本已自动切换到 SQL02
      • 应用程序应无缝切换,无需手动干预
    • 启动 SQL01 上的 SQL Server 服务,验证其作为辅助副本重新加入
  3. 服务器故障测试
    • 确保当前主副本为 SQL01
    • 登录到 SQL01 → 打开命令提示符 → 输入 shutdown /s /t 0 关闭服务器
    • 观察:
      • 集群会检测到服务器故障
      • 自动将主副本角色转移到 SQL02
      • 应用程序可通过侦听器继续访问数据库
    • 重启 SQL01,验证其作为辅助副本重新加入可用性组
教程