다음을 통해 공유


팔로워 데이터베이스 사용

팔로워 데이터베이스 기능을 사용하면 다른 클러스터에 있는 데이터베이스를 Azure Data Explorer 클러스터에 연결할 수 있습니다. 팔로워 데이터베이스읽기 전용 모드로 연결되므로 데이터를 보고 리더 데이터베이스에 수집된 데이터에 대한 쿼리를 실행할 수 있습니다. 팔로워 데이터베이스는 리더 데이터베이스의 변경 내용을 동기화합니다. 동기화 때문에, 데이터 가용성에 몇 초에서 몇 분의 데이터 지연이 있습니다. 시간 지연의 길이는 리더 데이터베이스 메타데이터의 전체 크기에 따라 달라집니다. 리더 및 팔로워 데이터베이스는 동일한 스토리지 계정을 사용하여 데이터를 가져옵니다. 스토리지는 리더 데이터베이스가 소유합니다. 팔로워 데이터베이스는 데이터를 수집할 필요 없이 데이터를 볼 수 있습니다. 연결된 데이터베이스는 읽기 전용 데이터베이스이므로 캐 싱 정책, 보안 주체권한을 제외하고 데이터베이스의 데이터, 테이블 및 정책을 수정할 수 없습니다. 연결된 데이터베이스는 삭제할 수 없습니다. 리더 또는 팔로워가 먼저 분리해야만 삭제할 수 있습니다.

팔로워 기능을 사용하여 다른 클러스터에 데이터베이스를 연결하는 것은 조직과 팀 간에 데이터를 공유하는 인프라로 사용됩니다. 이 기능은 비프로덕션 사용 사례로부터 프로덕션 환경을 보호하기 위해 컴퓨팅 리소스를 분리하는 데 유용합니다. 팔로워를 사용하여 Azure Data Explorer 클러스터의 비용을 데이터에 대한 쿼리를 실행하는 당사자와 연결할 수도 있습니다.

어떤 데이터베이스를 팔로우합니까?

  • 클러스터는 하나의 데이터베이스, 여러 데이터베이스 또는 리더 클러스터의 모든 데이터베이스를 따를 수 있습니다.
  • 단일 클러스터는 여러 리더 클러스터의 데이터베이스를 따를 수 있습니다.
  • 클러스터는 팔로워 데이터베이스와 리더 데이터베이스를 모두 포함할 수 있습니다.
  • EngineV3 클러스터는 EngineV3 클러스터만 팔로우할 수 있고, 마찬가지로 EngineV2 클러스터는 V2 클러스터만 팔로우할 수 있습니다.

필수 조건

  • Azure 구독. 무료 Azure 계정을 만듭니다.
  • 리더 및 팔로워를 위한 Azure Data Explorer 클러스터 및 데이터베이스입니다. 클러스터 및 데이터베이스를 만듭니다.
  • 리더 데이터베이스에는 데이터가 포함되어야 합니다. 수집 개요에서 설명하는 방법 중 하나를 사용하여 데이터를수집할 수 있습니다.

데이터베이스 연결

데이터베이스를 연결하는 데 사용할 수 있는 다양한 방법이 있습니다. 이 문서에서는 C#, Python, PowerShell 또는 Azure Resource Manager 템플릿을 사용하여 데이터베이스를 연결하는 방법에 대해 설명합니다. 데이터베이스를 연결하려면 리더 클러스터 및 팔로워 클러스터에서 적어도 기여자 역할이 있는 사용자, 그룹, 서비스 주체 또는 관리 ID가 있어야 합니다. Azure Portal, PowerShell, Azure CLIARM 템플릿을 사용하여 역할 할당을 추가하거나 제거합니다. Azure RBAC(Azure 역할 기반 액세스 제어)다양한 역할에 대해 자세히 알아봅니다.

테이블 수준 공유

데이터베이스를 연결할 때 모든 테이블뿐만 아니라 외부 테이블과 구체화된 뷰도 포함됩니다. 'TableLevelSharingProperties'를 구성하여 특정 테이블/외부 테이블/구체화된 뷰를 공유할 수 있습니다.

'TableLevelSharingProperties'에는 8개의 문자열 배열이 있으며, tablesToInclude, tablesToExclude, externalTablesToInclude, externalTablesToExclude, materializedViewsToInclude, materializedViewsToExclude, functionsToInclude, 및 functionsToExclude입니다. 모든 배열의 최대 항목 수는 100개입니다.

비고

테이블 수준 공유는 '*' 모든 데이터베이스 표기법을 사용할 때 지원되지 않습니다.

비고

구체화된 뷰가 포함되면 원본 테이블도 포함됩니다.

예시

  1. 모든 테이블을 포함합니다. 기본적으로 모든 테이블이 자동으로 따라오기 때문에 '*'가 필요하지 않습니다.

    tablesToInclude = []
    
  2. 이름이 "로그"로 시작하는 모든 테이블을 포함합니다.

    tablesToInclude = ["Logs*"]
    
  3. 모든 외부 테이블을 제외합니다.

    externalTablesToExclude = ["*"]
    
  4. 구체화된 모든 뷰를 제외합니다.

    materializedViewsToExclude=["*"]
    

데이터베이스 이름 재정의

필요에 따라 팔로워 클러스터의 데이터베이스 이름을 리더 클러스터와 다르게 만들 수 있습니다. 예를 들어 여러 리더 클러스터의 동일한 데이터베이스 이름을 팔로워 클러스터에 연결할 수 있습니다. 다른 데이터베이스 이름을 지정하려면 'DatabaseNameOverride' 또는 'DatabaseNamePrefix' 속성을 구성합니다.

C를 사용하여 데이터베이스 연결#

필수 NuGet 패키지

C# 예제

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(credentials) { SubscriptionId = followerSubscriptionId };
var followerResourceGroupName = "followerResourceGroup";
var followerClusterName = "follower";
var attachedDatabaseConfigurationName = "attachedDatabaseConfiguration"
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var leaderResourceGroup = "leaderResourceGroup";
var leaderClusterName = "leader";
var attachedDatabaseConfigurationData = new AttachedDatabaseConfiguration
{
    ClusterResourceId = $"/subscriptions/{leaderSubscriptionId}/resourceGroups/{leaderResourceGroup}/providers/Microsoft.Kusto/Clusters/{leaderClusterName}",
    DatabaseName = "<databaseName>", // Can be specific database name or * for all databases
    DefaultPrincipalsModificationKind = "Union",
    Location = "North Central US"
};
// Table level sharing properties are not supported when using '*' all databases notation.
if (attachedDatabaseConfigurationData.DatabaseName != "*")
{
    // Set up the table level sharing properties - the following is just an example.
    attachedDatabaseConfigurationData.TableLevelSharingProperties = new TableLevelSharingProperties(
        tablesToInclude:new List<string> { "table1" },
        tablesToExclude:new List<string> { "table2" },
        externalTablesToInclude:new List<string> { "exTable1" },
        externalTablesToExclude:new List<string> { "exTable2" },
        materializedViewsToInclude:new List<string> { "matTable1" },
        materializedViewsToExclude:new List<string> { "matTable2" }
    );
}
await resourceManagementClient.AttachedDatabaseConfigurations.CreateOrUpdateAsync(
    followerResourceGroupName, followerClusterName, attachedDatabaseConfigurationName, attachedDatabaseConfigurationData
);

데이터베이스가 성공적으로 연결되었는지 확인

데이터베이스가 성공적으로 연결되었는지 확인하려면 Azure Portal에서 연결된 데이터베이스를 찾습니다. 데이터베이스가 팔로워 또는 리더 클러스터에 성공적으로 연결되었는지 확인할 수 있습니다.

팔로워 클러스터 확인

  1. 팔로워 클러스터로 이동하여 데이터베이스를 선택합니다.

  2. 데이터베이스 목록에서 새 읽기 전용 데이터베이스를 검색합니다.

    포털의 읽기 전용 팔로워 데이터베이스 스크린샷

    데이터베이스 개요 페이지에서 이 목록을 볼 수도 있습니다.

    팔로워 클러스터 목록이 있는 데이터베이스 개요 페이지의 스크린샷.

리더 클러스터 확인

  1. 리더 클러스터로 이동하고 데이터베이스를 선택합니다.

  2. 관련 데이터베이스가 SHARED WITH OTHERS>Yes로 표시되는지 확인합니다.

  3. 세부 정보를 보려면 관계 링크를 전환합니다.

    리더 클러스터를 확인하기 위해 다른 사용자와 공유된 데이터베이스의 스크린샷

    데이터베이스 개요 페이지에서도 볼 수 있습니다.

    다른 사용자와 공유되는 데이터베이스 목록이 포함된 개요의 스크린샷

팔로워 데이터베이스 분리

비고

팔로워 또는 리더 쪽에서 데이터베이스를 분리하려면 데이터베이스를 분리하는 클러스터에서 적어도 기여자 역할이 있는 사용자, 그룹, 서비스 주체 또는 관리 ID가 있어야 합니다. 아래 예제에서는 서비스 주체를 사용합니다.

C#**을 사용하여 팔로워 클러스터에서 연결된 팔로워 데이터베이스 분리

팔로워 클러스터는 다음과 같이 연결된 모든 팔로워 데이터베이스를 분리할 수 있습니다.

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(credentials) { SubscriptionId = followerSubscriptionId };
var followerResourceGroupName = "testrg";
//The cluster and database attached database configuration are created as part of the prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
await resourceManagementClient.AttachedDatabaseConfigurations.DeleteAsync(
    followerResourceGroupName, followerClusterName, attachedDatabaseConfigurationsName
);

C를 사용하여 리더 클러스터에서 연결된 팔로워 데이터베이스 분리#

리더 클러스터는 다음과 같이 연결된 데이터베이스를 분리할 수 있습니다.

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = await ApplicationTokenProvider.LoginSilentAsync(tenantId, clientId, clientSecret);
var resourceManagementClient = new KustoManagementClient(credentials) { SubscriptionId = leaderSubscriptionId };
var leaderResourceGroupName = "testrg";
var leaderClusterName = "leader";
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerResourceGroupName = "followerResourceGroup";
//The cluster and attached database configuration that are created as part of the Prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
var followerDatabaseDefinition = new FollowerDatabaseDefinition
{
    ClusterResourceId = $"/subscriptions/{followerSubscriptionId}/resourceGroups/{followerResourceGroupName}/providers/Microsoft.Kusto/Clusters/{followerClusterName}",
    AttachedDatabaseConfigurationName = attachedDatabaseConfigurationsName
};
await resourceManagementClient.Clusters.DetachFollowerDatabasesAsync(
    leaderResourceGroupName, leaderClusterName, followerDatabaseDefinition
);

계정, 권한 및 캐싱 정책 관리

주요 인물 관리

데이터베이스를 연결할 때 "기본 보안 주체 수정 종류"를 지정합니다. 기본값은 권한 있는 보안 주체 재정의를 권한 있는 보안 주체의 리더 데이터베이스 컬렉션과 결합하는 것입니다.

종류 설명
연합 연결된 데이터베이스 보안 주체에는 항상 원래 데이터베이스 보안 주체와 팔로워 데이터베이스에 추가된 다른 새 보안 주체가 포함됩니다.
교체 원래 데이터베이스에서 주체의 상속이 없습니다. 연결된 데이터베이스에 대한 새로운 주체를 만들어야 합니다.
없음 연결된 데이터베이스 보안 주체에는 다른 보안 주체가 없는 원래 데이터베이스의 보안 주체만 포함됩니다.

제어 명령을 사용하여 권한 있는 보안 주체를 구성하는 방법에 대한 자세한 내용은 팔로워 클러스터를 관리하기 위한 Control 명령을 참조하세요.

권한 관리

읽기 전용 데이터베이스 권한 관리는 모든 데이터베이스 유형과 동일합니다. Azure Portal에서 권한 관리를 참조하세요.

캐싱 정책 구성

팔로워 데이터베이스 관리자는 연결된 데이터베이스 또는 호스팅 클러스터의 해당 테이블의 캐싱 정책을 수정할 수 있습니다. 기본값은 리더 클러스터 데이터베이스의 원본 데이터베이스와 테이블 수준 캐싱 정책을 데이터베이스 및 테이블 수준 재정의 정책에 정의된 정책과 결합하는 것입니다. 예를 들어 월별 보고를 실행하기 위해 리더 데이터베이스에 대한 30일 캐싱 정책을 사용하고, 팔로워 데이터베이스에서 3일 캐싱 정책을 사용하여 문제 해결을 위해 최근 데이터만 쿼리할 수 있습니다. 컨트롤 명령을 사용하여 팔로워 데이터베이스 또는 테이블에서 캐싱 정책을 구성하는 방법에 대한 자세한 내용은 팔로워 클러스터를 관리하기 위한 Control 명령을 참조하세요.

비고

  • 리더/팔로워 클러스터의 데이터베이스 간에 충돌이 있는 경우 모든 데이터베이스 다음에 팔로워 클러스터가 오면 다음과 같이 해결됩니다.
    • 팔로워 클러스터에서 만든 DB 라는 데이터베이스가 리더 클러스터에서 만든 이름과 동일한 데이터베이스보다 우선합니다. 따라서 팔로워 클러스터의 데이터베이스 DB 를 제거하거나 이름을 변경하여 리더의 데이터베이스 DB를 포함해야 합니다.
    • 둘 이상의 리더 클러스터에서 뒤에 오는 DB 라는 데이터베이스는 리더 클러스터 중 하나에서 임의로 선택되며 두 번 이상 수행되지 않습니다.
  • 팔로워 클러스터에서 실행되는 클러스터 활동 로그 및 기록을 표시하는 명령은 팔로워 클러스터의 활동 및 기록을 표시하며 결과 집합에는 리더 클러스터 또는 클러스터의 결과가 포함되지 않습니다.
    • 예를 들어 .show queries , 팔로워 클러스터에서 실행되는 명령은 다음에 오는 데이터베이스에서 실행되는 쿼리만 표시하고 순위 클러스터의 동일한 데이터베이스에 대해 실행되는 쿼리는 표시하지 않습니다.

제한점

  • 팔로워와 리더 클러스터는 동일한 지역에 있어야 합니다.
  • 팔로우 중인 데이터베이스에 스트리밍 수집을 사용하는 경우, 스트리밍 수집 데이터를 팔로우할 수 있도록 팔로워 클러스터가 사용 가능하도록 설정되어야 합니다.
  • 고객 관리형 키를 사용한 데이터 암호화는 리더 클러스터와 팔로워 클러스터 모두에서 지원되지 않습니다.
  • 다른 클러스터에 연결된 데이터베이스는 분리하기 전에 삭제할 수 없습니다.
  • 데이터베이스를 분리하기 전에 다른 클러스터에 연결된 클러스터는 삭제할 수 없습니다.
  • 테이블 수준 공유 속성은 모든 데이터베이스를 팔로우할 때 지원되지 않습니다.

다음 단계