Compartir a través de

Azure SQL 托管实例连接类型

适用于:Azure SQL 托管实例

本文介绍客户端如何根据连接类型连接到 Azure SQL 托管实例。 下面提供了更改连接类型的脚本示例,以及有关更改默认连接设置的注意事项。

连接类型

Azure SQL 托管实例的 VNet 本地终结点支持以下两种连接类型:

  • 重定向(建议):这是 SQL 客户端连接到托管实例的首选方法。 使用重定向,客户端直接与托管数据库的节点建立连接。 若要启用重定向,你需要配置防火墙和网络安全组 (NSG) 规则以允许入站访问端口 1433 和端口范围 11000-11999。 重定向与代理相比表现出卓越的延迟和吞吐量性能。 重定向还将网关组件的计划内维护事件的影响降到最低,因为重定向连接一旦建立,就不依赖于网关。 重定向功能依赖于 SQL 驱动程序来了解 TDS(表格格式数据流)7.4 或更高版本。 TDS 7.4 首次与 Microsoft SQL Server 2012 一起发布,因此任何比它更新的客户端都可以使用。
  • 代理(默认值):它是旧连接机制,旨在支持实现低于 7.4 的 TDS 版本的 SQL 驱动程序。 在此模式下,所有连接都通过内部网关进行代理,只需要打开端口 1433。 在代理方法中,网关会处理指令以定位主要 SQL 副本节点来转发连接。 根据此工作负载的性质,网关可能会成为连接性的瓶颈。 与重定向相比,代理模式可能会严重增加延迟并减少吞吐量,因为它更容易因网关组件的计划内维护事件而丢失活动连接。 出于此原因,我们强烈建议你将所有托管实例配置为使用重定向连接策略,除非 SQL 客户端不支持 TDS 重定向。

请注意,重定向选项仅对 VNet 本地终结点有效。 Azure SQL 托管实例的公共终结点和专用终结点始终在代理模式下运行。

重要

强烈建议将所有托管实例配置为使用重定向连接策略,除非 SQL 客户端不支持 TDS 重定向。

重定向连接类型

重定向连接类型指与 SQL 引擎建立 TCP 会话后,客户端会话从负载均衡器获取虚拟群集节点的目标虚拟 IP。 后续数据包会绕过网关直接流向虚拟群集节点。 下图演示了此流量流。

此图显示了一个本地网络,其中的 redirect-find-db 连接到 Azure 虚拟网络中的网关,而 redirect-query 则连接到虚拟网络中的数据库主节点。

重要

重定向连接类型当前仅影响 VNet 本地终结点。 无论连接类型设置如何,都始终使用代理连接类型来处理通过公共终结点或专用终结点的连接。

代理连接类型

警告

仅建议对不支持表格格式数据流 (TDS) 标准 7.4 和更新版本的旧客户端和应用程序使用代理连接类型(自 SQL Server 2012 起可用)。 托管实例应被配置为尽可能使用重定向连接类型。

代理连接类型指通过网关建立 TCP 会话,并且所有后续数据包通过网关传输。 下图演示了此流量流。

此图显示了一个本地网络,其中的代理连接到 Azure 虚拟网络中的网关,连接到虚拟网络中的数据库主节点旁边。

更改连接类型

  • 使用门户:若要使用 Azure 门户更改连接类型,请打开“虚拟网络”页,使用“连接类型”设置更改连接类型并保存更改。

  • 使用 PowerShell 编写更改连接类型设置的脚本:

注意

本文使用 Azure Az PowerShell 模块,这是与 Azure 交互时推荐使用的 PowerShell 模块。 若要开始使用 Az PowerShell 模块,请参阅安装 Azure PowerShell。 若要了解如何迁移到 Az PowerShell 模块,请参阅 将 Azure PowerShell 从 AzureRM 迁移到 Az

以下 PowerShell 脚本显示了如何将托管实例的连接类型更改为 Redirect

Install-Module -Name Az
Import-Module Az.Accounts
Import-Module Az.Sql

Connect-AzAccount -Environment AzureChinaCloud
# Get your SubscriptionId from the Get-AzSubscription command
Get-AzSubscription
# Use your SubscriptionId in place of {subscription-id} below
Select-AzSubscription -SubscriptionId {subscription-id}
# Replace {rg-name} with the resource group for your managed instance, and replace {mi-name} with the name of your managed instance
$mi = Get-AzSqlInstance -ResourceGroupName {rg-name} -Name {mi-name}
$mi = $mi | Set-AzSqlInstance -ProxyOverride "Redirect" -force

后续步骤