Azure Managed Instance for Apache Cassandra는 순수 오픈 소스 Apache Cassandra 클러스터를 위한 완전 관리형 서비스입니다. 또한 이 서비스를 사용하면 각 워크로드의 특정 요구 사항에 따라 최대한의 유연성과 제어를 위해 구성을 재정의할 수 있습니다.
이 빠른 시작에서는 Azure CLI 명령을 사용하여 Apache Cassandra용 Azure Managed Instance를 사용하여 클러스터를 만드는 방법을 보여 줍니다. 또한 데이터 센터 내에서 데이터 센터를 만들고 노드를 확장 또는 축소하는 방법도 보여 줍니다.
필수 구성 요소
Azure Cloud Shell에서 Bash 환경을 사용합니다. 자세한 내용은 Azure Cloud Shell 시작을 참조하세요.
CLI 참조 명령을 로컬에서 실행하려면 Azure CLI를 설치합니다. Windows 또는 macOS에서 실행 중인 경우 Docker 컨테이너에서 Azure CLI를 실행하는 것이 좋습니다. 자세한 내용은 Docker 컨테이너에서 Azure CLI를 실행하는 방법을 참조하세요.
로컬 설치를 사용하는 경우 az login 명령을 사용하여 Azure CLI에 로그인합니다. 인증 프로세스를 완료하려면 터미널에 표시되는 단계를 수행합니다. 다른 로그인 옵션은 Azure CLI를 사용하여 Azure에 인증을 참조하세요.
메시지가 표시되면 처음 사용할 때 Azure CLI 확장을 설치합니다. 확장에 대한 자세한 내용은 Azure CLI로 확장 사용 및 관리를 참조하세요.
az version을 실행하여 설치된 버전과 종속 라이브러리를 찾습니다. 최신 버전으로 업그레이드하려면 az upgrade를 실행합니다.
- 자체 호스팅 또는 온-프레미스 환경에 연결된 Azure 가상 네트워크를 사용합니다. 온-프레미스 환경을 Azure에 연결하는 방법에 대한 자세한 내용은 Azure에 온-프레미스 네트워크 연결을 참조하세요.
- Azure 구독이 아직 없는 경우 시작하기 전에 체험 계정을 만듭니다.
중요합니다
이 문서에는 Azure CLI 버전 2.30.0 이상이 필요합니다. Azure Cloud Shell을 사용하는 경우 최신 버전이 이미 설치되어 있습니다.
관리되는 인스턴스 클러스터 만들기
Azure Portal에 로그인합니다.
Azure CLI에서 구독 ID를 설정합니다.
az account set --subscription <Subscription_ID>리소스 그룹에 전용 서브넷이 있는 가상 네트워크를 만듭니다.
az network vnet create --name <VNet_Name> --location eastus2 \ --resource-group <Resource_Group_Name> --subnet-name <Subnet Name>Apache Cassandra용 Azure Managed Instance 인스턴스를 배포하려면 인터넷에 액세스해야 합니다. 인터넷 액세스가 제한되는 환경에서는 배포가 실패합니다. Apache Cassandra용 Azure Managed Instance가 제대로 작동하는 데 필요한 다음 Azure 서비스에 대한 가상 네트워크의 액세스를 차단하지 않는지 확인합니다.
- Azure Storage
- Azure Key Vault (애저 키 볼트)
- Azure Virtual Machine Scale Sets (Azure 가상 머신 스케일 세트)
- Azure Monitor (Azure 모니터)
- Microsoft Entra ID (마이크로소프트 엔트라 ID)
- 클라우드용 Microsoft Defender
가상 네트워크에 이러한 특정 권한을 적용합니다. 관리되는 인스턴스에는 그들이 필요합니다.
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>assignee값과role값은 고정 값입니다. 명령에 설명된 대로 정확하게 이러한 값을 입력합니다. 이렇게 하지 않으면 클러스터를 만들 때 오류가 발생합니다. 이 명령을 실행할 때 오류가 발생하면 실행할 수 있는 권한이 없을 수 있습니다. 사용 권한은 Azure 관리자에게 문의하세요.az managed-cassandra cluster create 명령을 사용하여 새로 만든 가상 네트워크에서 클러스터를 만듭니다. 변수 값을 사용하여 다음 명령을 실행합니다
delegatedManagementSubnetId. 값은delegatedManagementSubnetId사용 권한이 적용된 것과 동일한 가상 네트워크 이름입니다.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='5.0' # 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 \ --debug3개의 VM(가상 머신)이 있는 클러스터에 대한 데이터 센터를 만듭니다. 다음 구성을 사용합니다.
- VM 크기: 표준 E8s v5
- 데이터 디스크: 배포된 각 VM에 연결된 4개의 P30 디스크
모든 정보가 준비되면 az managed-cassandra datacenter create 명령을 사용합니다.
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사용 가능한 다음 VM 크기 중에서 값을
--sku선택합니다.- Standard_E8s_v5
- Standard_E16s_v5
- Standard_E20s_v5
- Standard_E32s_v5
기본적으로
--availability-zone는false값으로 설정됩니다. 가용성 영역을 사용하도록 설정하려면 으로true설정합니다. 가용성 영역은 서비스의 가용성을 높이는 데 도움이 됩니다. 자세한 내용은 온라인 서비스에 대한 서비스 수준 계약을 참조하세요.가용성 영역은 모든 Azure 지역에서 지원되지 않습니다. 가용성 영역이 지원되지 않는 지역을 선택하면 배포가 실패합니다. 지원되는 지역은 Azure 지역 목록을 참조하세요.
가용성 영역의 성공적인 배포는 선택한 지역의 모든 영역에서 컴퓨팅 리소스의 가용성에 따라 달라질 수 있습니다. 선택한 VM 크기를 선택한 지역에서 사용할 수 없는 경우 배포가 실패합니다.
데이터 센터를 만든 후 az managed-cassandra 데이터 센터 업데이트 명령을 실행하여 클러스터를 축소하거나 스케일 업할 수 있습니다. 매개 변수 값을
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 클러스터에 연결하려면 동일한 가상 네트워크 내에 다른 리소스를 만들어야 합니다. 이 리소스는 CQLSH(Cassandra Query Language Shell) 가 설치된 애플리케이션 또는 VM일 수 있습니다. CQLSH는 Apache 오픈 소스 쿼리 도구입니다.
Azure Resource Manager 템플릿을 사용하여 Ubuntu VM을 배포할 수 있습니다.
Python 버전에서 알려진 몇 가지 문제로 인해 Python3.10.12 또는 Python 가상 환경 과 함께 제공되는 Ubuntu 22.04 이미지를 사용하여 CQLSH를 실행하는 것이 좋습니다.
CQLSH에서 연결
VM이 배포된 후 Secure Shell을 사용하여 컴퓨터에 연결하고 CQLSH를 설치합니다. 다음 명령을 사용합니다.
# Install default-jre and default-jdk
sudo apt update
sudo apt install openjdk-8-jdk openjdk-8-jre
여전히 지원되는 Cassandra 버전을 확인하고 필요한 버전을 선택합니다. 안정적인 버전을 사용하는 것이 좋습니다.
CQLSH를 가져오기 위해 Cassandra 라이브러리를 설치합니다. Cassandra 설명서의 공식 단계를 따릅니다.
애플리케이션에서 연결
CQLSH와 마찬가지로 지원되는 Apache Cassandra 클라이언트 드라이버 중 하나를 사용하여 애플리케이션에서 연결하는 경우 TLS/SSL(전송 계층 보안/보안 소켓 계층) 암호화를 사용하도록 설정해야 하며 인증서 확인을 사용하지 않도록 설정해야 합니다. 샘플은 Java, .NET, Node.js및 Python을 참조 하세요.
클러스터 노드의 IP 주소를 적절한 도메인에 매핑하지 않는 한 작동하지 않으므로 인증서 확인을 사용하지 않도록 설정하는 것이 좋습니다. 내부 정책에서 모든 애플리케이션에 대해 TLS/SSL 인증서 확인을 수행해야 하는 경우 각 노드에 대한 호스트 파일과 같은 10.0.1.5 host1.managedcassandra.cosmos.azure.com 항목을 추가하여 이 설정을 용이하게 합니다. 이 방법을 사용하는 경우 노드를 확장할 때마다 새 항목을 추가해야 합니다.
Java의 경우 애플리케이션이 비상 대기 시간에 민감한 투기적 실행 정책을 사용하도록 설정하는 것이 좋습니다. 이 방법의 작동 방식과 정책을 사용하도록 설정하는 방법을 보여 주는 데모는 투기적 실행 정책 구현을 참조하세요.
일반적으로 Apache Cassandra용 Azure Managed Instance에 연결하기 위해 인증서(예: rootCA, nodeclient또는truststore)를 구성할 필요가 없습니다. TLS/SSL 암호화는 기본 신뢰 저장소 및 클라이언트가 선택한 런타임 암호를 사용합니다. 샘플 코드는 Java, .NET, Node.js및 Python)을 참조 하세요. 인증서는 기본적으로 신뢰할 수 있습니다. 그렇지 않은 경우 트러스트 저장소에 추가합니다.
클라이언트 인증서 구성(선택 사항)
클라이언트 인증서 구성은 선택 사항입니다. 클라이언트 애플리케이션은 이전 단계를 수행한 후 Apache Cassandra용 Azure Managed Instance에 연결할 수 있습니다. 원하는 경우 인증을 위해 클라이언트 인증서를 만들고 구성할 수도 있습니다. 일반적으로 인증서를 만드는 방법에는 두 가지가 있습니다.
- 자체 서명된 인증서: 각 노드에 대한 CA(인증 기관)가 없는 프라이빗 및 공용 인증서입니다. 이 경우 모든 공용 인증서가 필요합니다.
- CA에서 서명한 인증서: 자체 서명된 CA 또는 공용 CA에서 발급한 인증서입니다. 이 설정의 경우 루트 CA 인증서와 모든 중간 인증서(해당하는 경우)가 필요합니다. 자세한 내용은 프로덕션용 SSL 인증서 준비를 참조하세요.
클라이언트-노드 인증서 인증 또는 상호 전송 계층 보안을 구현하려면 Azure CLI를 사용하여 인증서를 제공합니다. 다음 명령은 Apache Cassandra 클러스터용 Azure Managed Instance에 대한 신뢰 저장소에 클라이언트 인증서를 업로드하고 적용합니다. 설정 cassandra.yaml을 수정할 필요가 없습니다. 인증서가 적용된 후 클러스터는 Cassandra가 클라이언트 연결 중에 인증서를 확인해야 합니다. 자세한 내용은 require_client_auth: true Cassandra client_encryption_options 참조하세요.
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를 사용하여 가상 네트워크에 권한을 적용할 때 오류가 발생하는 경우 Azure Portal에서 수동으로 동일한 권한을 적용할 수 있습니다. 이러한 오류의 예로는 "e5007d2c-4b13-4a74-9b6a-605d99f03501에 대한 그래프 데이터베이스에서 사용자 또는 서비스 주체를 찾을 수 없습니다."입니다. 자세한 내용은 Azure 포털을 사용하여 Azure Cosmos DB 서비스 주체 추가를 참조하세요.
Azure Cosmos DB 역할 할당은 배포 목적으로만 사용됩니다. Apache Cassandra용 Azure Managed Instanced에는 Azure Cosmos DB에 대한 백 엔드 종속성이 없습니다.
리소스 정리
리소스가 더 이상 필요하지 않은 경우 명령을 사용하여 az group delete 리소스 그룹, 관리되는 인스턴스 및 모든 관련 리소스를 제거합니다.
az group delete --name <Resource_Group_Name>
다음 단계
이 빠른 시작에서는 Azure CLI를 사용하여 Apache Cassandra용 Azure Managed Instance 클러스터를 만드는 방법을 알아보았습니다. 이제 클러스터 사용을 시작할 수 있습니다.