Windows Server 2016 + SQL Server 2016 搭建 AlwaysOn 集群详细步骤

一、环境规划与准备(详细版)
1.1 服务器角色规划

服务器名称 角色 操作系统 配置要求
DC01 域控制器 Windows Server 2016 2CPU, 4GB 内存,100GB 磁盘
SQL01 主数据库服务器 Windows Server 2016 4CPU, 8GB 内存,200GB 磁盘
SQL02 辅助数据库服务器 Windows Server 2016 4CPU, 8GB 内存,200GB 磁盘
Witness 见证服务器(可选) Windows Server 2016 2CPU, 4GB 内存,50GB 磁盘
1.2 网络配置详情
1. 所有服务器必须在同一子网
2. 每台服务器配置静态 IP
3. 示例网络配置:
1. DC01: IP=192.168.1.10, 子网掩码 = 255.255.255.0, DNS=127.0.0.1
2. SQL01: IP=192.168.1.11, 子网掩码 = 255.255.255.0, DNS=192.168.1.10
3. SQL02: IP=192.168.1.12, 子网掩码 = 255.255.255.0, DNS=192.168.1.10
4. 集群 IP: 192.168.1.15
5. 可用性组 IP: 192.168.1.16
1.3 域环境准备
1. 在 DC01 上安装 Active Directory 域服务
1. 打开服务器管理器 > 添加角色和功能
2. 选择 "Active Directory 域服务"
3. 安装完成后,点击 "将此服务器提升为域控制器"
4. 创建新林,输入域名(如contoso.com)
5. 设置 Directory Services 还原模式密码
6. 完成安装并重启
1. 创建必要的域账户
1. 登录 DC01,打开 "Active Directory 用户和计算机"
2. 创建一个组织单位(如 SQLServers)
3. 在该 OU 下创建以下用户:
1. SQLService: 用于 SQL Server 服务 (密码设为永不过期)
2. ClusterAdmin: 用于集群管理 (添加到 Domain Admins 组)
1. 将 SQL 服务器加入域
1. 在 SQL01 和 SQL02 上:
1. 右键 "此电脑" > "属性" > "更改设置" > "更改"
2. 选择 "域",输入contoso.com
3. 输入域管理员凭据
4. 重启服务器
二、配置 Windows Server 环境(详细步骤)
2.1 安装故障转移集群功能
1. 在 SQL01 和 SQL02 上:
1. 打开服务器管理器 > 添加角色和功能
2. 点击下一步直到 "功能" 页面
3. 勾选 "故障转移集群" 和 "故障转移集群管理工具"
4. 点击 "添加功能",然后完成安装
1. 验证故障转移集群安装

Get-WindowsFeature Failover-Clustering
1. 打开 PowerShell,执行以下命令:
2. 确保 "Installed State" 显示为 "Installed"
2.2 配置防火墙规则
在所有 SQL 服务器上配置:
1. 打开 "Windows 防火墙高级安全"
2. 入站规则 > 新建规则
3. 选择 "端口" > 下一步
4. 选择 "TCP",输入特定本地端口:1433, 5022, 3343
5. 允许连接 > 下一步
6. 选择适用的网络(域、专用、公用)
7. 命名为 "SQL AlwaysOn 端口" > 完成
2.3 配置磁盘(如有共享存储)
1. 确保共享存储(如 iSCSI)已连接到所有节点
2. 打开 "服务器管理器" > "文件和存储服务" > "磁盘"
3. 右键识别到的磁盘 > "联机"
4. 初始化磁盘(GPT 格式)
5. 创建卷,不要分配驱动器号,只格式化(NTFS)
三、SQL Server 2016 安装(详细步骤)
3.1 安装前准备
1. 在 SQL01 和 SQL02 上安装必要组件:

Install-WindowsFeature NET-Framework-45-Core, WindowsPowerShell, WoW64-Support
1. 下载并安装最新的 Windows 更新
3.2 安装 SQL Server 2016
1. 挂载 SQL Server 2016 安装介质,运行 setup.exe
2. 在左侧菜单选择 "安装"
3. 选择 "全新 SQL Server 独立安装或向现有安装添加功能"
4. 输入产品密钥 > 下一步
5. 接受许可条款 > 下一步
6. 在 "全局规则" 检查完成后 > 下一步
7. 选择 "使用 Microsoft Update 检查更新" > 下一步
8. 在 "安装规则" 通过后 > 下一步
9. 功能选择(关键步骤):
1. 勾选 "数据库引擎服务"
2. 勾选 "SQL Server 复制"(可选)
3. 勾选 "全文和语义提取搜索"
4. 勾选 "管理工具 - 完整"
5. 点击 "下一步"
1. 实例配置:
1. 选择 "默认实例" 或命名实例
2. 确认实例根目录 > 下一步
1. 服务器配置(关键步骤):
1. 在 "服务账户" 标签:
1. SQL Server 数据库引擎:选择域账户 contoso\SQLService
2. SQL Server 代理:同样选择 contoso\SQLService
3. 设置启动类型为 "自动"
2. 在 "collation" 标签:保持默认或根据需求选择 > 下一步
1. 数据库引擎配置(关键步骤):
1. "服务器配置" 标签:
1. 选择 "混合模式"
2. 设置 SQL Server 系统管理员 (sa) 密码
3. 点击 "添加当前用户"(确保是域管理员)
4. 点击 "添加",添加 contoso\SQLService 账户
2. "数据目录" 标签:可更改数据文件、日志文件和备份的位置
3. 其他标签保持默认 > 下一步
1. 完成剩余步骤,等待安装完成 > 关闭
四、启用 AlwaysOn 可用性组(详细步骤)
4.1 配置 SQL Server 服务
1. 在 SQL01 和 SQL02 上打开 "SQL Server 配置管理器"
2. 展开 "SQL Server 网络配置" > 点击 "[实例名] 的协议"
3. 确保 "TCP/IP" 已启用
4. 展开 "SQL Server 服务"
5. 右键点击 "SQL Server ([实例名])" > "属性"
6. 切换到 "AlwaysOn 高可用性" 标签:
1. 勾选 "启用 AlwaysOn 可用性组"
2. 确认 "Windows 故障转移集群名称" 已正确显示
3. 点击 "确定",出现提示时点击 "是" 重启服务
4.2 验证 AlwaysOn 启用状态
1. 打开 SQL Server Management Studio (SSMS)
2. 连接到 SQL01 实例
3. 右键点击服务器名称 > "属性"
4. 选择 "高级"
5. 查看 "AlwaysOn 可用性组" 属性,确认值为 "True"
4.3 创建数据库备份(关键步骤)
AlwaysOn 要求数据库必须有完整备份才能加入可用性组:
1. 在 SSMS 中,连接到主服务器 (SQL01)
2. 创建一个测试数据库(或使用现有数据库):

CREATE DATABASE AlwaysOnDB;
GO
1. 对数据库进行完整备份:

BACKUP DATABASE AlwaysOnDB
TO DISK = 'C:\Backup\AlwaysOnDB_Full.bak'
WITH INIT;
GO
1. 进行事务日志备份:

BACKUP LOG AlwaysOnDB
TO DISK = 'C:\Backup\AlwaysOnDB_Log.trn'
WITH INIT;
GO
五、创建故障转移集群(详细步骤)
5.1 验证集群配置
1. 在 SQL01 上,打开 "故障转移集群管理器"
2. 点击 "验证配置" > 下一步
3. 输入要加入集群的服务器名称(SQL01, SQL02)> 下一步
4. 选择 "运行所有测试" > 下一步 > 下一步
5. 等待测试完成,查看 "报告摘要"
1. 警告可以忽略,但必须解决所有错误
2. 常见问题:网络连接、防火墙、权限问题
5.2 创建集群
1. 在故障转移集群管理器中,点击 "创建集群" > 下一步
2. 输入服务器名称(SQL01, SQL02)> 下一步
3. 验证通过后 > 下一步
4. 输入集群名称(如 SQLCluster)和 IP 地址(192.168.1.15)> 下一步
5. 取消勾选 "立即验证集群" > 下一步
6. 完成集群创建 > 关闭
5.3 验证集群状态
1. 在故障转移集群管理器中,展开集群名称
2. 点击 "节点",确认所有节点状态为 "正常"
3. 点击 "存储",确认磁盘状态正常(如有)
4. 点击 "网络",确认网络状态正常
六、配置 AlwaysOn 可用性组(详细步骤)
6.1 新建可用性组
1. 在 SSMS 中,连接到 SQL01
2. 展开 "服务器对象" > 右键点击 "可用性组" > "新建可用性组向导" > 下一步
3. 输入可用性组名称(如 AG1)> 下一步
4. 选择数据库(关键步骤):
1. 勾选之前创建的数据库(AlwaysOnDB)
2. 注意:只有符合条件的数据库才会显示(必须有完整备份)
3. 点击 "下一步"
1. 指定副本(关键步骤):
1. 点击 "添加副本"
2. 在 "连接到服务器" 对话框中,输入 SQL02 > 连接
3. 现在应该有两个副本:SQL01 和 SQL02
4. 对于每个副本,设置:
1. 可用性模式:同步提交(适用于近距离节点)
2. 故障转移模式:自动(仅同步提交模式可用)
5. 点击 "下一步"
1. 配置端点(关键步骤):
1. 确保端点 URL 格式正确:TCP:// 服务器名:5022
2. 确认 "连接" 列显示 "已连接"
3. 点击 "下一步"
1. 选择初始数据同步(关键步骤):
1. 选择 "自动种子设定"(最简单的方式)
2. 或选择 "备份和还原",并指定共享文件夹(如 \DC01\SQLBackup)
3. 确保 SQLService 账户对共享文件夹有读写权限
4. 点击 "下一步"
1. 验证:
1. 确保所有验证项通过 > 下一步
2. 点击 "完成" 开始创建可用性组
3. 等待创建完成 > 关闭
6.2 创建可用性组侦听器
1. 在 SSMS 中,展开 "可用性组" > 右键点击 AG1 > "属性"
2. 选择 "侦听器" > "添加"
3. 输入侦听器 DNS 名称(如 AGListener)
4. 选择 "静态 IP" > "添加"
5. 选择网络 > 输入 IP 地址(192.168.1.16)和子网掩码 > "确定"
6. 端口保持默认 1433 > "确定" > "确定"
七、测试与验证(详细步骤)
7.1 验证数据库同步
1. 在 SSMS 中,展开 AG1 > "可用性数据库"
2. 确认 AlwaysOnDB 在主副本上显示 "主,已同步"
3. 在辅助副本上显示 "辅助,已同步"
7.2 测试数据同步
1. 在主副本 (SQL01) 上对数据库执行插入操作:

USE AlwaysOnDB;
GO
CREATE TABLE TestTable (ID INT, Name NVARCHAR(50));
INSERT INTO TestTable VALUES (1, 'Test Data');
GO
1. 在辅助副本 (SQL02) 上查询:

USE AlwaysOnDB;
GO
SELECT * FROM TestTable;
应该能看到相同的数据
7.3 测试自动故障转移
1. 在故障转移集群管理器中,展开集群 > "角色"
2. 右键点击 AG1 > "移动" > "最佳可能节点"
3. 观察故障转移过程,状态会从 "正在移动" 变为 "正常"
4. 在 SSMS 中确认角色已切换,SQL02 变为 "主" 角色
5. 故障转移回 SQL01:
1. 右键点击 AG1 > "移动" > "选择节点" > 选择 SQL01
2. 确认故障转移成功
7.4 测试侦听器连接
1. 打开新的 SSMS 窗口
2. 服务器名称输入侦听器名称(AGListener)
3. 使用 SQL 身份验证(sa 账户)或 Windows 身份验证连接
4. 确认能够成功连接
八、常见问题及解决方案
8.1 集群验证失败
5. 问题:网络测试失败
解决:检查防火墙规则,确保所有必要端口开放,验证 DNS 解析
6. 问题:存储测试失败
解决:确保所有节点能访问共享存储,磁盘已正确配置
8.2 可用性组创建失败
7. 问题:数据库不显示在可选列表中
解决:确保数据库已进行完整备份,并且处于在线状态
8. 问题:无法连接到辅助副本
解决:检查 SQL Server 服务是否运行,端点配置是否正确,防火墙是否开放 5022 端口
8.3 数据同步失败
9. 问题:数据库显示 "未同步"
解决:检查 SQL Server 错误日志,确认备份文件夹权限,验证自动种子设定是否成功
10. 问题:同步超时
解决:对于大型数据库,考虑使用手动备份还原方式初始化,而非自动种子设定
九、维护与监控
1. 定期备份:即使有 AlwaysOn,仍需定期备份数据库
2. 监控工具:
1. SQL Server Management Studio
2. 故障转移集群管理器
3. SQL Server Profiler
4. 动态管理视图:

SELECT * FROM sys.dm_hadr_availability_group_states;
SELECT * FROM sys.dm_hadr_database_replica_states;
1. 定期测试:建议每季度进行一次故障转移测试
2. 补丁更新:先更新次要副本,故障转移后再更新原主副本
通过以上详细步骤,您应该能够成功搭建一个稳定的 SQL Server 2016 AlwaysOn 可用性组环境,实现数据库的高可用性和灾难恢复能力。在生产环境部署前,务必在测试环境中充分验证所有功能。
(注:文档部分内容可能由 AI 生成)

THE END