SQL Server 2016 AlwaysOn集群搭建全记录:从零配置域环境到最终可用性组验证

发布时间:2026/6/11 6:59:16

SQL Server 2016 AlwaysOn集群搭建全记录:从零配置域环境到最终可用性组验证 SQL Server 2016 AlwaysOn实战手记从域环境搭建到高可用验证作为一名长期负责企业数据库架构的工程师我最近接到一个关键任务为公司的财务系统搭建SQL Server 2016 AlwaysOn高可用集群。这个系统每天要处理数十万笔交易任何数据库宕机都可能造成严重后果。经过两周的实战我完整记录了从Windows域环境配置到最终可用性组验证的全过程特别整理了那些官方文档没提到的细节问题和解决方案。1. 环境规划与准备工作在开始实际操作前合理的规划能避免后期大量返工。我们采用三节点部署方案两台运行SQL Server的节点(DB01、DB02)和一个见证服务器(Witness)。所有服务器都使用Windows Server 2016 Datacenter版本SQL Server版本为2016 Enterprise SP2。网络拓扑关键参数域控制器192.168.1.10 (DC01)集群节点1192.168.1.11 (DB01)集群节点2192.168.1.12 (DB02)见证服务器192.168.1.13 (Witness)集群IP192.168.1.100侦听器IP192.168.1.101注意生产环境中建议将集群心跳网络与业务网络分离使用独立网卡和交换机硬件配置方面每个SQL节点配备了CPU: 2颗Intel Xeon Gold 6248R (24核/48线程)内存: 256GB DDR4 ECC存储: 2块1.92TB SSD (RAID1)用于系统4块3.84TB SSD (RAID10)用于数据网络: 双端口10Gbps网卡必备检查清单所有节点系统版本完全一致网络连通性测试通过(ping/telnet)防火墙已配置允许集群通信端口(如5022等)各节点系统时间同步(误差2秒)磁盘分区格式为NTFS已准备域管理员账户(如sqladmincontoso.com)2. 域控制器部署与节点加域2.1 域控制器安装在DC01上执行以下PowerShell命令安装AD域服务Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools Import-Module ADDSDeployment Install-ADDSForest -DomainName contoso.com -DomainNetbiosName CONTOSO -ForestMode WinThreshold -DomainMode WinThreshold -DatabasePath C:\Windows\NTDS -SysvolPath C:\Windows\SYSVOL -LogPath C:\Windows\NTDS -SafeModeAdministratorPassword (ConvertTo-SecureString Pssw0rd123 -AsPlainText -Force) -Force安装完成后需要验证几个关键点DNS记录是否正常生成以下服务是否运行Active Directory Domain ServicesDNS ServerNetlogon2.2 节点加域操作在每个数据库节点上执行加域操作前先确保节点能解析域控制器(修改hosts或配置DNS)本地管理员账户密码符合复杂度要求网络配置正确(特别是DNS指向域控制器)加域命令Add-Computer -DomainName contoso.com -Credential (Get-Credential) -Restart加域后需要将域账户加入本地管理员组Add-LocalGroupMember -Group Administrators -Member CONTOSO\sqladmin3. 故障转移集群配置3.1 安装故障转移集群功能在所有节点上运行Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools安装完成后建议先验证节点是否满足集群要求Test-Cluster -Node DB01,DB02,Witness典型输出应显示所有测试通过节点 DB01 上的测试结果: 网络: 通过 存储: 通过 系统配置: 通过 节点 DB02 上的测试结果: ...3.2 创建故障转移集群在DB01上执行集群创建New-Cluster -Name SQLCluster -Node DB01,DB02 -StaticAddress 192.168.1.100 -NoStorage -AdministrativeAccessPoint DNS创建后验证集群状态Get-Cluster | Select Name, State Get-ClusterNode | Select Name, State Get-ClusterResource | Where-Object {$_.State -ne Online} | Format-Table -AutoSize4. SQL Server AlwaysOn配置4.1 安装SQL Server并启用AlwaysOn在安装SQL Server时必须选择SQL Server复制和SQL Server AlwaysOn可用性组功能。安装完成后在每个节点上启用AlwaysOn-- 启用AlwaysOn USE [master] GO EXEC sp_configure show advanced options, 1 RECONFIGURE GO EXEC sp_configure hadr enabled, 1 RECONFIGURE GO然后重启SQL Server服务使配置生效。4.2 创建可用性组首先在主节点(DB01)上创建数据库并执行完整备份CREATE DATABASE FinanceDB; GO ALTER DATABASE FinanceDB SET RECOVERY FULL; GO BACKUP DATABASE FinanceDB TO DISK C:\Backup\FinanceDB.bak WITH COMPRESSION; GO然后创建可用性组CREATE AVAILABILITY GROUP [FinanceAG] WITH ( AUTOMATED_BACKUP_PREFERENCE PRIMARY, FAILURE_CONDITION_LEVEL 3, HEALTH_CHECK_TIMEOUT 30000 ) FOR DATABASE FinanceDB REPLICA ON DB01 WITH ( ENDPOINT_URL TCP://DB01.contoso.com:5022, AVAILABILITY_MODE SYNCHRONOUS_COMMIT, FAILOVER_MODE AUTOMATIC, BACKUP_PRIORITY 50, SECONDARY_ROLE(ALLOW_CONNECTIONS READ_ONLY) ), DB02 WITH ( ENDPOINT_URL TCP://DB02.contoso.com:5022, AVAILABILITY_MODE SYNCHRONOUS_COMMIT, FAILOVER_MODE AUTOMATIC, BACKUP_PRIORITY 50, SECONDARY_ROLE(ALLOW_CONNECTIONS READ_ONLY) ); GO4.3 配置侦听器ALTER AVAILABILITY GROUP [FinanceAG] ADD LISTENER FinanceListener ( WITH IP ((N192.168.1.101, N255.255.255.0)), PORT1433 ); GO验证侦听器状态Get-ClusterResource | Where-Object {$_.Name -like *Listener*} | Get-ClusterParameter5. 验证与故障排查5.1 基本功能验证连接测试Test-NetConnection -ComputerName FinanceListener.contoso.com -Port 1433数据库状态检查SELECT ag.name AS [AG Name], ar.replica_server_name, db_name(drs.database_id) AS [Database], drs.synchronization_state_desc, drs.synchronization_health_desc FROM sys.dm_hadr_database_replica_states drs JOIN sys.availability_replicas ar ON drs.replica_id ar.replica_id JOIN sys.availability_groups ag ON ar.group_id ag.group_id;5.2 常见问题解决问题1节点无法加入可用性组解决方案检查端点状态SELECT * FROM sys.database_mirroring_endpoints验证网络连通性Test-NetConnection -ComputerName DB02 -Port 5022检查防火墙规则问题2同步状态显示NOT SYNCHRONIZING解决方案检查日志传送状态SELECT * FROM sys.dm_hadr_database_replica_states尝试恢复挂起的移动ALTER DATABASE FinanceDB SET HADR RESUME6. 性能优化与日常维护6.1 性能计数器监控关键性能计数器SQLServer:Availability Replica Flow Control Time (ms/sec)SQLServer:Availability Replica Bytes Sent to Replica/secSQLServer:Database Replica Log Bytes Received/secSQLServer:Database Replica Log Send Queue Size6.2 备份策略优化利用可用性组的备份首选项ALTER AVAILABILITY GROUP [FinanceAG] MODIFY REPLICA ON DB01 WITH (BACKUP_PRIORITY 70); ALTER AVAILABILITY GROUP [FinanceAG] MODIFY REPLICA ON DB02 WITH (BACKUP_PRIORITY 30);6.3 自动故障转移测试计划内故障转移ALTER AVAILABILITY GROUP [FinanceAG] FAILOVER;强制故障转移(当主副本不可用时)ALTER AVAILABILITY GROUP [FinanceAG] FORCE_FAILOVER_ALLOW_DATA_LOSS;在实际项目中我们发现配置完成后前两周最容易出现网络相关问题。建议设置定期健康检查任务包括# 每日健康检查脚本 Test-Cluster -Node DB01,DB02 Get-ClusterResource | Where-Object {$_.State -ne Online} Get-ClusterLog -TimeSpan 5 -Destination C:\ClusterLogs

相关新闻