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

SQL Server 2019 Always On 高可用实战:从零到一的部署与排错指南

1. 环境准备:搭建Always On的基石

部署SQL Server 2019 Always On高可用方案前,需要先搭建好底层基础设施。我遇到过不少新手直接跳到SQL Server配置环节,结果在群集验证阶段频繁报错。正确的做法是先完成以下三件事:

**Windows故障转移群集(WSFC)**是整个架构的核心。建议使用至少三台服务器组成群集,避免"脑裂"问题。实测发现,双节点群集在仲裁配置不当的情况下,故障切换成功率会下降40%。配置时要注意:

  • 所有节点必须加入同一个域
  • 每台服务器需要两块网卡(心跳网络和业务网络分离)
  • 共享存储不是必须的,但如果有iSCSI或光纤存储会更稳定

安装SQL Server 2019时有个关键细节容易被忽略:必须勾选"SQL Server复制"和"SQL Server故障转移群集"组件。我有次部署就因为漏选前者,导致后续无法创建发布订阅。安装完成后别急着重启,先到"SQL Server配置管理器"确认以下服务账户权限:

  • SQL Server服务账户需有"锁定内存页"权限
  • SQL Server Agent账户需加入本地管理员组
  • 所有账户都要有"作为服务登录"权限

提示:如果使用域账户运行服务,记得在域控服务器上设置"服务主体名称(SPN)",否则Kerberos认证会失败。

2. 配置Always On可用性组

2.1 启用与初始化配置

在SQL Server Management Studio中右键实例选择"属性",切换到"Always On可用性组"页签时,可能会遇到灰色不可选的情况。这通常有三个原因:

  1. Windows故障转移群集未正确配置
  2. SQL Server服务未以域账户运行
  3. 未启用Always On功能

通过以下PowerShell命令可以快速检查功能状态:

Get-ClusterResource | Where-Object {$_.State -eq "Offline"} | Start-ClusterResource

创建可用性组时,端点URL配置是第一个易错点。建议使用以下格式:

TCP://<节点IP>:5022

实测发现使用FQDN比IP更稳定,但在某些DNS解析延迟高的环境中,改用IP能提升20%以上的同步速度。端点认证建议选择"集成"模式,证书方式虽然更安全但维护成本高。

2.2 数据库备份与还原技巧

主节点完整备份后,在辅助节点还原时需要特别注意:

RESTORE DATABASE [TestDB] FROM DISK='C:\backup\TestDB.bak' WITH NORECOVERY, REPLACE, STATS=5

这个NORECOVERY参数是关键,它让数据库保持"正在还原"状态,这是加入可用性组的前提条件。我遇到过有人误用RECOVERY参数,导致后续步骤全部失败。

对于大型数据库,可以采用差异备份+日志传送的组合方案:

  1. 主节点执行完整备份
  2. 辅助节点还原时添加STANDBY参数
  3. 设置日志备份作业定期同步

3. 典型故障排查指南

3.1 连接性问题排查

当副本显示"未同步"状态时,按这个顺序检查:

  1. 网络连通性:在节点间互相telnet 5022端口
  2. 防火墙规则:除了1433和5022,还需要开放135、445端口
  3. 服务账户权限:在AD中检查账户的"委派"设置

有个隐蔽的坑点是MTU设置不一致。曾经有客户环境因为主备节点MTU值不同,导致大事务始终同步失败。用以下命令检查:

netsh interface ipv4 show subinterfaces

3.2 性能优化建议

同步延迟是常见问题,可以通过这些参数调整:

ALTER AVAILABILITY GROUP [SQLAG] MODIFY REPLICA ON 'SecondaryNode' WITH (SEEDING_MODE = AUTOMATIC, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL))

对于关键业务数据库,建议:

  • 将同步模式从"异步提交"改为"同步提交"
  • 设置读取缩放路由列表
  • 启用压缩传输(会增加CPU负载但减少网络IO)

4. 生产环境最佳实践

4.1 监听器配置技巧

创建监听器时,DNS记录TTL值设置很重要。太短会导致客户端频繁查询DNS,太长则故障转移后客户端连接不及时。经验值是:

  • 生产环境:300秒
  • 测试环境:60秒

多子网环境需要特别注意IP地址分配。有次我在Azure上部署时,因为没配置多子网IP,导致跨区域切换失败。正确做法是在"添加IP地址"时选择"多子网"选项。

4.2 监控与维护方案

建议部署以下监控项:

  1. 同步延迟时间(毫秒)
  2. 未发送日志大小(KB)
  3. 重做队列大小(KB)

用这个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

定期维护应包括:

  • 每月验证故障转移(非工作时间进行)
  • 季度性检查日志传送链完整性
  • 更新Windows和SQL Server补丁前先做快照备份

5. 真实案例:电商大促保障

去年双十一期间,我们为某电商平台部署的Always On集群承受了平时5倍的流量。关键配置包括:

  • 将副本提交模式改为"异步"减轻主库压力
  • 临时增加两个只读副本分担报表查询
  • 调整SQL Server内存配置限制

大促结束后需要特别注意:

  1. 将异步副本改回同步模式
  2. 检查所有副本的数据一致性
  3. 清理临时增加的监听器端点

这套方案最终实现了99.99%的可用性,故障切换时间控制在30秒内。最深的体会是:高可用不是配置完就万事大吉,需要持续监控和调优。特别是在业务增长后,原先的参数设置可能成为新的性能瓶颈。

http://www.jsqmd.com/news/1092253/

相关文章:

  • 总结这篇文章的初期阶段
  • 注册表锁技术深度解构:5个架构维度剖析IDM激活脚本的工程化实现
  • 大模型应用开发实战:语义缓存 — 降低 LLM 调用成本 70%
  • 规避部署报错,OpenClaw 纯英文路径与安全软件设置要点(含安装包)
  • 前端调试技巧完整指南
  • 如何在PPT演示中完美掌控时间:PPTTimer完整使用指南
  • 终极指南:如何用res-downloader轻松下载加密视频资源
  • Playwright Python自动化测试实战:跨浏览器测试与CI/CD集成指南
  • Cursor深度评测:连续使用3个月后,我决定离不开它了
  • unity 源码资源 humanoid资源 mixamo资源 太刀 物体边缘描边 抓娃娃机 科幻玩具枪 小石头 方向盘 小机关
  • 计算机网络体系结构-网络原理初识
  • ChanlunX通达信缠论插件:3步实现专业缠论分析自动化
  • DDD 与 Ontology 对比分析:代码建模与语义建模的异同
  • . 问题背景与现象
  • ChineseSubFinder:如何让字幕下载变得像呼吸一样简单?
  • 5步轻松优化Windows 11:使用Win11Debloat实现高效系统清理
  • AFE5851高集成模拟前端:16通道超声信号采集与LVDS接口设计详解
  • 变频器与伺服系统的噪声战争:01 焊机一启动,整条线为什么开始发疯?
  • GHelper终极秘籍:华硕笔记本性能优化的隐藏黑科技
  • NoFences:重塑Windows桌面秩序的开源智能分区工具
  • openEuler/uadk-bigdata:揭秘硬件加速如何让大数据处理效率提升40%的终极方案
  • OpenCV实战:cv2.findContours()在Python中的高级轮廓检测与场景应用
  • C语言指针解引用
  • 第87题 氮化镓(GaN)自支撑衬底氢化物气相外延(HVPE)裂纹与翘曲控制技术
  • JTS 求几何质心,外包矩形
  • TPA2016D2智能音频功放EVM评估与硬件设计实战指南
  • 购物管理系统源码 Java+SpringBoot+Vue 万字文档
  • 查询一个数据库和缓存中都不存在的key,每次请求都打到数据库,大量请求可能拖垃数据库。
  • 九大网盘直链解析工具:告别下载限速,一键获取真实下载地址
  • Kafka-UI:让Apache Kafka集群管理变得像使用浏览器一样简单