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