많은 Azure 지역은 지역 내에서 데이터 센터의 분리된 그룹인 가용성 영역을 제공합니다. 가용성 영역은 대기 시간이 짧은 다른 가용성 영역에 연결할 수 있을 만큼 충분히 가깝습니다. 왕복 대기 시간이 2ms 미만인 고성능 네트워크에서 연결됩니다. 그러나 가용성 영역은 충분히 멀리 떨어져 있어 지역별 중단이나 날씨로 인해 하나 이상의 영역이 영향을 받을 가능성을 줄여줍니다. 가용성 영역에는 독립적인 전원, 냉각 및 네트워킹 인프라가 있습니다. 한 영역에서 중단이 발생하는 경우, 나머지 영역이 지역 서비스, 용량 및 고가용성을 지원하도록 설계되었습니다. 자세한 내용은 Azure 가용성 영역을 참조하세요.
지원되는 지역에서 가용성 영역을 사용하도록 Azure Data Explorer 클러스터를 구성할 수 있습니다. 클러스터는 가용성 영역을 사용하여 비즈니스 연속성 시나리오를 지원하기 위해 지역에서 단일 데이터 센터의 실패를 더 잘 견딜 수 있습니다.
Azure Portal에서 클러스터를 만들 때 또는 다음 방법 중 하나를 사용하여 프로그래밍 방식으로 가용성 영역을 구성할 수 있습니다.
- REST API (REST 애플리케이션 프로그래밍 인터페이스)
- C# SDK
- Python SDK
- PowerShell
- ARM 템플릿
중요한
- 클러스터가 가용성 영역으로 구성되면 가용성 영역을 사용하지 않도록 클러스터를 변경할 수 없습니다.
- 여러 영역은 모든 지역에서 지원되지 않습니다. 따라서 이러한 지역에 있는 클러스터는 가용성 영역을 사용하도록 설정할 수 없습니다.
- 가용성 영역을 사용하면 추가 비용이 발생합니다.
이 문서에서는 다음에 대해 알아봅니다.
필수 조건
클러스터가 여러 가용성 영역으로의 마이그레이션이 지원되는 지역에 있는지 확인합니다.
가용성 영역을 지원하기 위해 클러스터를 마이그레이션하려면 가용성 영역 없이 배포된 클러스터가 필요합니다.
클러스터의 영역을 변경하려면 가용성 영역으로 구성된 클러스터가 필요합니다.
REST API의 경우 REST API를 사용하여 Azure 리소스 관리에 익숙해지세요.
다른 프로그래밍 방식 메서드는 필수 구성 요소를 참조하세요.
클러스터 지역에 대한 가용성 영역 목록을 가져옵니다.
다음과 같은 방법으로 클러스터의 가용성 영역 목록을 가져올 수 있습니다.
Azure Portal에서 클러스터의 개요 페이지로 이동합니다.
설정에서 강화를 선택합니다.
클러스터의 행에서 가용성 영역은 가용성 영역 열에 나열됩니다.
시작하기 전에 az.Kusto cmdlet이 설치되었고 로그인되어 있는지 확인하고, 다음 명령을 실행하여 클러스터 지역에 대한 가용성 영역 목록을 가져옵니다.
클러스터의 리소스 ID를 설정합니다. 클러스터의 속성 페이지에서 Azure Portal에서 클러스터의 리소스 ID를 가져올 수 있습니다.
$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에 표시됩니다. 마이그레이션이 완료된 후 메시지가 제거됩니다.
이 클러스터의 스토리지에 대한 영역 변경이 진행 중입니다. 업데이트 시간은 데이터 양에 따라 달라질 수 있습니다.
가용성 영역이 있는 클러스터의 아키텍처
가용성 영역이 구성된 경우 클러스터의 리소스는 다음과 같이 배포됩니다.
컴퓨팅 계층: Azure Data Explorer는 둘 이상의 노드가 있는 분산 컴퓨팅 플랫폼입니다. 가용성 영역이 구성된 경우 컴퓨팅 노드는 지역 내 복원력을 최대화하기 위해 정의된 가용성 영역에 분산됩니다. 영역 오류는 실패한 컴퓨팅 리소스가 남은 영역에서 다시 배포될 때까지 클러스터 성능을 저하시킬 수 있습니다. 지역에서 사용 가능한 최대 영역을 구성하는 것이 좋습니다.
참고
- 경우에 따라 컴퓨팅 용량 제한으로 인해 컴퓨팅 계층에 부분 가용성 영역만 사용할 수 있습니다.
- 클러스터의 컴퓨팅 계층은 선택한 영역에 인스턴스를 균등하게 분산하는 최선의 방법을 구현합니다.
영구 스토리지 계층: 클러스터는 Azure Storage를 지속성 지속성 계층으로 사용합니다. 가용성 영역이 구성된 경우 ZRS 를 사용하도록 설정하여 지역 내 복원력을 최대화하기 위해 세 가지 가용성 영역에 스토리지 복제본을 배치합니다.
참고
- ZRS에는 추가 비용이 발생합니다.
- 가용성 영역이 구성되지 않은 경우 스토리지 리소스는 LRS(로컬 중복 스토리지)의 기본 설정으로 배포되며, 3개의 복제본을 모두 배치하는 것은 단일 영역입니다.
마이그레이션 프로세스
가용성 영역 없이 배포된 기존 클러스터가 가용성 영역을 지원하도록 구성된 경우 마이그레이션 프로세스의 일부로 다음 단계가 수행됩니다.
컴퓨팅은 정의된 가용성 영역에 분산됩니다.
컴퓨트 자원을 재배포하는 과정에는 준비 단계가 포함되며, 이 단계에서 지역별 컴퓨트 자원 캐시가 워밍업 됩니다. 준비 단계에서 기존 클러스터의 컴퓨팅 리소스가 계속 작동하여 중단 없는 서비스를 보장합니다. 이 준비 단계는 최대 수십 분이 걸릴 수 있습니다. 새 컴퓨팅 리소스로의 전환은 완전히 준비되고 작동한 후에만 발생합니다. 이 병렬 처리 접근 방식은 전환 프로세스 중에 서비스 중단을 최소화하고 일반적으로 1~3분 동안 지속되는 비교적 원활한 환경을 보장합니다. 그러나 쿼리 성능은 SKU 마이그레이션 중에 영향을 받을 수 있다는 점에 유의해야 합니다. 영향의 정도는 특정 사용 패턴에 따라 달라질 수 있습니다.
기록 영구 스토리지 데이터가 ZRS로 마이그레이션됨
마이그레이션 프로세스는 LRS에서 ZRS 스토리지로의 전환에 대한 지역 지원과 선택한 영역에서 사용 가능한 스토리지 계정 용량에 따라 달라집니다. 기록 데이터의 전송은 시간이 많이 걸리는 프로세스일 수 있으며, 잠재적으로 몇 시간이 걸리거나 몇 주까지 연장될 수 있습니다.
모든 새 데이터가 ZRS에 기록됩니다.
가용성 영역으로의 마이그레이션 요청이 시작되면 모든 새 데이터가 복제되어 ZRS 구성에 저장됩니다.
참고
- 마이그레이션 요청에 따라 모든 새 데이터가 ZRS 구성에 기록되기까지 최대 몇 분 정도 지연될 수 있습니다.
- 클러스터에 스트리밍 수집이 있는 경우 ZRS 데이터로 기록할 새 데이터를 재활용하는 데 최대 30일이 걸릴 수 있습니다.
영역 상태가 업데이트됨
가용성 영역에 대한 마이그레이션 요청이 완료되면 지원되는 영역을 반영하도록 영역 상태가 업데이트됩니다. 영역 상태가 영역 불일치인 경우 일부 컴퓨팅 또는 스토리지 리소스가 마이그레이션에 실패하고 영역이 아니라는 것을 나타냅니다. 이는 일반적으로 일부 리소스에 사용할 수 있는 영역 용량이 부족한 경우에 발생합니다. 이러한 경우 용량을 사용할 수 있는 경우 나중에 마이그레이션을 다시 시도하는 것이 좋습니다.
고려 사항
용량 제약 조건으로 인해 가용성 영역으로의 마이그레이션 요청이 실패할 수 있습니다. 성공적인 마이그레이션을 위해서는 마이그레이션을 지원하기에 충분한 컴퓨팅 및 스토리지 용량이 있어야 합니다. 용량 제한이 있는 경우 문제를 나타내는 오류 메시지가 표시됩니다.
관련 콘텐츠