多くのAzure リージョンでは可用性ゾーンが提供されます。可用性ゾーンは、リージョン内のデータセンターのグループで区切られます。 アベイラビリティ ゾーンは、他のアベイラビリティ ゾーンと低レイテンシー接続できるほどの十分な近さです。 ラウンドトリップ待ち時間が 2 ミリ秒未満の高パフォーマンス ネットワークによって接続されます。 ただし、可用性ゾーンは、ローカルの停止や天候が複数の可用性ゾーンに影響を与える可能性を減らすのに十分に離れています。 各可用性ゾーンには、独立した電源、冷却、およびネットワーク インフラストラクチャがあります。 これらは、1 つのゾーンで障害が発生した場合、残りのゾーンがリージョンのサービス、容量、高可用性をサポートするように設計されています。 詳細については、Azure Availability Zones を参照してください。
サポートされているリージョンAzure Data Explorer可用性ゾーンを使用するようにクラスターを構成できます。 可用性ゾーンを使用することで、クラスターはリージョン内の 1 つのデータセンターの障害に耐えやすくなるようにビジネス継続性シナリオをサポートできます。
Azure ポータルでクラスターを作成するとき、または次のいずれかの方法を使用してプログラムで可用性ゾーンを構成できます。
- REST API
- C# SDK
- Python SDK
- PowerShell
- ARM テンプレート
重要
- 可用性ゾーンを使用してクラスターを構成した後は、可用性ゾーンを使用しないようにクラスターを変更することはできません。
- すべてのリージョンで複数のゾーンがサポートされているわけではありません。 そのため、これらのリージョンで可用性ゾーンを使用するようにクラスターを設定することはできません。
- 可用性ゾーンを使用すると、ストレージの追加コストが発生します。
Note
- 先に進む前に、 移行プロセスと考慮事項を理解していることを確認してください。
- これらの手順を使用して、可用性ゾーンを使用する既存のクラスターのゾーンを変更することもできます。
この記事では、次の内容について説明します。
前提条件
対象クラスターのリージョン用の可用性ゾーンの一覧を取得する
対象クラスターの可用性ゾーンの一覧は、次の方法で取得できます。
Azure ポータルで、クラスターの Overview ページに移動します。
[設定] で、[スケール アップ] を選択します。
クラスターの行で、可用性ゾーンが [ 可用性ゾーン ] 列に表示されます。
開始する前に、az.Kusto コマンドレットがインストールされており、サインインしていることを確認してください。 次に、次のコマンドを実行して、クラスターのリージョンの可用性ゾーンの一覧を取得します。
クラスターのリソース ID を設定します。 クラスターのリソース ID は、クラスターの [プロパティ] ページの 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
クラスターの ID を取得します。
$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 |
クラスターのサブスクリプション ID |
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 テンプレートをデプロイする。 詳細については、「DEPLOY resources with ARM templates and Azure CLI」を参照してください。
移行中に、クラスターの概要ページの Azure ポータルに次のメッセージが表示されます。 移行が完了すると、メッセージは削除されます。
Zonality change for the storage of this cluster is in progress.\(このクラスターのストレージに対するゾーンの変更が進行中です。\) 更新時間は、データの量によって異なる場合があります。
可用性ゾーンを使用するクラスターのアーキテクチャ
可用性ゾーンを構成すると、クラスターは次のようにリソースをデプロイします。
Compute レイヤー: Azure Data Explorerは、2 つ以上のノードを持つ分散コンピューティング プラットフォームです。 可用性ゾーンを構成すると、クラスターは、リージョン内の回復性を最大限に高める目的で、定義された可用性ゾーン間でコンピューティング ノードを分散します。 ゾーン障害が発生すると、障害が発生したコンピューティング リソースが存続しているゾーンに再デプロイされるまでの間、クラスターのパフォーマンスが低下する可能性があります。 リージョンで使用可能な最大ゾーンを構成します。
Note
- 場合によっては、コンピューティング容量の制限により、コンピューティング レイヤーで使用できるのは部分的な可用性ゾーンのみです。
- クラスターのコンピューティング レイヤーでは、ベスト エフォートアプローチを使用して、選択したゾーン間でインスタンスを均等に分散します。
永続ストレージ レイヤー: クラスターでは、永続的な永続化レイヤーとしてAzure Storageが使用されます。 可用性ゾーンを構成すると、クラスターで ZRS が有効になり、リージョン内の回復性を最大限に高める 3 つのストレージ レプリカが複数の可用性ゾーンに配置されます。
Note
- ZRS には追加コストが発生します。
- 可用性ゾーンを構成しない場合、ストレージ リソースでは既定の設定である ローカル冗長ストレージ (LRS) が使用され、3 つのレプリカすべてが 1 つのゾーンに配置されます。
移行プロセスと考慮事項
可用性ゾーンをサポートするように可用性ゾーンなしでデプロイした既存のクラスターを構成すると、移行プロセスでは次の手順が実行されます。
定義済みの可用性ゾーン間でコンピューティング リソースを分散する
コンピューティング リソースを再配布するプロセスには、ゾーン コンピューティング リソース キャッシュがウォーム化される準備ステージが含まれます。 この準備ステージの最中、既存のクラスターのコンピューティング リソースは引き続き機能し、サービスが中断されないようにします。 この準備フェーズには、最大で数十分かかる場合があります。 新しいコンピューティング リソースへの移行は、完全な準備と運用が完了した後にのみ行われます。 この並列処理の方法により、通常は 1 分から 3 分かかる切り替えプロセス中のサービス中断を最小限に抑えながら、比較的シームレスなエクスペリエンスが保証されます。 ただし、SKU の移行中にクエリのパフォーマンスが影響を受ける可能性があります。 影響の程度は、特定の使用パターンによって異なる場合があります。
履歴永続ストレージ データを ZRS に移行する
移行プロセスは、LRS から ZRS ストレージへの移行に関するリージョンのサポートと、選択したゾーンで使用可能なストレージ アカウントの容量に依存します。 履歴データの転送は時間のかかるプロセスである場合があり、数時間を要する、または数週間に及ぶ可能性もあります。
すべての新しいデータを ZRS に書き込みます
可用性ゾーンへの移行要求を開始すると、システムは ZRS 構成に新しいデータをすべてレプリケートして格納します。
Note
- 移行要求の後、すべての新しいデータが ZRS 構成内に書き込み始められるまでに、最大で数分の遅延が発生する可能性があります。
- クラスターにストリーミング インジェストがある場合、ZRS データとして書き込まれる新しいデータのリサイクルには最大で 30 日かかることがあります。
ゾーンの状態を更新します
可用性ゾーンへの移行要求が完了すると、システムはサポートされているゾーンを反映するようにゾーンの状態を更新します。 ゾーンの状態が ゾーンの不整合の場合は、一部のコンピューティング リソースまたはストレージ リソースが移行に失敗し、ゾーン内にないことを示します。 この状態は一般に、一部のリソースで使用できるゾーン容量が不足している場合に発生します。 このような場合は、容量が使用可能になったら、後で移行を再試行してください。
移行に関する考慮事項
容量の制約により、移行要求が正常に実行できなくなる可能性があります。 移行を成功させるには、十分なコンピューティング容量とストレージ容量で移行をサポートする必要があります。 容量の制限が存在する場合は、問題を示すエラー メッセージが表示されます。
関連するコンテンツ