教程:单个子网中的可用性组的先决条件 - Azure VM 上的 SQL Server
提示
部署可用性组的方法有很多种。 通过在同一 Azure 虚拟网络中的多个子网中创建 SQL Server 虚拟机 (VM),可以简化部署,使 Always On 可用性组不再需要 Azure 负载均衡器或分布式网络名称 (DNN)。 如果已在单个子网中创建可用性组,可以将其迁移到多子网环境。
本教程演示如何完成用于在单子网中在 Azure 虚拟机中创建 SQL Server Always On 可用性组的必备组件。 完成先决条件后,你将在单个资源组中拥有一台域控制器、两台 SQL Server VM 和一台见证服务器。
本文手动配置可用性组环境。 还可以使用 Azure 门户、PowerShell 或 Azure CLI 自动执行这些步骤。
时间估计:可能需要几个小时才能完成必备组件配置。 你将花费大量时间创建虚拟机。
下图演示了在本教程中构建的内容。
查看可用性组文档
本教程假设你已基本了解 SQL Server AlwaysOn 可用性组。 若不熟悉此技术,请参阅 Always On 可用性组概述 (SQL Server)。
创建 Azure 帐户
需要一个 Azure 帐户。 可以创建一个试用版订阅或激活 Visual Studio 订阅者权益。
创建资源组
要在 Azure 门户中创建资源组,请执行以下步骤:
登录 Azure 门户。
选择“+ 创建资源”。
在“市场”搜索框中搜索“资源组”,然后从 Microsoft 选择“资源组”磁贴。 选择“创建”。
在“创建资源组”页面上,填写以下值以创建资源组:
- 从下拉列表中选择相应的 Azure 订阅。
- 提供资源组的名称,例如“SQL-HA-RG”。
- 从下拉列表中选择一个区域,例如“中国北部 3”。 请务必将所有后续资源都部署到此位置。
- 选择“查看 + 创建”以查看资源参数,然后选择“创建”以创建自己的资源组 。
创建网络和子网
下一步是在 Azure 资源组中创建网络和子网。
该教程中的解决方案使用一个虚拟网络和一个子网。 有关 Azure 中的网络的详细信息,请参阅虚拟网络概述。
若要在 Azure 门户中创建虚拟机,请执行以下步骤:
在 Azure 门户中转到资源组,并选择“+ 创建”
在“市场”搜索框中搜索“虚拟网络”,然后从 Microsoft 选择“虚拟网络”磁贴。 选择“创建”。
在“创建虚拟网络”页面上,在“基本信息”选项卡中输入以下信息:
- 在“项目详细信息”下,对于“订阅”,请选择相应的 Azure 订阅。 对于“资源组”,请选择之前创建的资源组,例如 SQL-HA-RG。
- 在“实例详细信息”下,提供虚拟网络的名称(例如 autoHAVNET)。 在下拉列表中,选中为资源组选择的同一区域。
在“IP 地址”选项卡上,选择“+ 添加子网”旁边的省略号 (...)。 如果需要其他地址范围,请选择“删除地址空间”以移除现有的地址空间。
选择“添加 IP 地址空间”,打开窗格以创建所需的地址空间。 本教程使用地址空间 192.168.0.0/16(192.168.0.0 作为起始地址,/16 作为地址空间大小)。 选择“添加”以创建地址空间。
选择“+ 添加子网”,然后:
为“子网名称”提供一个值,例如“admin”。
提供虚拟网络地址空间中的唯一子网地址范围。
例如,如果地址范围为 192.168.0.0/16,则输入 192.168.15.0 作为起始地址,/24 作为子网大小。
选择“添加”以添加新子网。
选择“查看 + 创建”。
Azure 返回到门户仪表板,并在创建好新网络时发出通知。
创建可用性集
创建虚拟机前,需创建可用性集。 可用性集可减少计划内或计划外维护事件的停机时间。
Azure 可用性集是 Azure 置于这些物理域上的逻辑资源组:
- 容错域:确保可用性集的成员具有不同的电源和网络资源。
- 更新域:确保可用性集的成员不会同时停机进行维护。
有关详细信息,请参阅管理虚拟机的可用性。
需要两个可用性集。 一个用于域控制器。 另一个用于 SQL Server VM。
创建可用性集:
- 转到资源组,然后选择“添加”。
- 通过键入“可用性集”筛选结果。 选择结果中的“可用性集”。
- 选择“创建”。
根据下表中的参数配置两个可用性集:
字段 | 域控制器可用性集 | SQL Server 可用性集 |
---|---|---|
名称 | adavailabilityset | sqlavailabilityset |
资源组 | SQL-HA-RG | SQL-HA-RG |
容错域 | 2 | 2 |
更新域 | 5 | 3 |
创建可用性集之后,请返回到 Azure 门户中的资源组。
创建域控制器
创建网络、子网和可用性集后,即可创建和配置域控制器。
为域控制器创建虚拟机
现在,创建两个虚拟机。 将它们命名为 ad-primary-dc 和 ad-secondary-dc。 对每个 VM 使用以下步骤:
- 返回到“SQL-HA-RG”源组。
- 选择 添加 。
- 键入 Windows Server 2016 Datacenter,然后选择 Windows Server 2016 Datacenter。
- 在“Windows Server 2016 Datacenter”中,确认部署模型为“资源管理器”,然后选择“创建”。
注意
ad-secondary-dc 虚拟机是可选的,用于为 Active Directory 域服务提供高可用性。
下表显示了这两个虚拟机的设置:
字段 | 值 |
---|---|
名称 | 第一个域控制器:ad-primary-dc 第二个域控制器:ad-secondary-dc |
VM 磁盘类型 | SSD |
用户名 | DomainAdmin |
密码 | Contoso!0000 |
订阅 | 订阅 |
资源组 | SQL-HA-RG |
位置 | 你的位置 |
大小 | DS1_V2 |
存储 | 使用托管磁盘 - 是 |
虚拟网络 | autoHAVNET |
子网 | admin |
公共 IP 地址 | 与 VM 同名 |
网络安全组 | 与 VM 同名 |
可用性集 | adavailabilityset 容错域:2 更新域:5 |
诊断 | 已启用 |
诊断存储帐户 | 自动创建 |
重要
只能在创建 VM 时将 VM 放入可用性集。 创建 VM 后,无法更改可用性集。 请参阅管理虚拟机的可用性。
配置主域控制器
执行以下步骤,将 ad-primary-dc 计算机配置为 corp.contoso.com 的域控制器:
在门户中打开 SQL-HA-RG 资源组,然后选择 ad-primary-dc 计算机。 在“ad-primary-dc”中选择“连接”,打开用于远程桌面访问的远程桌面协议 (RDP) 文件。
使用已配置的管理员帐户 ( \DomainAdmin) 和密码 (Contoso!0000) 登录。
默认情况下,应显示“服务器管理器”仪表板。 选择仪表板上的“添加角色和功能”链接。
选择“下一步”,直到到达“服务器角色”部分。
选择“Active Directory 域服务”和“DNS 服务器”角色。 出现提示时,添加这些角色所需的任意功能。
注意
Windows 会警告你没有静态 IP 地址。 若要测试配置,请选择“继续”。 对于生产方案,请在 Azure 门户中将 IP 地址设置为静态,或使用 PowerShell 设置域控制器计算机的静态 IP 地址。
选择“下一步”,直到显示“确认”部分。 选中“必要时自动重新启动目标服务器”复选框。
选择“安装”。
功能安装完毕后,返回到“服务器管理器”仪表板。
选择左侧窗格中的新“AD DS”选项。
选择黄色警告栏上的“更多”链接。
在“所有服务器任务详细信息”对话框的“操作”栏中,选择“将此服务器提升为域控制器”。
在“Active Directory 域服务配置向导”中,使用以下值:
Page 设置 部署配置 添加新林
根域名 = corp.contoso.com域控制器选项 DSRM 密码 = Contoso!0000
确认密码 = Contoso!0000选择“下一步”以浏览向导中的其他页。 在“先决条件检查”页上,验证是否显示以下消息:“所有先决条件检查都成功通过”。你可查看任何适用的警告消息,不过可继续安装。
选择“安装”。 ad-primary-dc 虚拟机会自动重启。
记下主域控制器的 IP 地址
为 DNS 使用主域控制器。 记下主域控制器的专用 IP 地址。
获取主域控制器 IP 地址的一种方法是使用 Azure 门户:
打开资源组。
选择主域控制器。
在主域控制器中,选择“网络接口”。
配置虚拟网络 DNS
在创建第一个域控制器并在第一台服务器上启用 DNS 后,将虚拟网络配置为将此服务器用作 DNS:
在 Azure 门户中,选择虚拟网络。
在“设置”下,选择“DNS 服务器”。
选择“自定义”,然后输入主域控制器的专用 IP 地址。
选择“保存”。
配置第二个域控制器
主域控制器重启后,可按照以下步骤配置辅助域控制器。 这个可选过程可实现高可用性。
设置首选 DNS 服务器地址
首选 DNS 服务器地址不应直接在 VM 中更新,应从 Azure 门户、Powershell 或 Azure CLI 进行编辑。 在 Azure 门户内执行以下步骤以进行更改:
登录到 Azure 门户。
在门户顶部的搜索框中,输入“网络接口”。 在搜索结果中,选择“网络接口”。
从列表中选择要查看或更改设置的第二个域控制器的网络接口。
在“设置”中,选择“DNS 服务器”。
选择以下任一项:
从虚拟网络继承:选择此选项可继承针对网络接口分配到的虚拟网络定义的 DNS 服务器设置。 这将自动继承主域控制器作为 DNS 服务器。
自定义:可自行配置 DNS 服务器来解析多个虚拟网络中的名称。 输入要用作 DNS 服务器的服务器的 IP 地址。 指定的 DNS 服务器地址仅分配到此网络接口,并会替代该网络接口分配到的虚拟网络的任何 DNS 设置。 如果选择“自定义”,则输入主域控制器的 IP 地址,例如
192.168.15.4
。
选择“保存”。 如果使用自定义 DNS 服务器,请返回到 Azure 门户中的虚拟机并重启 VM。 重启虚拟机后,可以将 VM 加入域。
加入域
接下来,请加入 corp.contoso.com 域。 为此,请执行下列步骤:
- 使用 BUILTIN\DomainAdmin 帐户远程连接到虚拟机。 此帐户与创建域控制器虚拟机时使用的帐户相同。
- 打开“服务器管理器”,并选择“本地服务器”。
- 选择“WORKGROUP”。
- 在“计算机名”部分中,选择“更改”。
- 选中“域”复选框并在文本框中键入“corp.contoso.com” 。 选择“确定”。
- 在“Windows 安全性”弹出对话框中,指定默认域管理员帐户 (CORP\DomainAdmin) 和密码 (Contoso!0000) 的凭据。
- 在看到“欢迎使用 corp.contoso.com 域”消息时,选择“确定”。
- 选择“关闭”,然后选择弹出对话框中的“立即重启”。
配置域控制器
在将服务器加入域后,可以将其配置为第二个域控制器。 为此,请执行下列步骤:
如果尚未连接,请打开到辅助域控制器的 RDP 会话,并打开“服务器管理器”仪表板(可能会默认打开)。
选择仪表板上的“添加角色和功能”链接。
选择“下一步”,直到到达“服务器角色”部分。
选择“Active Directory 域服务”和“DNS 服务器”角色。 出现提示时,添加这些角色所需的任何其他功能。
功能安装完毕后,返回到“服务器管理器”仪表板。
选择左侧窗格中的新“AD DS”选项。
选择黄色警告栏上的“更多”链接。
在“所有服务器任务详细信息”对话框的“操作”栏中,选择“将此服务器提升为域控制器”。
在“部署配置”下面,选择“将域控制器添加到现有域”。
单击“选择”。
使用管理员帐户 (CORP.CONTOSO.COM\domainadmin) 和密码 (Contoso!0000) 进行连接。
在“从林中选择域”中,选择你的域,然后选择“确定”。
在“域控制器选项”中,使用默认值并设置 DSRM 密码。
注意
“DNS 选项”页可能会警告你无法创建此 DNS 服务器的委托。 在非生产环境中可以忽略此警告。
选择“下一步”,直到出现“先决条件检查”对话框。 然后选择“安装”。
在服务器完成配置更改后,重启服务器。
将辅助域控制器的专用 IP 地址添加到 VPN DNS 服务器
在 Azure 门户的“虚拟网络”下更改 DNS 服务器,以包含辅助域控制器的 IP 地址。 此设置可实现 DNS 服务冗余。
配置域帐户
接下来,在 Active Directory 中总共配置两个帐户,一个是安装帐户,另一个是两台 SQL Server VM 的服务帐户。 作为示例,请采用下表中的值配置帐户:
帐户 | VM | 完整域名 | 说明 |
---|---|---|---|
安装 | 推送、请求和匿名 | CORP\Install | 通过此帐户登录到任一 VM 以配置群集和可用性组。 |
SQLSvc | 两者(sqlserver-0 和 sqlserver-1) | Corp\SQLSvc | 将此帐户用于两台 SQL Server VM 上的 SQL Server 服务和 SQL 代理服务帐户。 |
使用以下步骤创建每个帐户:
登录到 ad-primary-dc 计算机。
在“服务器管理器”中,选择“工具”,然后选择“Active Directory 管理中心”。
在左窗格中选择“corp (local)”。
在“任务”窗格中,选择“新建”,然后选择“用户”。
提示
为每个帐户设置复杂密码。 对于非生产环境,请将用户帐户设置为永不过期。
选择“确定”以创建用户。
向安装帐户授予所需的权限
在“Active Directory 管理中心”的左窗格中,选择“corp (本地)”。 在“任务”窗格上,选择“属性”。
选择“扩展”,然后选择“安全性”选项卡上的“高级”按钮。
在“corp 的高级安全设置”对话框中,选择“添加”。
选中“选择主体”,搜索“CORP\Install”,并选择“确定”。
选中“读取所有属性”复选框。
选中“创建计算机对象”复选框。
选择“确定”,然后再选择“确定”。 关闭“corp”属性窗口。
现在,你已完成 Active Directory 和用户对象的配置,可以创建要加入域的其他 VM。
创建 SQL Server VM
本教程中的解决方案要求创建三个虚拟机:两个具有 SQL Server 实例,另一个用作见证。
Windows Server 2016 可以使用云见证。 但是为了与旧版操作系统保持一致,本文使用虚拟机作为见证服务器。
在继续操作之前,请考虑以下设计决策:
存储:Azure 托管磁盘
对于虚拟机存储,请使用 Azure 托管磁盘。 建议将托管磁盘用于 SQL Server 虚拟机。 托管磁盘在后台处理存储。 此外,当使用托管磁盘的虚拟机位于同一可用性集中时,Azure 会分发存储资源以提供适当冗余。
有关详细信息,请参阅 Azure 托管磁盘简介。 有关可用性集中托管磁盘的详细信息,请参阅 Azure 虚拟机的可用性选项。
网络:生产环境中的专用 IP 地址
本教程为虚拟机使用公共 IP 地址。 使用公共 IP 地址可通过 Internet 直接远程连接到虚拟机,从而简化配置过程。 在生产环境中,建议仅使用专用 IP 地址,以减少 SQL Server 实例 VM 资源的漏洞涉及面。
网络:每个服务器的 NIC 数
每个服务器(群集节点)使用一个网络接口卡 (NIC),并使用一个子网。 Azure 网络具有物理冗余,这使得在 Azure VM 来宾群集上不需要额外的 NIC 和子网。
群集验证报告将发出警告,指出节点只能在单个网络上访问。 你可以在 Azure VM 来宾故障转移群集上忽略此警告。
创建和配置 VM
请返回到“SQL-HA-RG”资源组,然后选择“添加”。
搜索相应的库项,选择“虚拟机”,然后选择“从库中”。
使用下表中的信息完成三个 VM 的创建:
页 VM1 VM2 VM3 选择相应的库项 Windows Server 2016 Datacenter Windows Server 2016 上的 SQL Server 2016 SP1 Enterprise Windows Server 2016 上的 SQL Server 2016 SP1 Enterprise 虚拟机配置:基本信息 名称 = cluster-fsw
用户名 = DomainAdmin
密码 = Contoso!0000
订阅 = 自己的订阅
资源组 = SQL-HA-RG
位置 = 你的 Azure 位置名称 = sqlserver-0
用户名 = DomainAdmin
密码 = Contoso!0000
订阅 = 自己的订阅
资源组 = SQL-HA-RG
位置 = 你的 Azure 位置名称 = sqlserver-1
用户名 = DomainAdmin
密码 = Contoso!0000
订阅 = 自己的订阅
资源组 = SQL-HA-RG
位置 = 你的 Azure 位置虚拟机配置:大小 大小 = DS1_V2(1 个 vCPU,3.5 GB) 大小 = DS2_V2(2 个 vCPU,7 GB)
大小必须支持 SSD 存储(高级磁盘支持)。大小 = DS2_V2(2 个 vCPU,7 GB) 虚拟机配置:设置 存储 = 使用托管磁盘
虚拟网络 = autoHAVNET
子网 = admin (192.168.15.0/24)
公共 IP 地址 = 自动生成
网络安全组 = 无
监视诊断 = 已启用
诊断存储帐户 = 使用自动生成的存储帐户
可用性集 = sqlAvailabilitySet存储 = 使用托管磁盘
虚拟网络 = autoHAVNET
子网 = admin (192.168.15.0/24)
公共 IP 地址 = 自动生成
网络安全组 = 无
监视诊断 = 已启用
诊断存储帐户 = 使用自动生成的存储帐户
可用性集 = sqlAvailabilitySet存储 = 使用托管磁盘
虚拟网络 = autoHAVNET
子网 = admin (192.168.15.0/24)
公共 IP 地址 = 自动生成
网络安全组 = 无
监视诊断 = 已启用
诊断存储帐户 = 使用自动生成的存储帐户
可用性集 = sqlAvailabilitySet虚拟机配置:SQL Server 设置 不适用 SQL 连接 = 专用(虚拟网络内部)
端口 = 1433
SQL 身份验证 = 已禁用
存储配置 = 通用
自动修补 = 星期日 2:00
自动备份 = 已禁用
Azure 密钥保管库集成 = 已禁用SQL 连接 = 专用(虚拟网络内部)
端口 = 1433
SQL 身份验证 = 已禁用
存储配置 = 通用
自动修补 = 星期日 2:00
自动备份 = 已禁用
Azure 密钥保管库集成 = 已禁用
注意
此处建议的计算机大小适合用于在 Azure 虚拟机中测试可用性组。 为获得生产工作负荷的最佳性能,请参阅 Azure 虚拟机中 SQL Server 的性能最佳实践中关于 SQL Server 计算机大小和配置的建议。
预配完 3 个 VM 后,需将其加入到 corp.contoso.com 域中,并向这些计算机授予 CORP\Install 管理权限。
将服务器加入域
针对 SQL Server VM 和文件共享见证服务器完成以下步骤:
- 使用 BUILTIN\DomainAdmin 远程连接到虚拟机。
- 在“服务器管理器”中,选择“本地服务器”。
- 选择“工作组”链接。
- 在“计算机名”部分中,选择“更改”。
- 选中“域”复选框并在文本框中输入 corp.contoso.com。 选择“确定”。
- 在“Windows 安全性”弹出对话框中,指定默认域管理员帐户 (CORP\DomainAdmin) 和密码 (Contoso!0000) 的凭据。
- 在看到“欢迎使用 corp.contoso.com 域”消息时,选择“确定”。
- 选择“关闭”,然后选择弹出对话框中的“立即重启”。
添加帐户
在每个 VM 上以管理员身份添加安装帐户,向 SQL Server 中的安装帐户和本地帐户授予权限,并更新 SQL Server 服务帐户。
添加 CORP\Install 用户作为每个群集 VM 上的管理员
将每个虚拟机作为域的成员重启后,请将 CORP\Install 添加为本地管理员组的成员:
等待 VM 重启,然后从主域控制器再次打开 RDP 文件。 使用 CORP\DomainAdmin 帐户登录到 sqlserver-0。
提示
请确保使用域管理员帐户登录。 在前面的步骤中,使用的是 BUILTIN 管理员帐户。 将服务器加入域后,便可以使用域帐户。 在 RDP 会话中,指定域\用户名。
在“服务器管理器”中,选择“工具”,然后选择“计算机管理”。
在“计算机管理”窗口中,展开“本地用户和组”,并选择“组”。
双击“管理员”组。
在“管理员属性”对话框中,选择“添加”按钮。
输入用户 CORP\Install,然后选择“确定”。
选择“确定”以关闭“管理员属性”对话框。
在 sqlserver-1 和 cluster-fsw 上重复上述步骤。
在每个 SQL Server VM 上创建安装帐户的登录名
使用安装帐户 (CORP\install) 配置可用性组。 此帐户需是每个 SQL Server VM 上的 sysadmin 固定服务器角色的成员。
以下步骤将创建安装帐户的登录名。 在两个 SQL Server VM 上都完成这些操作。
使用 <MachineName>\DomainAdmin 帐户通过 RDP 连接到服务器。
打开 SQL Server Management Studio,并连接到 SQL Server 的本地实例。
在“对象资源管理器”中,选择“安全性”。
右键单击“登录名”。 选择“新建登录名”。
在“登录名 - 新建”中,选择“搜索”。
选择“位置”。
输入域管理员的网络凭据。 使用安装帐户 (CORP\install)。
将该登录名设置为 sysadmin 固定服务器角色的成员。
选择“确定”。
配置系统帐户权限
若要创建系统帐户并授予相应的权限,请在每个 SQL Server 实例上完成以下步骤:
使用以下脚本为
[NT AUTHORITY\SYSTEM]
创建帐户:USE [master] GO CREATE LOGIN [NT AUTHORITY\SYSTEM] FROM WINDOWS WITH DEFAULT_DATABASE=[master] GO
向
[NT AUTHORITY\SYSTEM]
授予以下权限:ALTER ANY AVAILABILITY GROUP
CONNECT SQL
VIEW SERVER STATE
以下脚本将授予这些权限:
GRANT ALTER ANY AVAILABILITY GROUP TO [NT AUTHORITY\SYSTEM] GO GRANT CONNECT SQL TO [NT AUTHORITY\SYSTEM] GO GRANT VIEW SERVER STATE TO [NT AUTHORITY\SYSTEM] GO
设置 SQL Server 服务帐户
在每个 SQL Server VM 上,完成以下步骤来设置 SQL Server 服务帐户。 使用配置域帐户时创建的帐户。
- 打开“SQL Server 配置管理器”。
- 右键单击 SQL Server 服务,然后选择“属性”。
- 设置帐户和密码。
对于 SQL Server 可用性组,每个 SQL Server VM 都需要以域帐户的身份运行。
添加故障转移群集
若要添加故障转移群集功能,请在两个 SQL Server VM 上完成以下步骤:
使用 CORP\install 帐户通过 RDP 连接到 SQL Server 虚拟机。 打开“服务器管理器”仪表板。
选择仪表板上的“添加角色和功能”链接。
选择“下一步”,直到看到“服务器功能”部分。
在“功能”中,选择“故障转移群集”。
添加任何所需的功能。
选择“安装”。
注意
现在可以使用 Azure CLI 自动执行此任务,同时将 SQL Server VM 实际加入故障转移群集。
优化故障转移群集的网络阈值
使用 SQL Server 可用性组在 Azure VM 中运行 Windows 故障转移群集节点时,请将群集设置更改为更宽松的监视状态。 此更改将使群集更稳定、更可靠。 有关详细信息,请参阅使用 SQL Server 的 IaaS:调整故障转移群集网络阈值。
在每个 SQL Server VM 上配置防火墙
该解决方案要求在防火墙中打开以下 TCP 端口:
- SQL Server VM:端口 1433,用于 SQL Server 的默认实例。
- Azure 负载均衡器探测:任何可用端口。 示例中经常使用 59999。
- 群集核心负载均衡器 IP 地址运行状况探测:任何可用端口。 示例中经常使用 58888。
- 数据库镜像终结点:任何可用端口。 示例中经常使用 5022。
需要在两个 SQL Server VM 上都打开这些防火墙端口。 端口的打开方式取决于所用的防火墙解决方案。 以下步骤演示如何在 Windows 防火墙中打开端口:
在第一个 SQL Server 的“开始”屏幕中,打开“高级安全 Windows 防火墙”。
在左窗格中,选择“入站规则”。 在右窗格上,选择“新建规则”。
对于“规则类型”,请选择“端口”。
对于端口,请指定“TCP”并输入相应的端口号。 以下屏幕截图显示了示例:
选择“下一步”。
在“操作”页上,保持选中“允许连接”,然后选择“下一步”。
在“配置文件”页上,接受默认设置,然后选择“下一步”。
在“名称”页的“名称”框中指定一个规则名称(如 Azure LB Probe),然后选择“完成”。
后续步骤
配置必备组件后,请开始配置可用性组。
若要了解更多信息,请参阅以下文章: