SQL Server Always On AG(WSFC)配置指南(1) - 概述
分类: SQL Server ◆ 标签: #SQL Server #SQL Server Always on AG ◆ 发布于: 2026-03-16 17:55:42
要满足关键业务高可用,配置SQL Server Always on AG是必然的选择, 这个配置涉及到很多领域,要求有非常多的专业知识,包括Windows Server域控, 安全和账号管理,防火墙,WSFC集群,也需要足够的网络知识以及安全知识。
我在这个集群的配置上吃足了苦头,过于专业的文档基本都秘而不宣,网络上的资料也都残缺不全,在微软内部精通这门技术的人虽然不少,但是很多自持而傲。
感谢AI,有了AI, 有了开放的learn.microsoft.com的mcp, 这二者的组合可以从微软浩如烟海的文档中准确的找到准确的解决方案,只要你有足够的耐心。
我将这些记录下来并分享给大家,以备后用。
有两个配置场景:
- 在本地的机房配置,可以使用
Windows Server的hyper-V虚拟机来演练 - 在
Azure上使用SQL Server on VM进行演练
如果是在云上的产线业务,那么需要认真考虑:
- 要选择合适的虚拟机型号,特别需要注意虚拟机的IO性能
- 要选择合适的架构,例如是单个子网还是多个子网多个区域,尤其需要注意不同的云环境可能有不同的要求,例如
Azure云环境,要求配置内部的load balancer - 配置故障转移集群时选择投票机制云上可以选择基于
Azure Storage,其他就要选择File Share了。 - 故障转移集群要考虑节点个数,只有投票过半,集群才会在线。
集群节点数和角色选择
故障转移集群通过投票来决定集群是否在线,投票数要等于或者大于半数才会让集群在线。
微软推荐的节点数是:
- 故障转移集群2个节点, 外加一个
witness, 这个witness不是故障转移集群的节点,它可以是一个文件共享目录(在另外一台机器上), 可以是基于clound的witness, 它不参与任何计算,只是为了投票,当故障转移集群票数不够的时候,它会投一票,例如两个节点,多它一票,集群总是会在线。 - 故障转移集群2节点 + 灾备节点, 灾备节点通常不用于故障转移,这个配置上已经是奇数了,不需要额外配置
witness.
本地机器配置
按照最佳实践,我们在本地配置需要有三台机器(注意这里的指南是为了演示配置过程,实际产线环境域控和文件服务器可能会有其他节点替代):
- 一台用于域控和文件服务器
- 两台用于安装故障转移集群和SQL Server
准备节点以及可能的投票
witness- 两个节点 + 一个
witness - 两个业务节点 + 一个灾备节点
这里需要注意的是
witness不是实际的机器(虽然它可能要实际的机器或者资源运行), 但是它不必加入到故障转移集群,对于运行在云环境的可以使用基于cloud的witness, 例如Azure Storage blob,对于运行在本地的可以使用共享文件夹,利于基于SMB的共享文件夹。另外域控要完全分开来,不要加入到故障转移集群,举例来说:
如果你选择 两个节点 + 一个witness的架构,实际上你还是需要三台机器(无论是物理机还是hyper-v的虚拟机), 两台用于安装SQL Server并配置成故障转移集群,一台用于域控并可以用来作为共享文件服务器。- 两个节点 + 一个
安装操作系统,故障转移集群,SQL Server:
- 安装
Windows Server, 要注意选择版本,选择Datacenter版本,所有节点要求版本一致,所有节点安装完之后,更新到最新。- 安装Windows Server的时候,可以考虑禁止
ipv6, 虽然微软推荐不要禁止ipv6, 但是在实际操作过程中减少麻烦,或者对ipv6不熟悉,可以考虑禁止. - 安装好所有的节点之后,将所有节点的
ip地址都配置为静态ip - 安装好
windows Server之后保持所有节点时区要一致,做好时间同步,从默认时间服务器同步就可以。
- 安装Windows Server的时候,可以考虑禁止
- 配置域控,并将所有节点都加入域中, 在配置域控时选择角色:
Active Directory Domain Service以及DNS, 如何配置域控,如何配置域林,请参考其他文档,要注意的是域级别和林级别选新一些,例如Windows Server 2016以上。我测试用的是Windows Server 2025 - 在
SQL Server节点上安装故障转移集群,SQL Server节点和域控节点分开。 - 安装SQL Server, 要求各个版本都要一致。
- 安装
以上是安装,安装中有任何问题,请查询相应的文档,安装的过程中唯一可能会遇到的问题是:启用了ipv6, 在节点加域时可能会遇到无法找到域控而报错,这是因为windows Server 2025默认ipv6优先,这个和操作系统相关,如果不想继续补充ipv6的知识,可以考虑直接关闭ipv6, 关闭ipv6直接通过修改注册表来完成
注意: 需要在所有的节点上都关闭ipv6
启动管理员终端,在powershell下运行:
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" -Name DisabledComponents -PropertyType DWord -Value 255 -Force
也可以选择优先ipv4:
New-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\Tcpip6\Parameters" -Name DisabledComponents -PropertyType DWord -Value 32 -Force
优先选择ipv4是微软的推荐方案,两个方案二选一,都需要在所有节点上运行。
- 配置账号以及必要的权限
前面两个步骤已经准备好了节点,安装好了操作系统,配置好了网络,配置好了域控,所有节点都加了域,两台SQL节点上也安装了故障转移集群和SQL Server, 这些基础工作已经做好了。
配置SQL Server Always on 最推荐的做法是所有SQL Service和SQL Service Agent都使用域账号来运行,推荐选择gMSA账号或者专用的域账号,并授予必要的权限。
- 创建
gMSA账号,并授予权限(gMSA==Group Managed Service Account) - 或者创建专用的域账号,并授权权限
- 更改所有的
SQL上的SQL Service以及SQL Service Agent服务的运行账户为前面创建的账户。 - 在
SQL Server中创建对应的login并使其成为sysadmin角色 - 赋予
hadr endpoint的权限。
安装和配置故障转移集群
故障转移集群比较好配置,但是需要注意要配置投票的witness, 这儿坑很少。配置
SQL Server AG
只需要在配置管理器配置就可以了,这个也没有什么坑。初始化数据库: 坑特别多,后面详细描述
创建
AG加入节点,并创建listener测试集群