此参考体系结构演示如何使用 Windows 上的 SQL Server 为数据层部署虚拟机(VM)和为 N 层 应用程序配置的虚拟网络。
建筑
该体系结构具有以下组件。
概况
资源组。 资源组 用于对 Azure 资源进行分组,以便按生存期、所有者或其他条件进行管理。
可用性集。 可用性集是一种数据中心配置,用于提供 VM 冗余和可用性。 Azure Stack Hub 戳中的此配置可确保在计划内或计划外维护事件期间,至少有一个虚拟机可用。 VM 放置在一个可用性集中,将 VM 分散到多个容错域(Azure Stack Hub 主机)
网络和负载均衡
虚拟网络和子网。 每个 Azure VM 都部署到可细分为子网的虚拟网络中。 为每个层创建单独的子网。
第 7 层负载均衡器。 由于应用程序网关在 Azure Stack Hub 上尚不可用, Azure Stack Hub 市场 提供替代项,例如: A10 vThunder ADC
负载均衡器。 使用 Azure 负载均衡器 将网络流量从 Web 层分发到业务层,以及从业务层分发到 SQL Server。
网络安全组 (NSG)。 使用 NSG 限制虚拟网络中的网络流量。 例如,在此处显示的三层体系结构中,数据库层不接受来自 Web 前端的流量,仅接受来自业务层和管理子网的流量。
DNS。 Azure Stack Hub 不提供自己的 DNS 托管服务,因此请在 ADDS 中使用 DNS 服务器。
虚拟机
SQL Server Always On 可用性组。 通过启用复制和故障转移,在数据层提供高可用性。 它采用 Windows Server 故障转移群集(WSFC)技术来实现故障转移。
Active Directory 域服务 (AD DS) 服务器。 故障转移群集及其关联的群集角色的计算机对象是在 Active Directory 域服务(AD DS)中创建的。 在同一虚拟网络中的 VM 中设置 AD DS 服务器是将其他 VM 加入 AD DS 的首选方法。 还可以使用 VPN 连接将虚拟网络连接到企业网络,将 VM 加入现有企业 AD DS。 使用这两种方法,需要将虚拟网络 DNS 更改为 AD DS DNS 服务器(在虚拟网络或现有企业网络中),以解析 AD DS 域 FQDN。
云见证。 故障转移群集需要其节点中超过一半处于运行状态,这称为达到仲裁。 如果群集只有两个节点,则网络分区可能会导致每个节点认为它是控制平面节点。 在这种情况下,你需要一个 见证 来打破僵局并建立法定人数。 见证是一种资源,例如共享磁盘,可以用作仲裁器来建立仲裁。 云见证是一种使用 Azure Blob 存储的见证。 若要详细了解仲裁的概念,请参阅 了解群集和池仲裁。 有关云见证的详细信息,请参阅 为故障转移群集部署云见证。 在 Azure Stack Hub 中,云见证终结点不同于 Azure。
它可能如下所示:
对于 Azure:
https://mywitness.blob.core.chinacloudapi.cn/对于 Azure Stack Hub:
https://mywitness.blob.<region>.<FQDN>Jumpbox。 也称为 堡垒主机。 网络上的一个安全 VM,管理员使用该 VM 连接到其他 VM。 jumpbox 具有一个 NSG,它仅允许来自安全列表中的公共 IP 地址的远程流量。 NSG 应允许远程桌面(RDP)流量。
建议
你的要求可能与此处所述的体系结构不同。 使用这些建议作为起点。
虚拟机
有关配置 VM 的建议,请参阅 在 Azure Stack Hub 上运行 Windows VM。
虚拟网络
创建虚拟网络时,确定每个子网中的资源需要多少个 IP 地址。 指定一个子网掩码,并使用 CIDR 表示法为所需 IP 地址指定足够大的网络地址范围。 使用位于标准 专用 IP 地址块中的地址空间,即 10.0.0.0/8、172.16.0.0/12 和 192.168.0.0/16。
选择不与本地网络重叠的地址范围,以防稍后需要在虚拟网络和本地网络之间设置网关。 创建虚拟网络后,无法更改地址范围。
设计具有功能和安全要求的子网。 同一层或角色中的所有 VM 都应进入同一子网,该子网可以是安全边界。 有关设计虚拟网络和子网的详细信息,请参阅 规划和设计 Azure 虚拟网络。
负载均衡器
不要直接向 Internet 公开 VM,而是为每个 VM 提供专用 IP 地址。 客户端使用与第 7 层负载均衡器关联的公共 IP 地址进行连接。
定义负载均衡器规则以将网络流量定向到 VM。 例如,若要启用 HTTP 流量,请将端口 80 从前端配置映射到后端地址池上的端口 80。 当客户端向端口 80 发送 HTTP 请求时,负载均衡器将使用包含源 IP 地址的 哈希算法 来选择后端 IP 地址。 客户端请求分布在后端地址池中的所有 VM 中。
网络安全组
使用 NSG 规则限制层之间的流量。 在上面所示的三层体系结构中,Web 层不会直接与数据库层通信。 若要强制实施此规则,数据库层应阻止来自 Web 层子网的传入流量。
拒绝来自虚拟网络的所有入站流量。 (在规则中使用VIRTUAL_NETWORK标记。
允许来自业务层子网的入站流量。
允许来自数据库层子网本身的入站流量。 此规则允许数据库 VM 之间的通信,这是数据库复制和故障转移所需的。
允许来自 jumpbox 子网的 RDP 流量(3389 端口)。 此规则允许管理员从 jumpbox 连接到数据库层。
创建优先级高于第一个规则的规则 2 到 4,以确保它们可以覆盖第一个规则。
SQL Server AlwaysOn 可用性组
建议 使用 AlwaysOn 可用性组 实现 SQL Server 高可用性。 在 Windows Server 2016 之前,AlwaysOn 可用性组需要域控制器,可用性组中的所有节点必须位于同一 AD 域中。
对于 VM 层高可用性,所有 SQL VM 都应位于可用性集中。
其他层通过 可用性组侦听器连接到数据库。 侦听器允许 SQL 客户端连接,而无需知道 SQL Server 的物理实例的名称。 访问数据库的 VM 必须加入域网络。 客户端(在本例中为另一层)使用 DNS 将侦听器的虚拟网络名称解析为 IP 地址。
按如下所示配置 SQL Server Always On 可用性组:
创建 Windows Server 故障转移群集(WSFC)群集、SQL Server Always On 可用性组和主要副本。 有关更多信息,请参阅 Always On 可用性组使用入门指南。
创建具有静态专用 IP 地址的内部负载均衡器。
创建可用性组侦听器,并将侦听器的 DNS 名称映射到内部负载均衡器的 IP 地址。
为 SQL Server 侦听端口创建负载均衡器规则(默认情况下为 TCP 端口 1433)。 负载均衡器规则必须启用 浮动 IP,也称为直接服务器返回。 这会导致 VM 直接回复到客户端,这允许直接连接到主副本。
注释
启用浮动 IP 后,前端端口号必须与负载均衡器规则中的后端端口号相同。
当 SQL 客户端尝试连接时,负载均衡器会将连接请求路由到主副本。 如果故障转移到另一个副本,负载均衡器会自动将新请求路由到新的主副本。 有关详细信息,请参阅 为 SQL Server Always On 可用性组配置 ILB 侦听器。
在故障转移期间,现有客户端连接将关闭。 在故障转移完成后,新的连接将被路由到新的主复制品。
如果应用程序读取量比写入更多,则可以将一些只读查询卸载到次要副本。 请参阅使用侦听器连接到只读次要副本(只读路由)。
通过对可用性组强制手动故障转移来测试您的部署。
对于 SQL 性能优化,还可以参考 SQL Server 最佳做法来优化 Azure Stack Hub 中的性能。
Jumpbox
不允许通过 RDP 从公共 Internet 访问运行应用程序工作负荷的 VM。 相反,所有对这些 VM 的 RDP 访问权限都应通过跳板机。 管理员登录到 jumpbox,然后从 jumpbox 登录到其他 VM。 Jumpbox 允许 Internet 上的 RDP 流量,但仅来自已知安全的 IP 地址。
jumpbox 的性能要求最低,因此请选择较小的 VM 大小。 为 jumpbox 创建 公共 IP 地址 。 将 jumpbox 放置在与其他 VM 相同的虚拟网络中,但放置在单独的管理子网中。
若要保护 jumpbox,请添加一个 NSG 规则,该规则仅允许来自一组安全公共 IP 地址的 RDP 连接。 为其他子网配置 NSG,以允许来自管理子网的 RDP 流量。
可伸缩性注意事项
规模集
对于 Web 层和业务层,请考虑使用 虚拟机规模集 ,而不是部署单独的 VM。 规模集可以轻松部署和管理一组相同的 VM。 如果需要快速横向扩展虚拟机,请考虑使用规模集。
配置部署在规模集中的虚拟机有两种基本方法:
部署后,使用扩展配置 VM。 使用此方法时,新 VM 实例可能需要更长的时间才能启动,而不是没有扩展的 VM。
使用自定义磁盘映像部署 托管磁盘 。 此选项可能更快进行部署。 但是,它要求你保持映像更新。
有关详细信息,请参阅 规模集的设计注意事项。 对于 Azure Stack Hub,此设计注意事项大多是正确的,但有一些注意事项:
Azure Stack Hub 上的虚拟机规模集不支持过度预配或滚动升级。
无法在 Azure Stack Hub 上自动缩放虚拟机规模集。
强烈建议在 Azure Stack Hub 上为虚拟机规模集使用托管磁盘,而不是使用非托管磁盘。
目前,Azure Stack Hub 上存在 700 个 VM 限制,用于考虑所有 Azure Stack Hub 基础结构 VM、单个 VM 和规模集实例。
注释
非托管磁盘正在逐步停用。 在停用日期之前迁移到托管磁盘。 有关详细信息,请参阅 非托管磁盘弃用。
订阅限制
每个 Azure Stack Hub 租户订阅都有设置的默认限制,包括由 Azure Stack Hub 操作员配置的每个区域的最大 VM 数。 有关详细信息,请参阅 Azure Stack Hub 服务、计划、套餐、订阅概述。 另请参阅 Azure Stack Hub 中的配额类型。
安全注意事项
虚拟网络是 Azure 中的流量隔离边界。 默认情况下,一个虚拟网络中的 VM 无法直接与不同虚拟网络中的 VM 通信。
NSG。 使用 网络安全组 (NSG)来限制传入和传出 Internet 的流量。
隔离区 请考虑添加网络虚拟设备(NVA),在 Internet 和 Azure 虚拟网络之间创建外围网络。 NVA 是虚拟设备的通用术语,可以执行与网络相关的任务,例如防火墙、数据包检查、审核和自定义路由。
加密。 加密静态敏感数据,并使用 Azure Stack Hub 中的 Key Vault 管理数据库加密密钥。 有关详细信息,请参阅 为 Azure VM 上的 SQL Server 配置 Azure 密钥保管库集成。 还建议将应用程序机密(如数据库连接字符串)存储在 Key Vault 中。
后续步骤
- 若要了解有关 Azure 云模式的详细信息,请参阅 云设计模式。