Azure SQL 数据库连接体系结构

本文介绍 Azure SQL Database 连接体系结构,并说明不同组件如何将流量定向到 Azure SQL 数据库的实例。 这些 Azure SQL 数据库连接组件通过从 Azure 内连接的客户端以及从 Azure 外连接的客户端将网络流量定向到 Azure 数据库。 本文还提供脚本示例(用于更改连接发生的方式)以及与更改默认连接设置相关的注意事项。 如果阅读本文后有任何问题,请通过 dmalik@microsoft.com 与 Dhruv 联系。

连接体系结构

下图提供 Azure SQL 数据库连接体系结构的高级概述。

体系结构概述

以下步骤介绍如何通过 Azure SQL 数据库软件负载均衡器 (SLB) 和 Azure SQL 数据库网关建立到 Azure SQL 数据库的连接。

  • Azure 内部或 Azure 外部的客户端连接到 SLB,后者具有公共 IP 地址并侦听端口 1433。
  • SLB 将流量定向到 Azure SQL 数据库网关。
  • 网关将流量重定向到正确的代理中间件。
  • 代理中间件将流量重定向到相应的 Azure SQL 数据库。

Important

其中每个组件都具有内置于网络和应用层的分布式拒绝服务 (DDoS) 保护。

从 Azure 内部连接

如果从 Azure 内连接,连接默认具有“重定向”连接策略。 “重定向”策略表示 TCP 会话与 Azure SQL 数据库建立连接后,会通过将目标虚拟 IP 从 Azure SQL 数据库网关的 IP 更改为代理中间件的 IP,将客户端会话重定向到该代理中间件。 此后,所有后续数据包都直接通过该代理中间件流动,绕过 Azure SQL 数据库网关。 下图演示了此流量流。

体系结构概述

从 Azure 外连接

如果从 Azure 外连接,连接默认具有“代理”连接策略。 “代理”策略通过 Azure SQL 数据库网关建立 TCP 会话,并且所有后续数据包都通过网关流动。 下图演示了此流量流。

体系结构概述

更改 Azure SQL 数据库连接策略

若要为 Azure SQL 数据库服务器更改 Azure SQL 数据库连接策略,请使用 REST API

  • 如果将连接策略设置为“代理”,所有网络数据包都将通过 Azure SQL 数据库网关流动。 对于此设置,需要只允许出站到 Azure SQL 数据库网关 IP。 使用“代理”设置比使用“重定向”设置的延迟时间更长。
  • 如果将连接策略设置为“重定向”,则所有网络数据包将直接流向中间件代理。 对于此设置,需要允许出站到多个 IP。

用于更改连接设置的脚本

Important

此脚本需要 Azure PowerShell 模块

以下 PowerShell 脚本演示如何更改连接策略。

Add-AzureRmAccount -EnvironmentName AzureChinaCloud
Select-AzureRmSubscription -SubscriptionName <Subscription Name>

# Azure Active Directory ID
$tenantId = "<Azure Active Directory GUID>"
$authUrl = "https://login.partner.microsoftonline.cn/$tenantId"

# Subscription ID
$subscriptionId = "<Subscription GUID>"

# Create an App Registration in Azure Active Directory.  Ensure the application type is set to NATIVE
# Under Required Permissions, add the API:  Windows Azure Service Management API

# Specify the redirect URL for the app registration
$uri = "<NATIVE APP - REDIRECT URI>"

# Specify the application id for the app registration
$clientId = "<NATIVE APP - APPLICATION ID>"

# Logical SQL Server Name
$serverName = "<LOGICAL DATABASE SERVER - NAME>"

# Resource Group where the SQL Server is located
$resourceGroupName= "<LOGICAL DATABASE SERVER - RESOURCE GROUP NAME>"


# Login and acquire a bearer token
$AuthContext = [Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext]$authUrl

$result = $AuthContext.AcquireToken("https://management.core.chinacloudapi.cn/",
$clientId,
[Uri]$uri, 
[Microsoft.IdentityModel.Clients.ActiveDirectory.PromptBehavior]::Auto)

$authHeader = @{
'Content-Type'='application\json; '
'Authorization'=$result.CreateAuthorizationHeader()
}

#Get current connection Policy
Invoke-RestMethod -Uri "https://management.chinacloudapi.cn/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/servers/$serverName/connectionPolicies/Default?api-version=2014-04-01-preview" -Method GET -Headers $authHeader

#Set connection policy to Proxy
$connectionType="Proxy" <#Redirect / Default are other options#>
$body = @{properties=@{connectionType=$connectionType}} | ConvertTo-Json

# Apply Changes
Invoke-RestMethod -Uri "https://management.chinacloudapi.cn/subscriptions/$subscriptionId/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/servers/$serverName/connectionPolicies/Default?api-version=2014-04-01-preview" -Method PUT -Headers $authHeader -Body $body -ContentType "application/json"

后续步骤