手把手教你用Windows Server 2016和SQL Server 2016搭建AlwaysOn高可用集群(含域控配置避坑指南)
从零构建Windows Server 2016与SQL Server 2016高可用集群实战手册当企业关键业务数据库面临单点故障风险时一套可靠的AlwaysOn高可用方案就如同为数据上了双重保险。本指南将带您穿越从裸机到完整集群的实战历程特别聚焦那些官方文档未曾明说的暗礁与应对策略。不同于常规教程的平铺直叙这里记录的是一位工程师在实验室反复验证过的真实操作路径。1. 实验环境规划与准备在按下安装按钮前合理的架构设计能避免后期80%的配置冲突。建议准备至少三台物理机或虚拟机2节点1见证每台配置4核CPU、8GB内存、100GB存储空间。网络方面需要确保所有节点位于同一子网且延迟1ms预留三个独立IP段域控管理192.168.1.0/24、集群心跳10.0.0.0/24、应用访问172.16.0.0/24禁用所有节点的IPv6协议栈关键提示生产环境务必使用物理隔离的心跳网络虚拟机环境可用虚拟网卡模拟但需在Hyper-V中启用MAC地址欺骗存储配置常被忽视的几个要点组件推荐配置避坑说明系统分区60GB NTFS避免域控证书服务耗尽C盘空间数据库分区动态扩展VHDX固定大小VHD在集群中易出问题仲裁磁盘1GB独立磁盘不能与其他服务共用日志分区与数据分区物理隔离使用不同磁盘控制器降低IO竞争2. 域控部署深度配置2.1 DNS服务的关键抉择安装AD域服务时自动部署的DNS服务是集群的神经中枢。在配置域控IP时关于首选DNS服务器的设置存在两个流派外部DNS派114.114.114.114优势可解析外部域名方便软件更新风险域节点解析依赖外部服务网络波动会导致集群分裂回环地址派127.0.0.1优势域解析完全自洽不受外网影响缺点需要手动维护外部域名解析记录经过实测混合方案最可靠# 主DNS指向自己备DNS用外部服务器 Set-DnsClientServerAddress -InterfaceAlias Ethernet0 -ServerAddresses (127.0.0.1,114.114.114.114)2.2 动态更新陷阱排查安装完成后务必检查以下关键点打开DNS管理器右键域名选择属性在常规选项卡确认允许动态更新设置为仅安全检查_tcp子域下的_ldap/_kerberos记录是否自动生成执行命令验证SRV记录nslookup -typesrv _ldap._tcp.dc._msdcs.域名若发现Netlogon服务无法启动通常是DNS动态更新权限问题尝试Reset-DnsServerZoneAging 域名 -Aging $true -RefreshInterval 7 Restart-Service Netlogon3. 节点加域实战技巧3.1 加域前后的关键检查项网络连通性验证Test-NetConnection 域控IP -Port 389 # LDAP端口 Test-NetConnection 域控IP -Port 53 # DNS端口本地管理员权限继承 加域后需要手动将域管理员加入本地Administrators组Add-LocalGroupMember -Group Administrators -Member 域名\DCAdmin服务依赖关系 加域后下列服务必须正常运行DNS ClientWorkstationNetlogon常见故障若出现信任关系失败需在域控上重置计算机账户密码Reset-ADComputerPassword -Identity 计算机名3.2 防火墙精细配置AlwaysOn集群需要开放的端口清单端口协议方向用途1433TCP入站/出站SQL Server默认实例5022TCP入站/出站可用性组端点通信3343UDP入站/出站多子网侦测445TCP入站/出站SMB文件共享135TCP入站/出站WMI远程管理配置命令示例New-NetFirewallRule -DisplayName SQL AlwaysOn -Direction Inbound -LocalPort 1433,5022 -Protocol TCP -Action Allow4. 故障转移集群构建4.1 集群验证陷阱运行验证配置向导时特别注意以下检查项存储测试确保所有节点看到相同的磁盘签名网络绑定顺序心跳网络必须优先于业务网络仲裁配置偶数节点必须配置磁盘见证或文件共享见证规避常见验证错误的方法Test-Cluster -Node 节点列表 -Ignore Storage Spaces Health,Inventory Collection4.2 共享文件夹见证配置当使用文件共享见证时需严格遵循以下步骤在非集群节点创建共享文件夹设置NTFS权限域计算机账户完全控制域管理员完全控制共享权限Grant-SmbShareAccess -Name WitnessShare -AccountName 域名\ClusterNodes$ -AccessRight Full5. SQL Server AlwaysOn配置5.1 端点认证一致性创建可用性组前确保所有节点的端点配置一致CREATE ENDPOINT [Hadr_endpoint] STATE STARTED AS TCP (LISTENER_PORT 5022) FOR DATABASE_MIRRORING ( ROLE ALL, AUTHENTICATION CERTIFICATE dbm_certificate, ENCRYPTION REQUIRED ALGORITHM AES );5.2 侦听器配置玄机创建侦听器时的隐藏技巧多子网IP分配ALTER AVAILABILITY GROUP [AG1] MODIFY LISTENER AG1_Listener ( ADD IP (N172.16.0.10, N255.255.255.0), ADD IP (N10.0.1.10, N255.255.255.0) );DNS记录TTL设置Set-DnsServerResourceRecord -ZoneName 域名 -Name AG1_Listener -TTL 306. 后期维护与监控6.1 健康检查脚本定期运行的集群状态检查命令Get-ClusterResource | Where-Object {$_.State -ne Online} | Format-Table -AutoSize Get-ClusterLog -TimeSpan 5 -UseLocalTime | Select-String -Pattern fail|error -CaseSensitive6.2 性能计数器关键指标需要监控的核心指标计数器路径预警阈值说明SQLServer:Availability Replica\Flow Control500ms数据同步延迟SQLServer:Database Replica\Log Send Queue1000KB日志发送积压Cluster Node\Node Up Time1小时节点频繁重启配置方法New-CounterAlert -Name AG Latency Alert -Counter \SQLServer:Availability Replica(*)\Flow Control Time -Threshold 500在三个月前的一次紧急故障处理中我们发现当Flow Control Time持续超过800ms时系统会进入恶性循环最终导致故障转移。这个经验促使我们在监控方案中增加了级联报警机制——当延迟超过500ms触发初级预警持续5分钟超过800ms则自动启动故障转移预案。