Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
提示
部署可用性组的方法有很多种。 通过在同一 Azure 虚拟网络中的多个子网中创建 SQL Server 虚拟机 (VM),可以简化部署,使 Always On 可用性组不再需要 Azure 负载均衡器或分布式网络名称 (DNN)。 如果已在单个子网中创建可用性组,可以将其迁移到多子网环境。
本教程说明如何在多个子网内的 Azure 虚拟机 (VM) 上为 SQL Server 创建 Always On 可用性组。 完整的教程创建一个 Windows Server 故障转移群集和一个可用性组,其中包含两个 SQL Server 副本和一个侦听器。
时间估计:假设 先决条件 已完成,本教程需要大约 30 分钟才能完成。
先决条件
下表列出了在开始本教程之前需要完成的 先决条件 :
要求 | 说明 |
---|---|
![]() |
- 两个不同的 Azure 可用性区域或同一个可用性集中的每个 VM - 在 Azure 虚拟网络中的单独子网中 - 为每个 VM 各分配两个辅助 IP - 位于单个域中 |
![]() |
由每台计算机的 SQL Server 服务使用的域帐户 |
![]() |
- SQL Server:对于默认实例,为“1433” - 数据库镜像终结点:“5022”或任何可用端口 |
![]() |
- 每个 SQL Server 上的本地管理员 - SQL Server sysadmin 固定服务器角色的成员,适用于每个 SQL Server 实例 |
本教程假设你已基本了解 SQL Server Always On 可用性组。
创建群集
AlwaysOn 可用性组位于 Windows Server 故障转移群集基础结构之上。 在部署可用性组之前,必须先配置 Windows Server 故障转移群集,其中包括添加该功能、创建群集和设置群集 IP 地址。
添加故障转移群集功能
将故障转移群集功能添加到这两个 SQL Server VM。 为此,请执行下列步骤:
使用有权在 AD 中创建对象的域帐户(如先决条件文章中创建的 CORP\Install 域帐户)通过 Bastion 连接到 SQL Server 虚拟机。
打开“服务器管理器仪表板”。
选择仪表板上的“添加角色和功能”链接。
选择“下一步”,直到看到“服务器功能”部分。
在“功能”中选择“故障转移群集”。
添加其他所有必备功能。
选择“安装”以添加功能。
在另一个 SQL Server VM 上重复上述步骤。
创建群集
将群集功能添加到每个 SQL Server VM 后,即可创建 Windows Server 故障转移群集。
要创建群集,请执行以下步骤:
使用 Bastion 连接到第一个 SQL Server VM(例如 SQL-VM-1),该域帐户有权在 AD 中创建对象,例如先决条件文章中创建的 CORP\Install 域帐户。
在“服务器管理器”仪表板中选择“工具”,然后选择“故障转移群集管理器”。
在左窗格中右键单击“故障转移群集管理器”,然后选择“创建群集”。
在“创建群集向导”中,逐页使用下表中提供的设置创建一个双节点群集:
页面 设置 准备阶段 使用默认值。 选择服务器 在“输入服务器名称”中键入第一个 SQL Server 的名称(如 SQL-VM-1),并选择“添加” 。
在“输入服务器名称”中键入第二个 SQL Server 的名称(如 SQL-VM-2),并选择“添加” 。验证警告 选择“是。在单击‘下一步’时运行配置验证测试,然后返回创建群集的过程”。 准备阶段 选择“下一步”。 “测试选项” 选择“仅运行选择的测试”。 测试选择 取消勾选“存储” 确保已选择 “清单”、“ 网络”和 “系统配置 ”。 确认 选择“下一步”。
等待验证完成。
选择“查看报表”以查看报表。 可以放心地忽略有关 VM 只能在一个网络接口上访问的警告。 Azure 基础结构具有物理冗余,因此无需添加其他网络接口。
选择“完成”。用于管理群集的访问点 在“群集名称”中键入群集名称,例如“SQLAGCluster1”。 确认 取消选中“将所有符合条件的存储添加到群集”并选择“下一步”。 总结 选择“完成”。 警告
如果未取消选中 “将所有符合条件的存储添加到群集”,Windows 在群集过程中会分离虚拟磁盘。 这样一来,这些虚拟磁盘将不会出现在磁盘管理器或资源管理器之中,除非从群集中删除存储,并使用 PowerShell 将其重新附加。
设置故障转移群集 IP 地址
通常,分配给群集的 IP 地址与分配给 VM 的 IP 地址相同,这意味着在 Azure 中,群集 IP 地址处于失败状态,无法联机。 更改群集 IP 地址,使 IP 资源联机。
在满足先决条件期间,您应已将 次要 IP 地址分配给 每个用于 SQL Server 的虚拟机,正如此处的示例表所示(您的特定 IP 地址可能有所不同):
VM 名称 | 子网名称 | 子网地址范围 | 次要 IP 名称 | 次要 IP 地址 |
---|---|---|---|---|
SQL-VM-1 | SQL-子网-1 | 10.38.1.0/24 | Windows 群集 IP | 10.38.1.10 |
SQL-VM-2 | SQL-subnet-2 | 10.38.2.0/24 | Windows 群集 IP | 10.38.2.10 |
将这些 IP 地址分配为每个相关子网的群集 IP 地址。
注意
在 Windows Server 2019 上,群集创建 分布式服务器名称 而不是 群集网络名称。 群集名称对象(CNO)会自动注册到群集中所有节点的 IP 地址,无需专用 Windows 群集 IP 地址。 如果使用的是 Windows Server 2019,请跳过本部分和引用 群集核心资源的任何其他步骤,或使用 PowerShell 创建基于虚拟网络名称(VNN)的群集。 请参阅博客故障转移群集:群集网络对象以获取详细信息。
若要更改群集 IP 地址,请执行以下步骤:
在“故障转移群集管理器”中,向下滚动到“群集核心资源”,并展开群集详细信息。 你应该会看到每个子网中的“名称”和两个“IP 地址”资源处于“失败”状态。
右键单击第一个失败的“IP 地址”资源,然后选择“属性”。
选择静态 IP 地址,并将 IP 地址更新为分配给第一个 SQL Server VM(例如 SQL-VM-1)的子网中的专用 Windows 群集 IP 地址。 选择“确定”。
对第二个失败的“IP 地址”资源重复上述步骤,使用第二个 SQL Server VM(例如 SQL-VM-2)的子网的专用 Windows 群集 IP 地址。
在“群集核心资源”部分中,右键单击群集名称,并选择“联机” 。 等待名称和其中一个 IP 地址资源联机。
由于 SQL Server VM 位于不同的子网中,群集将依赖于 两个专用 Windows 群集 IP 地址。 当该群集名称资源联机时,它会用新的 Active Directory (AD) 计算机帐户更新域控制器 (DC) 服务器。 如果群集核心资源移动节点,则一个 IP 地址将脱机,而另一个 IP 地址会进入联机状态,使用新的 IP 地址关联更新 DC 服务器。
提示
在生产环境中,在 Azure VM 上运行群集时,将群集设置更改为较宽松的监视状态,能提高云环境中群集的稳定性和可靠性。 有关详细信息,请参阅 SQL Server VM - HADR 配置最佳做法。
配置仲裁
在双节点群集上,仲裁设备对于实现群集可靠性和稳定性是必需的。 在 Azure VM 上,云见证是推荐的仲裁配置,尽管还有其他可用选项。 本部分的步骤为仲裁配置云见证。 标识存储帐户的访问密钥,然后配置云见证。
获取存储帐户的访问密钥
创建 Azure 存储帐户时,它与自动生成的两个访问密钥(主访问密钥和辅助访问密钥)相关联。 首次创建云见证时,请使用主访问密钥,但之后对用于云见证的密钥没有限制。
使用 Azure 门户查看并复制在先决条一文中创建的 Azure 存储帐户的存储访问密钥。
要查看并复制存储访问密钥,请执行以下步骤:
在 Azure 门户中转到资源组,然后选择创建的存储帐户。
在“安全性 + 网络”下,选择“访问密钥” 。
选择“ 显示密钥”,然后复制密钥。
配置云见证
复制访问密钥后,为群集仲裁创建云见证。
要创建云见证,请执行以下步骤:
通过远程桌面连接第一个 SQL Server VM“SQL-VM-1”。
在管理员模式下打开 Windows PowerShell。
运行 PowerShell 脚本,将连接的 TLS(传输层安全性)值设置为 1.2:
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
使用 PowerShell 配置云见证。 将存储帐户名称和访问密钥的值替换为自己的特定信息:
Set-ClusterQuorum -CloudWitness -AccountName "Storage_Account_Name" -AccessKey "Storage_Account_Access_Key" -Endpoint "core.chinacloudapi.cn"
以下示例输出说明该操作已成功:
现已使用云见证配置群集核心资源。
启用 AG 功能
Always On 可用性组功能在默认情况下是禁用的。 使用 SQL Server 配置管理器在两个 SQL Server 实例上启用该功能。
要启用可用性组功能,请执行以下步骤:
使用属于 sysadmin 固定服务器角色的域帐户(例如 CORP\Install 域帐户)连接到第一个 SQL Server VM(例如 SQL-VM-1),例如在先决条件文档中创建的 CORP\Install 域帐户
从其中一个 SQL Server VM 的“开始”菜单启动“SQL Server 配置管理器”。
在浏览器树中,突出显示“SQL Server 服务”,右键单击“SQL Server (MSSQLSERVER)”服务,并选择“属性”。
选择“Always On 高可用性组”选项卡,然后勾选“启用 Always On 可用性组”框:
选择“应用”。 在弹出对话框中选择“确定”。
重新启动 SQL Server 服务。
为其他 SQL Server 实例重复这些步骤。
启用 FILESTREAM 功能
如果不对可用性组中的数据库使用 FILESTREAM,请跳过此步骤并转到下一步“创建数据库”。
如果计划将数据库添加到使用 FILESTREAM 的可用性组,则需要启用 FILESTREAM,因为该功能默认处于禁用状态。 使用 SQL Server 配置管理器在两个 SQL Server 实例上启用该功能。
若要启用 FILESTREAM 功能,请执行以下步骤:
使用作为 sysadmin 固定服务器角色成员的域帐户(如 CORP\Install 域帐户)连接到第一个 SQL Server VM(如 SQL-VM-1),例如在先决条件文档中创建的 CORP\Install 域帐户
从其中一个 SQL Server VM 的“开始”菜单启动“SQL Server 配置管理器”。
在浏览器树中,突出显示 SQL Server 服务,右键单击 SQL Server (MSSQLSERVER) 服务,然后选择“ 属性”。
选中“FILESTREAM”选项卡,然后选中复选框“针对 Transact-SQL 访问启用 FILESTREAM”:
选择“应用”。 在弹出对话框中选择“确定”。
在 SQL Server Management Studio 中,选择“ 新建查询 ”以显示查询编辑器。
在查询编辑器中,输入以下 Transact-SQL 代码:
EXEC sp_configure filestream_access_level, 2 RECONFIGURE
选择“执行”。
重新启动 SQL Server 服务。
为其他 SQL Server 实例重复这些步骤。
创建数据库
对于数据库,可以按照本部分中的步骤创建新数据库或还原 AdventureWorks 数据库。 还需要备份数据库以便初始化日志链。 尚未备份的数据库不符合可用性组的先决条件。
若要创建数据库,请执行以下步骤:
- 使用作为 sysadmin 固定服务器角色成员的域帐户(例如在先决条件文档中创建的 CORP\Install 域帐户)连接到第一个 SQL Server VM(如 SQL-VM-1)。
- 打开 SQL Server Management Studio 并连接到 SQL Server 实例。
- 在“对象资源管理器”中,右键单击“数据库”,然后选择“新建数据库” 。
- 在“数据库名称”中,键入“MyDB1” 。
- 选择“选项”页,然后在“恢复模式”下拉列表中选择“完全”(如果默认未满)。 数据库必须处于完整恢复模式,以满足参与可用性组的先决条件。
- 选择“确定”以关闭“新建数据库”页面并创建自己的新数据库 。
若要备份数据库,请完成以下步骤:
在“对象资源管理器”中右键单击数据库,突出显示“任务”,然后选择“备份...” 。
选择“确定”,以将数据库完整备份到默认备份位置。
创建文件共享
创建备份文件共享,SQL Server VM 及其服务帐户都有权访问该共享。
要创建备份文件共享,请执行以下步骤:
在“服务器管理器”中的第一个 SQL Server VM 上,选择“工具”。 打开“计算机管理”。
选择“共享文件夹”。
右键单击“ 共享”,然后选择“ 新建共享...”。然后使用 “创建共享文件夹向导 ”创建共享。
在“文件夹路径”处选择“浏览”并找到或创建一个数据库备份共享文件夹路径,例如 。 选择“下一步”。
在“名称、说明和设置”中核对共享名称和路径。 选择“下一步”。
在“共享文件夹权限”上设置“自定义权限”。 选择“自定义”。
在“自定义权限”上选择“添加”。
检查 “完全控制 ”以授予对 SQL Server 服务帐户的共享文件夹的完全访问权限(
Corp\SQLSvc
):选择“确定”。
在“共享文件夹权限”中选择“完成” 。 再一次选择“完成”。
创建可用性组
备份数据库后,即可创建可用性组。 此过程会自动从主 SQL Server 副本执行完整备份和事务日志备份,并使用此选项在辅助 SQL Server 实例 NORECOVERY
上还原它。
要创建可用性组,请执行以下步骤。
在第一个 SQL Server VM(例如 SQL-VM-1)上的 SQL Server Management Studio (SSMS) 的“对象资源管理器”中,右键单击“Always On 高可用性”,然后选择“新建可用性组向导”。
在“简介” 页上,选择“下一步” 。 在“指定可用性组名称”页的“可用性组名称”中,键入可用性组的名称(例如“AG1”)。 选择“下一步”。
在“选择数据库”页上,选择数据库,并选择“下一步”。 如果数据库不符合先决条件,请确保它处于完整恢复模式并 执行备份:
在“指定副本”页上,选择“添加副本”。
此时会弹出“连接到服务器”对话框。 在“服务器名称”中键入第二个服务器的名称,如 SQL-VM-2。 选择“连接” 。
在“指定副本”页上,选中“自动故障转移”选项,然后从下拉列表中选择可用性模式为“同步提交”:
选择“终结点”选项卡,确认用于数据库镜像终结点的端口是防火墙中打开的端口:
选择 “侦听器” 选项卡,然后选择 创建可用性组侦听器,并使用以下值作为侦听器:
字段 值 侦听器 DNS 名称: AG1-监听器 端口 使用默认的 SQL Server 端口。 1433 网络模式: 静态 IP 选择“添加”,为两个 SQL Server VM 的侦听器提供辅助专用 IP 地址。
下表显示了从 先决条件文档 为侦听器创建的示例 IP 地址(尽管特定 IP 地址可能有所不同):
VM 名称 子网名称 子网地址范围 次要 IP 名称 次要 IP 地址 SQL-VM-1 SQL-子网-1 10.38.1.0/24 可用性组侦听器 10.38.1.11 SQL-VM-2 SQL-subnet-2 10.38.2.0/24 可用性组侦听器 10.38.2.11 从“ 添加 IP 地址 ”对话框的下拉列表中选择第一个子网(例如 10.38.1.0/24),然后提供辅助专用侦听器 IPv4 地址,例如
10.38.1.11
。 选择“确定”。再次重复此步骤,但从下拉列表中选择其他子网(例如 10.38.2.0/24)。 提供来自其他 SQL Server VM 的第二专用侦听器 IPv4 地址,例如
10.38.2.11
。 选择“确定”。查看“侦听器”页上的值后,选择“下一步” :
在“选择初始数据同步”页上,选择“完整数据库和日志备份”,并提供之前创建的网络共享位置,例如 。
注意
完全同步对第一个 SQL Server 实例上的数据库进行完整备份,并将其还原到第二个实例。 对于大型数据库,不建议进行完全同步,因为可能需要很长时间。 可以通过使用
NO RECOVERY
对数据库进行手动备份和还原来减少所需时间。 如果在配置可用性组之前已在第二个 SQL Server 实例上还原NO RECOVERY
数据库,请选择 “仅联接”。 若想在配置可用性组之后进行备份,请选择“跳过初始数据同步”。在“验证”页上,确认所有验证检查都已通过,然后选择“下一步” :
在“摘要”页面上,选择“完成”,然后等待向导配置新的可用性组 。 选择“进度”页上的“更多详细信息”以查看详细进度 。 当您在“结果”页面上看到向导已成功完成时,请检查摘要以确认可用性组和侦听器是否已成功创建。
选择“关闭”以退出该向导。
检查可用性组
可以使用 SQL Server Management Studio 和 故障转移群集管理器检查可用性组的运行状况。
要检查可用性组的状态,请执行以下步骤:
在“对象资源管理器”中,展开“Always On 高可用性”,并展开“可用性组”。 此时应该会在此容器中看到新的可用性组。 右键单击可用性组,然后选择“显示面板”。
可用性组仪表板会显示副本、每个副本的故障转移模式以及同步状态,例如以下示例:
打开“故障转移群集管理器”,选择你的群集,然后选择“角色”以查看你在群集内创建的可用性组角色。 选择角色 AG1,然后选择“ 资源 ”选项卡以查看侦听器和关联的 IP 地址,例如以下示例:
此时你有一个在两个 SQL Server 实例上具有副本的可用性组,此外还有一个相应的可用性组侦听程序。 可以使用此侦听器进行连接,并且可以使用 SQL Server Management Studio 在实例之间移动可用性组。
警告
不要尝试使用故障转移群集管理器对可用性组进行故障转移。 所有故障转移操作都应在 SQL Server Management Studio 中执行,例如通过使用 Always On 仪表板或 Transact-SQL (T-SQL) 。 有关详细信息,请参阅将故障转移群集管理器与可用性组配合使用的限制。
设置 RegisterAllProvidersIP
使用多个子网中的副本连接到可用性组时,请在连接字符串中设置 MultiSubnetFailover=Yes
该选项,以便客户端尝试同时连接到侦听器的所有 IP 地址。 若要减少具有指定 MultiSubnetFailover=True
连接字符串的客户端在故障转移后的重新连接时间,请设置 RegisterAllProvidersIP
属性为 1
,以使用 DNS 注册侦听器资源的群集网络名称的所有 IP 地址。
RegisterAllProvidersIP 设置是一个群集属性,用于确定群集如何将群集网络名称资源的 IP 地址注册到 DNS。 默认值为 0
,这意味着群集仅注册拥有群集网络名称资源的节点的 IP 地址。
默认情况下,使用 SQL Server Management Studio(SSMS)、Transact-SQL 或 PowerShell 创建可用性组时,会创建 WSFC 客户端访问点,并将属性设置为 RegisterAllProvidersIP
和 1
。
使用以下 PowerShell 命令检查您的侦听器的 RegisterAllProvidersIP
设置:
Get-ClusterResource | where-object {$_.ResourceType.name -eq "Network Name"} | Get-ClusterParameter | where-object {$_.name -eq "RegisterAllProvidersIP"}
如果客户端不支持 MultiSubnetFailover
参数,则可以修改 RegisterAllProvidersIP
和 HostRecordTTL
设置,防止故障转移后连接延迟。
使用 PowerShell 修改 RegisterAllProvidersIp
和 HostRecordTTL
设置:
Get-ClusterResource yourListenerName | Set-ClusterParameter RegisterAllProvidersIP 0
Get-ClusterResource yourListenerName|Set-ClusterParameter HostRecordTTL 300
注意
降低 HostRecordTTL
该值可能会增加 DNS 流量。
测试侦听器连接
在可用性组准备就绪且侦听器已配置适当的辅助 IP 地址后,请测试与侦听器的连接。
要测试连接,请执行以下步骤:
连接到同一虚拟网络中的 SQL Server 实例,但不拥有副本,例如群集中的其他 SQL Server 实例或安装了 SQL Server Management Studio 的任何其他 VM。
打开 SQL Server Management Studio,然后在“连接到服务器”对话框中,在服务器名称中键入侦听器的名称(如 AG1-Listener)。 然后选择 “选项”
在“
MultiSubnetFailover=True
”窗口中输入,然后选择“连接”以自动连接到托管主 SQL Server 副本的实例:
注意
连接到不同子网上的可用性组时,设置 MultiSubnetFailover=true
可更快地检测和连接到当前主副本。 请参阅使用 MultiSubnetFailover 进行连接