当前位置: 首页 > news >正文

保姆级教程:Windows Server上SQL Server 2019 Always On高可用完整配置(含防火墙和权限避坑指南)

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

在企业级数据库部署中,高可用性(High Availability)是确保业务连续性的关键要素。微软SQL Server 2019的Always On可用性组技术,为关键业务数据库提供了自动故障转移的解决方案。本文将深入探讨从零开始搭建Always On集群的全过程,特别聚焦于那些容易被忽略却至关重要的配置细节。

1. 环境准备与前置条件

搭建SQL Server Always On高可用性组并非简单的安装向导点击过程,而是一个需要精心规划的系统工程。在开始配置前,必须确保所有节点满足以下基础条件:

  • Windows Server故障转移集群:这是Always On技术的底层依赖,需要至少两台运行相同版本Windows Server的物理或虚拟机
  • 域环境:所有节点必须加入同一个Active Directory域,且DNS解析正常工作
  • 存储配置:建议为仲裁见证配置独立的共享存储(通常为文件共享或磁盘见证)
  • 网络规划:节点间需要稳定的心跳连接,建议使用专用网络接口

关键检查项表格

组件要求验证方法
操作系统Windows Server 2016/2019 Datacenterwinver命令
SQL Server版本2019 Enterprise/StandardSELECT @@VERSION
域成员身份所有节点在同一域`systeminfo
防火墙开放5022、1433等端口netsh advfirewall firewall show rule name=all

注意:SQL Server服务账户需要具有"创建计算机对象"的域权限,否则集群配置将失败。建议提前在AD中为SQL服务账户委派相应权限。

2. SQL Server Always On功能启用与配置

安装SQL Server 2019时,默认不会启用Always On功能。需要在每个节点上手动启用这一特性:

# 以管理员身份运行PowerShell Import-Module SQLPS -DisableNameChecking Enable-SqlAlwaysOn -ServerInstance "YourInstanceName" -Force

启用后必须重启SQL Server服务使更改生效。此时常见的两个陷阱:

  1. 服务账户权限不足:如果使用本地系统账户运行SQL服务,跨节点通信将失败。建议改用域账户,并确保该账户:

    • 是每个节点上的本地管理员
    • 具有"锁定内存页"权限(通过本地安全策略配置)
    • 在SQL Server中具有sysadmin角色
  2. 端点认证不匹配:Always On使用数据库镜像端点进行通信,必须确保所有节点使用相同的认证方式(通常为证书或Windows认证)

端点配置检查脚本

SELECT e.name AS EndpointName, e.protocol_desc, e.type_desc, e.state_desc, e.is_admin_endpoint, t.port AS TCPPort FROM sys.database_mirroring_endpoints e JOIN sys.tcp_endpoints t ON e.endpoint_id = t.endpoint_id WHERE e.type = 4; -- DATABASE_MIRRORING类型

3. 数据库准备与可用性组创建

创建可用性组前,主节点上的数据库必须满足特定条件。一个常被忽视的关键步骤是数据库备份与还原策略:

  1. 在主节点执行完整备份:
BACKUP DATABASE [YourDB] TO DISK = N'C:\Backup\YourDB.bak' WITH COMPRESSION, STATS = 10;
  1. 在辅助节点还原时,必须使用NORECOVERY选项:
RESTORE DATABASE [YourDB] FROM DISK = N'C:\Backup\YourDB.bak' WITH NORECOVERY, STATS = 10, MOVE 'YourDB_Data' TO 'E:\Data\YourDB.mdf', MOVE 'YourDB_Log' TO 'F:\Log\YourDB.ldf';

常见还原问题排查

  • 错误:"无法获得独占访问权" → 确保没有用户连接到此数据库
  • 错误:"文件路径无效" → 检查MOVE语句中的路径是否存在
  • 错误:"备份集不完整" → 可能需要先还原日志备份

创建可用性组向导时,这些参数需要特别注意:

  • 初始角色:明确指定哪个节点初始为主副本
  • 故障转移模式:自动故障转移需要配置同步提交模式
  • 读取路由:配置辅助副本的只读路由列表,实现读负载均衡
  • 备份首选项:指定在哪个副本上执行自动备份

4. 网络与防火墙精细配置

网络配置不当是导致Always On部署失败的最常见原因。除了众所周知的1433(SQL)和5022(镜像端点)端口外,还需注意:

  • 集群通信端口:3343(UDP)用于集群心跳
  • RPC端点映射器:135(TCP)用于远程过程调用
  • SMB共享:445(TCP)用于文件共享见证
  • Kerberos认证:88(TCP/UDP)用于域认证

推荐的防火墙规则配置脚本

# 创建入站规则 $ports = @(1433, 5022, 3343, 135, 445, 88) foreach ($port in $ports) { netsh advfirewall firewall add rule ` name="SQL HA Port $port" ` dir=in action=allow protocol=TCP localport=$port } # 特别处理UDP端口 netsh advfirewall firewall add rule ` name="Cluster UDP 3343" ` dir=in action=allow protocol=UDP localport=3343

提示:在域环境中,可以考虑创建组策略对象(GPO)来统一部署这些防火墙规则,确保所有节点配置一致。

5. 监听器配置与连接测试

可用性组监听器是客户端连接的关键入口点,其配置直接影响应用的故障转移体验。创建监听器时:

  1. DNS记录:提前在DNS中创建记录,TTL设置较短(如300秒)以便快速故障转移
  2. IP地址:为每个子网分配静态IP,避免DHCP分配
  3. 端口:默认1433,如需更改需确保应用连接字符串相应调整

连接字符串最佳实践

Server=tcp:YourListenerName,1433;Database=YourDB; MultiSubnetFailover=True;ApplicationIntent=ReadOnly;

参数说明:

  • MultiSubnetFailover=True:加速多子网环境下的故障检测
  • ApplicationIntent=ReadOnly:将读操作路由到辅助副本

测试故障转移时,建议按以下步骤验证:

  1. 手动触发主副本故障转移
  2. 监控连接中断时间(应小于30秒)
  3. 验证应用自动重连能力
  4. 检查数据一致性

6. 日常运维与监控策略

部署完成后,建立有效的监控体系至关重要。关键监控指标包括:

  • 同步状态sys.dm_hadr_database_replica_states中的synchronization_state_desc
  • 延迟时间sys.dm_hadr_database_replica_states中的redo_queue_size和log_send_rate
  • 资源使用:CPU、内存、网络和磁盘I/O压力

自动化监控脚本示例

SELECT ag.name AS AGName, ar.replica_server_name, db_name(drs.database_id) AS DatabaseName, drs.synchronization_state_desc AS SyncState, drs.synchronization_health_desc AS SyncHealth, drs.log_send_queue_size AS LogSendQueueKB, drs.redo_queue_size AS RedoQueueKB 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;

对于大型数据库,可能需要调整以下参数优化性能:

  • 并行重做线程数ALTER AVAILABILITY GROUP [AGName] MODIFY REPLICA ON 'NodeName' WITH (SEEDING_MODE = AUTOMATIC)
  • 网络压缩:考虑启用WITH COMPRESSION选项减少网络传输量
  • 日志生成控制:避免大批量事务导致日志膨胀

7. 高级配置与性能调优

对于要求严苛的生产环境,这些高级配置可以进一步提升可用性和性能:

自动页修复: 当检测到损坏页时,SQL Server会自动从健康副本获取该页的完好副本。可通过以下命令验证状态:

SELECT * FROM sys.dm_hadr_auto_page_repair;

读取扩展: 合理配置只读路由列表,将报表等读密集型负载分流到辅助副本:

ALTER AVAILABILITY GROUP [AGName] MODIFY REPLICA ON 'SecondaryNode' WITH (SECONDARY_ROLE(READ_ONLY_ROUTING_URL = 'TCP://SecondaryNode.domain:1433')); ALTER AVAILABILITY GROUP [AGName] MODIFY REPLICA ON 'PrimaryNode' WITH (PRIMARY_ROLE(READ_ONLY_ROUTING_LIST = ('SecondaryNode')));

加密通信: 为端点通信配置证书加密,提升安全性:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'ComplexPassword123!'; CREATE CERTIFICATE HAG_Cert WITH SUBJECT = 'HAG Endpoint Certificate'; CREATE ENDPOINT [Hadr_endpoint] STATE = STARTED AS TCP (LISTENER_PORT = 5022) FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE HAG_Cert, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL );

在实际项目中,我们发现配置Windows集群仲裁见证时使用文件共享见证(FSW)而非传统的磁盘见证,可以显著降低存储依赖。同时,定期执行故障转移演练(每季度至少一次)是确保高可用架构可靠性的最佳实践。

http://www.gsyq.cn/news/1522382.html

相关文章:

  • Falcon大语言模型:工业级开源LLM的架构设计与生产部署指南
  • Linux pkcs7_parse_message DER解码与signer_info
  • 5步轻松配置XUnity.AutoTranslator:免费游戏翻译神器入门指南
  • Agent Runtime层的标准化时刻:Session+Harness+Sandbox架构解析
  • 乳腺癌生存预测的多模态机器学习框架解析与应用
  • Linux platform驱动匹配表与设备树解析流程
  • 2026年5月查重急救|论文AIGC率高别慌,学姐亲测6款降AI工具(附免费名单) - 降AI实验室
  • CefFlashBrowser:如何让Flash经典内容在现代系统中重获新生
  • 从命令行到桌面应用:SillyTavern AI聊天界面桌面化终极指南
  • 数据清洗不是预处理,而是决定模型成败的核心工程
  • Pandas合并三函数:merge、join、concat场景化选型指南
  • 时序数据库底层实战:手写极简TSDB,时间分区压缩、降采样查询,适配监控指标_IoT海量打点
  • 终极iOS激活锁绕过指南:applera1n工具完整使用教程
  • OpenCode:面向VS Code的本地化代码补全引擎
  • 手把手教你用U盘给创维E900V20C刷当贝桌面(Hi3798MV200芯片保姆级教程)
  • 如何快速上手SillyTavern:打造专属AI角色的终极完整指南
  • 梯度下降实战指南:从原理到调参排障的工程化落地
  • 地表温度数据怎么选?一篇讲清MODIS、GLASS、Landsat三大LST产品区别与实战场景
  • Python排序算法动态可视化:Matplotlib动画教学实践
  • ViT视觉可解释性三镜法:Token注意力、Rollout与特征消融
  • 终极Unity游戏翻译指南:如何用XUnity.AutoTranslator轻松玩转外文游戏
  • 不止于解锁和飞行:揭秘MAVROS中command_long的隐藏用法,比如一键提升IMU话题频率到200Hz
  • 别再傻傻分不清!.NET 4.8和.NET 8.0到底该选哪个?从项目实战角度帮你决策
  • 从node_modules的‘地狱’到‘天堂’:聊聊pnpm的硬链接和符号链接到底怎么省下你几十G硬盘空间
  • 如何通过CefFlashBrowser实现Flash数字资产的生态延续与现代化访问
  • 如何在5分钟内搭建个人游戏云主机:Sunshine游戏串流终极指南
  • LangChain 的整体架构:模型、工具、RAG、Agent、记忆、观测
  • 2026成都锦江区前台形象墙品牌评测:成都高新区logo形象墙/成都高新区广告招牌推荐/4家机构实测对比 - 优质品牌商家
  • 你的旧手机卡槽别浪费!华为NM卡 vs 传统MicroSD卡,扩容该怎么选?
  • 从MicroPython迁移到CircuitPython?先看看这8个坑我帮你踩过了