許多 Azure 區域會提供 可用性區域,這是一個區域內獨立的資料中心群組。 可用性區域彼此足夠接近,可以與其他可用性區域建立低延遲連線。 它們是由高效能網路所連線,往返延遲小於 2 毫秒。 然而,可用性區域之間會保持足夠距離,以降低多個可用性區域同時受到當地停電或天氣影響的機率。 可用性區域擁有獨立的電源、冷卻和網路基礎結構。 設計可用性區域的目的是確保如果某一區域發生中斷,剩餘的區域仍能支援區域服務、容量和高可用性。 如需詳細資訊,請參閱 Azure 可用性區域。
Azure 資料總管叢集可以設定為在支持區域中使用可用性區域。 藉由使用可用性區域,叢集可以更好地承受區域中單一數據中心的失敗,以支援 商務持續性 案例。
您可以在 Azure 入口網站 中 建立叢集時,或使用下列其中一種方法 ,以程式設計方式 設定可用性區域:
- REST API
- C# SDK
- Python SDK
- PowerShell
- ARM 範本
重要
- 設定具有可用性區域的叢集之後,您無法將叢集變更為不使用可用性區域。
- 並非所有地區都支援多個區域。 因此,無法設定位於這些區域中的叢集以使用可用性區域。
- 使用可用性區域會產生額外的成本。
注意
- 繼續進行之前,請確定您已熟悉 遷移過程和注意事項。
- 您也可以使用這些步驟來變更使用可用性區域之現有叢集的區域。
在本文中,您會了解:
必要條件
請確定您的叢集位於支援移轉至多個可用性區域的區域中。
若要移轉叢集以支援可用性區域,您需要一個初始部署時未配置任何可用性區域的叢集。
若要變更叢集的區域,您需要設定可用性區域的叢集。
針對 REST API,請熟悉 使用 REST API 管理 Azure 資源。
如需其他程序設計方法,請參閱 必要條件。
取得叢集區域的可用性區域清單
您可以透過下列方式取得叢集的可用性區域清單:
在 Azure 入口網站中,移至叢集的 [ 概觀 ] 頁面。
在設定底下,選取放大。
在叢集的列中,可用性區域會列在「可用性區域」欄中。
開始之前,請確定您有 az。Kusto Cmdlet 已安裝並 登入,然後執行下列命令以取得叢集區域的可用性區域清單:
設定叢集的資源標識碼。 您可以從 Azure 入口網站的 [ 屬性 ] 頁面取得叢集的資源識別碼。
$resource_id = "<ClusterResourceID>"
取得叢集的詳細數據。
$mycluster = Get-AzKustoCluster -InputObject $resource_id
取得叢集的位置。
重要
Get-AzLocation 需要 Az.Resources 模組。 如果您沒有安裝它,請執行 Install-Module Az.Resources。
$location = (Get-AzLocation | where DisplayName -EQ $mycluster.Location).location
取得叢集的標識碼。
$mycluster.Id -match "/subscriptions/(.*?)/" | Out-Null; $subscription = $Matches[1]
取得叢集區域的可用性區域清單。
$bearer = (Get-AzAccessToken).Token
$rest_result = (Invoke-RestMethod -Uri https://management.azure.com/subscriptions/$subscription/providers/Microsoft.Kusto/locations/${location}/skus?api-version=2022-11-11 -Headers @{Authorization="Bearer $bearer"})
$zones = $rest_result | select -ExpandProperty Value | where name -eq $mycluster.SkuName | select -ExpandProperty locationInfo | select zones
$zones
若要將可用性區域新增至現有的叢集,您必須使用目標可用性區域清單來更新叢集 zones 屬性。 請依照下表中的資訊,遵循您慣用方法的指示:
| 參數 |
價值 |
subscriptionId |
叢集的訂用帳戶標識碼 |
resourceGroupName |
叢集的資源組名 |
clusterName |
叢集的名稱 |
apiVersion |
2023-05-02 (含) 以後版本 |
請遵循如何 部署範本的指示。
對下列端點進行 REST API 呼叫,其中您將參數取代為您的值:
PUT https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/clusters/{clusterName}?api-version={apiVersion}
在要求本文中指定您的可用性區域。 例如,若要將叢集設定為使用可用性區域 1、2 和 3,請將設置內容如下:
{ "zones": [ "{zone1}", "{zone2}", "{zone3}" ] }
如果您沒有安裝 Azure.Identity 和 Azure.ResourceManager.Kusto 連結庫,請使用下列命令加以安裝:
dotnet add package Azure.Identity
dotnet add package Azure.ResourceManager.Kusto
在您的應用程式中,新增下列程式代碼:
"zones": [ "{zone1}", "{zone2}", "{zone3}" ]
例如,若要在北歐區域中將您的區域設定為 1、2 和 3,請使用下列程式代碼:
using Azure.Core;
using Azure.ResourceManager.Kusto;
using Azure.ResourceManager.Kusto.Models;
using ArmClient = Azure.ResourceManager.ArmClient;
using ClientSecretCredential = Azure.Identity.ClientSecretCredential;
using WaitUntil = Azure.WaitUntil;
var tenantId = "{tenantId}";
var clientId = "{clientId}";
var clientSecret = "{clientSecret}";
var subscriptionId = "{subscriptionId}";
var resourceGroupName = "{resourceGroupName}";
var clusterName = "{clusterName}";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, subscriptionId);
var resourceIdentifier = new ResourceIdentifier($"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Kusto/Clusters/{clusterName}");
var cluster = resourceManagementClient.GetKustoClusterResource(resourceIdentifier);
var kustoClusterPatch = new KustoClusterPatch(AzureLocation.NorthEurope);
kustoClusterPatch.Zones.Clear();
kustoClusterPatch.Zones.Add("1");
kustoClusterPatch.Zones.Add("2");
kustoClusterPatch.Zones.Add("3");
var armOperation = await cluster.UpdateAsync(WaitUntil.Started, kustoClusterPatch).ConfigureAwait(false);
var response = armOperation.UpdateStatus();
Console.WriteLine($"ClientRequestId: {response.ClientRequestId}");
while (true)
{
Console.WriteLine($"{DateTime.UtcNow:o} {response.Status, -5} {response.ReasonPhrase}");
if (armOperation.HasCompleted)
break;
await Task.Delay(60000).ConfigureAwait(false);
response = await armOperation.UpdateStatusAsync().ConfigureAwait(false);
}
執行您的應用程式。
在您的應用程式中,新增下列程式代碼:
"zones": [ "{zone1}", "{zone2}", "{zone3}" ]
例如,若要在北歐區域中將您的區域設定為 1、2 和 3,請使用下列程式代碼:
from azure.identity import DefaultAzureCredential
from azure.mgmt.kusto import KustoManagementClient
from azure.mgmt.kusto import models
import time
from azure.core.exceptions import HttpResponseError
subscription_id = "{subscriptionId}"
resource_group_name = "{resourceGroupName}"
cluster_name = "{clusterName}"
client = KustoManagementClient(DefaultAzureCredential(), subscription_id)
lro_poller = client.clusters.begin_update(resource_group_name, cluster_name, models.ClusterUpdate.from_dict({"zones": ["1", "2", "3"]}))
while (not(lro_poller.done())):
time.sleep(60)
print (f"status: {lro_poller.status()}")
try:
lro_poller.result()
except HttpResponseError as e:
print (f"Exception: {e}")
執行您的應用程式。
您可以使用下列 PowerShell 命令來設定叢集以使用可用性區域。 請確定 已安裝 Kusto 工具庫 ,並以您的值取代參數。
Update-AzKustoCluster -SubscriptionId {subscriptionId} -ResourceGroupName {resourceGroupName} -Name {clusterName} -Zone "{zone1}", "{zone2}", "{zone3}"
在您的 ARM 範本中,將下列屬性新增至 Microsoft.Kusto/clusters 資源:
"zones": [ "{zone1}", "{zone2}", "{zone3}" ]
例如,若要在北歐區域中將您的區域設定為 1、2 和 3,請使用下列範本:
{
"$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"clusters_clusterName_name": {
"defaultValue": "clusterName",
"type": "string"
}
},
"variables": {},
"resources": [
{
"type": "Microsoft.Kusto/clusters",
"apiVersion": "2023-05-02",
"name": "[parameters('clusters_clusterName_name')]",
"location": "North Europe",
"sku": {
"name": "{skuName}",
"tier": "Basic",
"capacity": 1
},
"zones": ["1","2","3"],
"identity": {
"type": "SystemAssigned"
},
"properties": {
"trustedExternalTenants": [],
"enableDiskEncryption": false,
"enableStreamingIngest": false,
"languageExtensions": {
"value": []
},
"enablePurge": false,
"enableDoubleEncryption": false,
"engineType": "V3",
"acceptedAudiences": [],
"restrictOutboundNetworkAccess": "Disabled",
"allowedFqdnList": [],
"publicNetworkAccess": "Enabled",
"allowedIpRangeList": [],
"enableAutoStop": true,
"publicIPType": "IPv4"
}
}
]
}
部署 ARM 範本。 如需詳細資訊,請參閱 使用ARM範本和Azure CLI部署資源。
在移轉期間,下列訊息會出現在叢集概觀頁面上的 [Azure 入口網站]。 移轉完成之後會移除訊息。
此叢集記憶體的區域性變更正在進行中。 更新時間可能會根據數據量而有所不同。
具有可用性區域的叢集架構
設定可用性區域時,叢集的資源會部署如下:
計算層:Azure 數據總管是具有兩個以上節點的分散式計算平臺。 如果已設定可用性區域,計算節點會分散到已定義的可用性區域,以達到最大區域內復原能力。 區域失敗可能會降低叢集效能,直到在倖存區域中重新部署失敗的計算資源為止。 我們建議在區域中設定最大可用區域。
注意
- 在某些情況下,由於計算容量限制,計算層只能使用部分可用性區域。
- 叢集的計算層會實作將實例平均分散到所選區域的最佳方法。
永續性儲存層:叢集會使用 Azure 記憶體作為其永久性持續性層。 如果設定可用性區域, 則會啟用 ZRS ,將記憶體複本放在所有三個可用性區域,以達到區域內復原能力上限。
注意
- ZRS 會產生額外的成本。
- 未設定可用性區域時,記憶體資源會以本地 備援記憶體 (LRS) 的預設設定來部署,放置所有 3 個複本是單一區域。
移轉程序
當未設定任何可用性區域的現有叢集設定為支援可用性區域時,下列步驟會在移轉程式中進行:
計算會分散在定義的可用性區域中
重新分配計算資源的過程牽涉到一個準備階段,其中區域性計算資源快取會進行預熱。 在準備階段,現有叢集的計算資源會繼續運作,確保服務不會中斷。 此準備階段最多可能需要數十分鐘的時間。 轉換至新的計算資源只會在完整備妥且可操作之後發生。 這種平行處理方法可確保相對順暢的體驗,在切換程式期間,服務中斷最少,通常持續一到三分鐘。 不過,請務必注意,查詢效能可能會在SKU移轉期間受到影響。 影響的程度可能會根據特定的使用模式而有所不同。
歷史持續性儲存數據會遷移至 ZRS
移轉程式取決於從 LRS 轉換至 ZRS 記憶體的區域支援,以及所選區域中可用的記憶體帳戶容量。 歷史數據的傳輸可能是一個耗時的過程,可能需要數小時,甚至延長到數周。
所有新數據都會寫入 ZRS
起始移轉至可用性區域的要求之後,所有新數據都會復寫並儲存在 ZRS 設定中。
注意
- 在移轉要求之後,在 ZRS 設定中開始寫入所有新數據之前,可能會延遲最多幾分鐘。
- 如果叢集有串流擷取,則新數據的回收會以 ZRS 數據的形式寫入,最多可能需要 30 天的時間。
區域狀態已更新
完成可用性區域的移轉要求之後,區域狀態會更新以反映支持的區域。 如果區域狀態為 「區域不一致」,表示某些計算或記憶體資源無法移轉且不是區域性。 當某些資源可用的區域容量不足時,通常會發生這種情況。 在這種情況下,建議您稍後在容量可用時重試移轉。
考量
移轉至可用性區域的要求可能不會因為容量限制而成功。 若要成功移轉,必須有足夠的計算和記憶體容量來支援移轉。 如果有容量限制,您會收到指出問題的錯誤訊息。
相關內容