保姆级教程:Windows Server上SQL Server 2019 Always On高可用集群搭建全流程(含防火墙和权限避坑指南)
2026/6/14 8:58:07 网站建设 项目流程

Windows Server SQL Server 2019 Always On高可用集群实战指南

在当今企业级数据库环境中,高可用性已成为业务连续性的基本保障。SQL Server Always On可用性组技术作为微软官方推荐的高可用解决方案,能够有效减少计划内和计划外停机时间。本文将带领您从零开始,在Windows Server环境中完整部署SQL Server 2019 Always On高可用集群,特别针对防火墙配置和服务账户权限这两大常见痛点提供深度解决方案。

1. 环境准备与前置条件

部署Always On高可用集群前,必须确保基础环境满足所有必要条件。首先,您需要至少两台运行Windows Server 2016或更高版本的服务器,建议使用相同版本以避免兼容性问题。每台服务器应配置静态IP地址,并确保它们位于同一域环境中。

关键组件检查清单

  • Windows故障转移集群功能已安装
  • SQL Server 2019企业版或标准版(注意:标准版功能有限制)
  • 域账户用于SQL Server服务运行
  • 共享存储(可选,用于见证服务器)

网络配置方面,除了常规的1433端口外,Always On还需要5022端口用于可用性组内部通信。建议在部署前使用以下PowerShell命令测试节点间网络连通性:

Test-NetConnection -ComputerName 节点2 -Port 5022 Test-NetConnection -ComputerName 节点2 -Port 1433

注意:所有节点必须能够解析彼此的主机名,建议在hosts文件中添加静态解析记录或确保DNS配置正确。

2. 故障转移集群配置详解

故障转移集群是Always On可用性组的基础。在第一个节点上,以管理员身份打开PowerShell,运行以下命令安装故障转移集群功能:

Install-WindowsFeature -Name Failover-Clustering -IncludeManagementTools

安装完成后,使用集群验证工具检查配置:

Test-Cluster -Node 节点1,节点2

确认无严重警告后,创建故障转移集群:

New-Cluster -Name SQLCluster -Node 节点1,节点2 -StaticAddress 192.168.1.100

常见问题处理表

问题现象可能原因解决方案
集群验证失败网络配置问题检查网卡设置,禁用IPv6
无法创建集群磁盘签名冲突使用Diskpart清理磁盘
节点无法加入防火墙阻止开放3343端口

3. SQL Server Always On功能启用

在所有节点上安装SQL Server 2019时,必须选择"SQL Server复制"和"Always On可用性组"功能。安装完成后,需要在每个实例上启用Always On功能:

USE master; GO ALTER SERVER CONFIGURATION SET HADR_CLUSTER = ON; GO

然后重启SQL Server服务。此时,您应该在SQL Server配置管理器中看到"HADR"服务已启用。

权限配置关键点

  1. SQL Server服务账户需要是域账户
  2. 该账户需要被授予"锁定内存页"权限
  3. 在AD中,该账户不应被设置为"敏感账户,不能被委派"

使用以下T-SQL验证Always On状态:

SELECT SERVERPROPERTY('IsHadrEnabled');

4. 可用性组创建与配置

在主节点上,右键点击"Always On可用性组",选择新建向导。创建过程中有几个关键决策点:

  1. 初始数据同步选择:对于生产环境,建议使用"完整备份"方式
  2. 端点配置:端口默认为5022,可自定义但需保持一致
  3. 备份首选项:根据业务需求设置优先级

创建监听器时,建议使用以下最佳实践:

CREATE AVAILABILITY GROUP [SQLAG] WITH ( AUTOMATED_BACKUP_PREFERENCE = PRIMARY, FAILURE_CONDITION_LEVEL = 3, HEALTH_CHECK_TIMEOUT = 30000 );

端点安全配置示例

CREATE ENDPOINT [Hadr_endpoint] STATE = STARTED AS TCP (LISTENER_PORT = 5022) FOR DATABASE_MIRRORING ( AUTHENTICATION = WINDOWS NEGOTIATE, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL );

5. 防火墙与权限深度优化

防火墙配置不当是部署失败的最常见原因。除了基本的1433和5022端口外,还需要开放以下端口:

  • 135:RPC端点映射
  • 445:SMB文件共享
  • 49152-65535:RPC动态端口

使用以下命令创建防火墙规则:

New-NetFirewallRule -DisplayName "SQL Always On" -Direction Inbound -LocalPort 5022,1433 -Protocol TCP -Action Allow

服务账户权限问题通常表现为错误18456或35250。确保:

  1. 服务账户在SQL Server中有sysadmin权限
  2. 在"本地安全策略"中授予"作为服务登录"权限
  3. 对集群名称对象(CNO)有完全控制权

验证连接可用性:

Invoke-Sqlcmd -Query "SELECT @@SERVERNAME" -ServerInstance "监听器名称"

6. 运维监控与故障处理

部署完成后,建立有效的监控机制至关重要。推荐使用以下DMV查询监控可用性组状态:

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;

常见故障处理流程

  1. 检查集群服务状态
  2. 验证网络连通性
  3. 检查SQL Server错误日志
  4. 验证端点状态
  5. 检查资源健康状况

对于计划内故障转移,使用以下命令确保数据安全:

ALTER AVAILABILITY GROUP [SQLAG] FAILOVER;

7. 性能优化与高级配置

为获得最佳性能,建议调整以下参数:

  1. 日志压缩:减少网络传输量

    ALTER AVAILABILITY GROUP [SQLAG] MODIFY REPLICA ON '节点2' WITH (COMPRESSION = ON);
  2. 读取扩展:利用辅助副本分担读负载

    ALTER AVAILABILITY GROUP [SQLAG] MODIFY REPLICA ON '节点2' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL = 'TCP://节点2:1433'));
  3. 自动种子设定:简化新数据库添加流程

    ALTER AVAILABILITY GROUP [SQLAG] MODIFY REPLICA ON '节点2' WITH (SEEDING_MODE = AUTOMATIC);

网络优化建议

  • 使用专用网卡进行可用性组通信
  • 启用Jumbo Frame(如果网络设备支持)
  • 考虑使用多子网配置提高容错能力

在实际项目中,我们发现配置正确的服务账户权限和精细调整的防火墙规则可以解决90%的部署问题。特别是在跨机房部署场景下,网络延迟和带宽限制可能成为新的挑战,此时可以考虑调整会话超时参数:

ALTER AVAILABILITY GROUP [SQLAG] MODIFY REPLICA ON '节点2' WITH (SESSION_TIMEOUT = 30);

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询