빠른 시작: Azure CLI 사용하여 Apache Cassandra 클러스터용 Azure Managed Instance 만들기

Azure Managed Instance for Apache Cassandra는 순수 오픈 소스 Apache Cassandra 클러스터를 위한 완전 관리형 서비스입니다. 또한 이 서비스를 사용하면 각 워크로드의 특정 요구 사항에 따라 구성을 재정의할 수 있으므로 필요한 경우 최대한의 유연성과 제어가 가능합니다.

이 빠른 시작에서는 Azure CLI 명령을 사용하여 Apache Cassandra용 Azure Managed Instance를 지원하는 클러스터를 만드는 방법을 설명합니다. 데이터 센터를 만들고 데이터 센터 내에서 노드를 스케일 업 또는 다운하는 방법도 보여 줍니다.

필수 조건

Important

이 문서를 진행하려면 Azure CLI 버전 2.30.0 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.

관리되는 인스턴스 클러스터 만들기

  1. Azure 포털

  2. Azure CLI에 구독 ID를 설정합니다.

    az account set -s <Subscription_ID>
    
  3. 다음으로, 리소스 그룹에 전용 서브넷을 사용하는 Virtual Network를 만듭니다.

    az network vnet create -n <VNet_Name> -l eastus2 -g <Resource_Group_Name> --subnet-name <Subnet Name>
    

    참고 항목

    Azure Managed Instance for Apache Cassandra를 배포하려면 인터넷 액세스가 필요합니다. 인터넷 액세스가 제한되는 환경에서는 배포가 실패합니다. Managed Cassandra가 올바르게 작동하는 데 필요한 다음과 같은 중요한 Azure 서비스에 대한 VNet 내에서 액세스가 차단되어 있는지 확인합니다.

    • Azure Storage
    • Azure KeyVault
    • Azure Virtual Machine Scale Sets
    • Azure 모니터링
    • Microsoft Entra ID
    • Azure Security
  4. 관리형 인스턴스에 필요한 몇 가지 특수 권한을 Virtual Network에 적용합니다. az role assignment create 명령을 사용하여 <subscriptionID>, <resourceGroupName><vnetName>을 적절한 값으로 바꿉니다.

    az role assignment create \
      --assignee a232010e-820c-4083-83bb-3ace5fc29d0b \
      --role 4d97b98b-1d4f-4787-a291-c67834d212e7 \
      --scope /subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Network/virtualNetworks/<vnetName>
    

    참고 항목

    이전 명령의 assigneerole 값은 고정된 값이므로 명령에 설명된 대로 이러한 값을 정확하게 입력합니다. 그렇게 하지 않으면 클러스터를 만들 때 오류가 발생합니다. 이 명령을 실행할 때 오류가 발생하면 실행할 권한이 없는 것일 수 있습니다. 관리자에게 문의하여 권한을 받으세요.

  5. 그런 다음, az managed-cassandra cluster create 명령을 사용하여 새로 만든 Virtual Network에서 클러스터를 만듭니다. delegatedManagementSubnetId 변수 값으로 다음 명령을 실행합니다.

    참고 항목

    아래에 제공할 delegatedManagementSubnetId 변수 값은 위의 명령에서 제공한 --scope 값과 정확히 동일합니다.

    resourceGroupName='<Resource_Group_Name>'
    clusterName='<Cluster_Name>'
    location='eastus2'
    delegatedManagementSubnetId='/subscriptions/<subscription ID>/resourceGroups/<resource group name>/providers/Microsoft.Network/virtualNetworks/<VNet name>/subnets/<subnet name>'
    initialCassandraAdminPassword='myPassword'
    cassandraVersion='3.11' # set to 4.0 for a Cassandra 4.0 cluster
    
    az managed-cassandra cluster create \
      --cluster-name $clusterName \
      --resource-group $resourceGroupName \
      --location $location \
      --delegated-management-subnet-id $delegatedManagementSubnetId \
      --initial-cassandra-admin-password $initialCassandraAdminPassword \
      --cassandra-version $cassandraVersion \
      --debug
    
  6. 마지막으로 az managed-cassandra datacenter create 명령을 사용하여 각 노드에 대해 4개의 P30 디스크가 연결된 표준 D8s v4 VM SKU라는 세 개의 노드를 사용하여 클러스터에 대한 데이터 센터를 만듭니다.

    dataCenterName='dc1'
    dataCenterLocation='eastus2'
    virtualMachineSKU='Standard_D8s_v4'
    noOfDisksPerNode=4
    
    az managed-cassandra datacenter create \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName \
      --data-center-name $dataCenterName \
      --data-center-location $dataCenterLocation \
      --delegated-subnet-id $delegatedManagementSubnetId \
      --node-count 3 \
      --sku $virtualMachineSKU \
      --disk-capacity $noOfDisksPerNode \
      --availability-zone false
    

    참고 항목

    --sku의 값은 다음과 같은 사용 가능한 SKU에서 선택할 수 있습니다.

    • Standard_E8s_v4
    • Standard_E16s_v4
    • Standard_E20s_v4
    • Standard_E32s_v4
    • Standard_DS13_v2
    • Standard_DS14_v2
    • Standard_D8s_v4
    • Standard_D16s_v4
    • Standard_D32s_v4

    또한 --availability-zonefalse로 설정됩니다. 가용성 영역을 사용하도록 설정하려면 이를 true로 설정합니다. 가용성 영역은 서비스의 가용성 SLA를 늘립니다. 자세한 내용은 여기에서 전체 SLA 세부 정보를 검토하세요.

    Warning

    모든 하위 지역에서 가용성 영역이 지원되지 않습니다. 가용성 영역이 지원되지 않는 하위 지역을 선택하면 배포에 실패합니다. 여기에서 지원되는 지역을 참조하세요. 또한 가용성 영역을 성공적으로 배포하는 경우 지정된 하위 지역의 모든 영역에서 컴퓨팅 리소스를 사용할 수 있습니다. 선택한 SKU 또는 용량을 모든 영역에서 사용할 수 없는 경우 배포가 실패할 수 있습니다.

  7. 데이터 센터가 생성된 후 데이터 센터의 노드를 스케일 업 또는 스케일 다운하려는 경우 az managed-cassandra datacenter update 명령을 실행합니다. node-count 매개 변수 값을 원하는 값으로 변경합니다.

    resourceGroupName='<Resource_Group_Name>'
    clusterName='<Cluster Name>'
    dataCenterName='dc1'
    dataCenterLocation='eastus2'
    
    az managed-cassandra datacenter update \
      --resource-group $resourceGroupName \
      --cluster-name $clusterName \
      --data-center-name $dataCenterName \
      --node-count 9
    

클러스터에 연결

Apache Cassandra용 Azure Managed Instance는 공용 IP 주소를 사용하여 노드를 만들지 않습니다. 새로 만든 Cassandra 클러스터에 연결하려면 가상 네트워크 내에 다른 리소스를 만들어야 합니다. 이 리소스는 Apache의 오픈 소스 쿼리 도구인 CQLSH가 설치된 가상 머신 또는 애플리케이션이 될 수 있습니다. Resource Manager 템플릿을 사용하여 Ubuntu 가상 머신을 배포할 수 있습니다.

CQLSH에서 연결

가상 머신이 배포된 후 SSH를 사용하여 컴퓨터에 연결하고 다음 명령에 표시된 것처럼 CQLSH를 설치합니다.

# Install default-jre and default-jdk
sudo apt update
sudo apt install openjdk-8-jdk openjdk-8-jre

# Install the Cassandra libraries in order to get CQLSH:
echo "deb http://archive.apache.org/dist/cassandra/debian 311x main" | sudo tee -a /etc/apt/sources.list.d/cassandra.sources.list
curl https://downloads.apache.org/cassandra/KEYS | sudo apt-key add -
sudo apt-get update
sudo apt-get install cassandra

# Export the SSL variables:
export SSL_VERSION=TLSv1_2
export SSL_VALIDATE=false

# Connect to CQLSH (replace <IP> with the private IP addresses of a node in your Datacenter):
host=("<IP>")
initial_admin_password="Password provided when creating the cluster"
cqlsh $host 9042 -u cassandra -p $initial_admin_password --ssl

애플리케이션에서 연결

CQLSH와 마찬가지로 지원되는 Apache Cassandra 클라이언트 드라이버 중 하나를 사용하여 애플리케이션에서 연결하려면 SSL 암호화를 사용하도록 설정하고 인증 확인을 사용하지 않도록 설정해야 합니다. Java, .NET, Node.jsPython을 사용하여 Azure Managed Instance for Apache Cassandra에 연결하는 샘플을 참조하세요.

클러스터 노드의 IP 주소를 적절한 도메인에 매핑하지 않으면 인증서 확인이 작동하지 않으므로 인증서 확인을 사용하지 않도록 설정하는 것이 좋습니다. 애플리케이션에 대해 SSL 인증서 확인을 수행하도록 하는 내부 정책이 있는 경우 10.0.1.5 host1.managedcassandra.cosmos.azure.com와 같은 항목을 각 노드에 대한 호스트 파일에 추가하여 이를 용이하게 할 수 있습니다. 이 접근 방식을 사용하는 경우 노드를 스케일 업할 때마다 새 항목을 추가해야 합니다.

Java의 경우 애플리케이션이 비상 대기 시간에 중요한 경우 투기적 실행 정책을 사용하도록 설정하는 것이 좋습니다. 이 작동 방식과 정책을 사용하도록 설정하는 방법을 보여 주는 데모는 여기서 찾을 수 있습니다.

참고 항목

대부분의 경우 Azure Managed Instance for Apache Cassandra에 연결하기 위해 인증서(rootCA, 노드 또는 클라이언트, 신뢰 저장소 등)를 구성하거나 설치할 필요가 없습니다. Azure Managed Instance for Apache Cassandra 인증서는 해당 환경에서 신뢰되기 때문에 클라이언트가 사용하는 런타임의 기본 신뢰 저장소와 암호를 사용하여 SSL 암호화를 사용하도록 설정할 수 있습니다(Java, .NET, Node.jsPython 샘플 참조). 드문 경우지만 인증서를 신뢰할 수 없으면 인증서를 신뢰 저장소에 추가해야 할 수도 있습니다.

클라이언트 인증서 구성(선택 사항)

클라이언트 인증서 구성은 선택 사항입니다. 위 단계를 수행했다면 클라이언트 애플리케이션은 Azure Managed Instance for Apache Cassandra에 연결할 수 있습니다. 그러나 원하는 경우 인증을 위한 클라이언트 인증서를 추가로 만들고 구성할 수도 있습니다. 일반적으로 인증서를 만드는 다음 두 가지 방법이 있습니다.

  • 자체 서명된 인증서. 각 노드에 대한 프라이빗 및 공용(CA 없음) 인증서를 의미합니다. 이 경우 모든 공용 인증서가 필요합니다.
  • CA 서명 인증서. 자체 서명 CA 또는 퍼블릭 CA일 수 있습니다. 이 경우 루트 CA 인증서(프로덕션용 SSL 인증서 준비 지침 참조) 및 모든 중간자(해당하는 경우)가 필요합니다.

클라이언트-노드 인증서 인증 또는 mTLS(상호 전송 계층 보안)를 구현하려면 Azure CLI를 통해 인증서를 제공해야 합니다. 아래 명령은 클라이언트 인증서를 Cassandra Managed Instance 클러스터의 신뢰 스토리지에 업로드하고 적용합니다(즉, cassandra.yaml 설정을 편집할 필요가 없음). 적용되면 클라이언트에서 연결할 때 클러스터는 Cassandra에서 인증서를 확인하도록 요구합니다(Cassandra client_encryption_optionsrequire_client_auth: true 참조).

resourceGroupName='<Resource_Group_Name>'
clusterName='<Cluster Name>'

az managed-cassandra cluster update \
  --resource-group $resourceGroupName \
  --cluster-name $clusterName \
  --client-certificates /usr/csuser/clouddrive/rootCert.pem /usr/csuser/clouddrive/intermediateCert.pem

문제 해결

Azure CLI를 사용하여 Virtual Network에 권한을 적용할 때 'e5007d2c-4b13-4a74-9b6a-605d99f03501'에 대한 그래프 데이터베이스에서 사용자 또는 서비스 주체를 찾을 수 없음과 같은 오류가 발생하는 경우 Azure Portal에서 동일한 권한을 수동으로 적용할 수 있습니다. 여기에서 이 작업을 수행하는 방법을 알아봅니다.

참고 항목

Azure Cosmos DB 역할 할당은 배포 목적으로만 사용됩니다. Azure Managed Instanced for Apache Cassandra에는 Azure Cosmos DB에 대한 백 엔드 종속성이 없습니다.

리소스 정리

더 이상 필요하지 않은 경우 az group delete 명령을 사용하여 리소스 그룹, 관리형 인스턴스 및 모든 관련 리소스를 제거할 수 있습니다.

az group delete --name <Resource_Group_Name>

다음 단계

이 빠른 시작에서는 CLI를 사용하여 Apache Cassandra용 Azure Managed Instance를 만드는 방법을 알아보았습니다. 이제 클러스터 사용을 시작할 수 있습니다.