자습서: API for Cassandra 계정으로 데이터 마이그레이션

적용 대상: Cassandra

개발자는 온-프레미스 또는 클라우드에서 실행되는 기존 Cassandra 워크로드를 가질 수 있으며 Azure로 마이그레이션할 수 있습니다. 이러한 워크로드를 Azure Cosmos DB의 API for Cassandra 계정으로 마이그레이션할 수 있습니다. 이 자습서는 Apache Cassandra 데이터를 Azure Cosmos DB의 API for Cassandra 계정으로 마이그레이션할 수 있는 다양한 옵션에 대한 지침을 제공합니다.

이 자습서에서 다루는 작업은 다음과 같습니다.

  • 마이그레이션 계획
  • 마이그레이션을 위한 필수 구성 요소
  • cqlshCOPY 명령을 사용하여 데이터 마이그레이션
  • Spark를 사용하여 데이터 마이그레이션

Azure 구독이 아직 없는 경우 시작하기 전에 무료 계정을 만듭니다.

마이그레이션을 위한 필수 구성 요소

  • 처리량 수요 예측: 데이터를 Azure Cosmos DB의 API for Cassandra 계정으로 마이그레이션하기 전에 워크로드에 대한 처리량 수요를 예측해야 합니다. 일반적으로 CRUD 작업에 필요한 평균 처리량부터 시작한 다음, 추출, 변환 및 로드 또는 급증하는 작업에 필요한 추가 처리량을 포함하는 것이 좋습니다. 마이그레이션을 계획하려면 다음과 같은 세부 정보가 필요합니다.

    • 기존 데이터 크기 또는 예상 데이터 크기: 최소 데이터베이스 크기 및 처리량 요구 사항을 정의합니다. 새 애플리케이션의 데이터 크기를 예측할 경우 데이터가 행 전체에 균일하게 분포되어 있다고 가정하고 데이터 크기를 곱하여 값을 추정하면 됩니다.

    • 필요한 처리량: 대략적인 읽기(쿼리/가져오기) 및 쓰기(업데이트/삭제/삽입) 작업의 처리량 속도. 이 값은 안정적인 상태 데이터 크기와 함께 필요한 요청 단위를 컴퓨팅하는 데 필요합니다.

    • 스키마:cqlsh를 통해 기존 Cassandra 클러스터에 연결하고 Cassandra의 스키마를 내보냅니다.

      cqlsh [IP] "-e DESC SCHEMA" > orig_schema.cql
      

      기존 워크로드의 요구 사항을 확인한 후에는 수집한 처리량 요구 사항에 따라 Azure Cosmos DB 계정, 데이터베이스 및 컨테이너를 만듭니다.

    • 작업에 대한 RU 요금 확인: API for Cassandra에서 지원되는 SDK 중 하나를 사용하여 RU를 확인할 수 있습니다. 다음 예제는 RU 비용 가져오기의 .NET 버전을 보여 줍니다.

      var tableInsertStatement = table.Insert(sampleEntity);
      var insertResult = await tableInsertStatement.ExecuteAsync();
      
      foreach (string key in insertResult.Info.IncomingPayload)
        {
           byte[] valueInBytes = customPayload[key];
           double value = Encoding.UTF8.GetString(valueInBytes);
           Console.WriteLine($"CustomPayload:  {key}: {value}");
        }
      
  • 필요한 처리량 할당: Azure Cosmos DB는 요구 사항이 증가함에 따라 스토리지 및 처리량을 자동으로 조정할 수 있습니다. Azure Cosmos DB 요청 단위 계산기를 사용하여 처리량 수요를 예측할 수 있습니다.

  • API for Cassandra 계정에서 테이블 만들기: 데이터 마이그레이션을 시작하기 전에 Azure Portal 또는 cqlsh에서 모든 테이블을 미리 만듭니다. 데이터베이스 수준 처리량이 있는 Azure Cosmos DB 계정으로 마이그레이션하는 경우에는 컨테이너를 만들 때 파티션 키를 제공해야 합니다.

  • 처리량 늘리기: 데이터 마이그레이션 기간은 Azure Cosmos DB의 테이블에 대해 프로비전한 처리량에 따라 다릅니다. 마이그레이션 기간에 대한 처리량을 늘립니다. 처리량이 높을수록 속도 제한을 피하고 마이그레이션 시간을 단축할 수 있습니다. 마이그레이션을 완료한 후에는 비용을 절약하기 위해 처리량을 줄이세요. 또한 Azure Cosmos DB 계정은 원본 데이터베이스와 같은 지역에 두는 것이 좋습니다.

  • TLS 사용: Azure Cosmos DB에는 엄격한 보안 요구 사항과 표준이 있습니다. 계정과 상호 작용하는 경우 TLS를 사용해야 합니다. SSH와 함께 CQL을 사용하는 경우 TLS 정보를 제공할 수 있는 옵션이 있습니다.

데이터 마이그레이션 옵션

cqlshCOPY 명령을 사용하거나 Spark를 사용하여 기존 Cassandra 워크로드에서 Azure Cosmos DB로 데이터를 이동할 수 있습니다.

cqlsh COPY 명령을 사용한 데이터 마이그레이션

CQL COPY 명령을 사용하여 로컬 데이터를 Azure Cosmos DB의 API for Cassandra 계정으로 복사합니다.

Warning

CQL COPY만 사용하여 작은 데이터 세트를 마이그레이션합니다. 큰 데이터 세트를 이동하려면 Spark를 사용하여 데이터를 마이그레이션합니다.

  1. csv 파일에 올바른 파일 구조가 포함되어 있는지 확인하려면 COPY TO 명령을 사용하여 데이터를 원본 Cassandra 테이블에서 csv 파일로 직접 내보냅니다(cqlsh가 적절한 자격 증명을 사용하여 원본 테이블에 연결되어 있는지 확인).

    COPY exampleks.tablename TO 'data.csv' WITH HEADER = TRUE;   
    
  2. 이제 API for Cassandra 계정의 연결 문자열 정보를 가져옵니다.

    • Azure Portal에 로그인하고 Azure Cosmos DB 계정으로 이동합니다.

    • 연결 문자열 창을 엽니다. cqlsh에서 API for Cassandra 계정에 연결하는 데 필요한 모든 정보가 표시됩니다.

  3. 포털의 연결 정보를 사용하여 cqlsh에 로그인합니다.

  4. CQLCOPY FROM 명령을 사용하여 data.csv를 복사합니다(cqlsh가 설치된 사용자 루트 디렉터리에 계속 있음).

    COPY exampleks.tablename FROM 'data.csv' WITH HEADER = TRUE;
    

참고 항목

API for Cassandra는 Cassandra 3.11과 함께 제공되는 프로토콜 버전 4를 지원합니다. API에서 이후 프로토콜 버전을 사용하는 데 문제가 있을 수 있습니다. 최신 프로토콜 버전을 사용한 COPY FROM은 루프로 이동하여 중복 행을 반환할 수 있습니다. cqlsh 명령에 프로토콜 버전을 추가합니다.

cqlsh <USERNAME>.cassandra.cosmos.azure.com 10350 -u <USERNAME> -p <PASSWORD> --ssl --protocol-version=4
CQL 복사 명령에 처리량 제한 옵션 추가

cqlsh의 COPY 명령은 Azure Cosmos DB로 문서를 수집하는 속도를 제어하는 다양한 매개 변수를 지원합니다.

COPY 명령에 대한 기본 구성은 매우 빠른 속도로 데이터를 수집하려고 시도하며 CosmosDB의 속도 제한 동작을 고려하지 않습니다. 컬렉션에 구성된 처리량에 따라 CHUNKSIZE 또는 INGESTRATE를 줄여야 합니다.

문서 또는 레코드 크기가 1KB인 경우 20,000RU의 컬렉션에 대해 아래 구성(최소)을 사용하는 것이 좋습니다.

  • CHUNKSIZE = 100
  • INGESTRATE = 500
  • MAXATTEMPTS = 10
명령 예
  • API for Cassandra에서 로컬 csv 파일로 데이터 복사
COPY standard1 (key, "C0", "C1", "C2", "C3", "C4") TO 'backup.csv' WITH PAGESIZE=100 AND MAXREQUESTS=1 ;
  • 로컬 csv 파일에서 API for Cassandra로 데이터 복사
COPY standard2 (key, "C0", "C1", "C2", "C3", "C4") FROM 'backup.csv' WITH CHUNKSIZE=100 AND INGESTRATE=100 AND MAXATTEMPTS=10;

Important

CQLSH COPY의 오픈 소스 Apache Cassandra 버전만 지원됩니다. Datastax Enterprise(DSE) 버전의 CQLSH에 오류가 발생할 수 있습니다.

Spark를 사용하여 데이터 마이그레이션

다음 단계를 따라 Spark를 사용하여 데이터를 API for Cassandra 계정으로 마이그레이션합니다.

  1. Azure Databricks 클러스터 또는 Azure HDInsight 클러스터를 프로비저닝합니다.

  2. 데이터를 대상 API for Cassandra 엔드포인트로 이동합니다. Azure Databricks를 사용한 마이그레이션은 이 방법 가이드를 참조하세요.

Azure 가상 머신이나 다른 클라우드의 기존 클러스터에 데이터가 있는 경우 Spark 작업을 사용하여 데이터를 마이그레이션하는 것이 좋습니다. 이렇게 하려면 Spark를 일회성 또는 정기 수집을 위한 중개자로 설정해야 합니다. 온-프레미스 환경과 Azure 사이에 Azure ExpressRoute 연결을 사용하면 이 마이그레이션 속도를 높일 수 있습니다.

실시간 마이그레이션

네이티브 Apache Cassandra 클러스터에서 가동 중지 시간 0 마이그레이션이 필요한 경우 기록 데이터를 마이그레이션하려면 이중 쓰기 및 별도의 대량 데이터 로드를 구성하는 것이 좋습니다. 응용 프로그램 코드 변경을 최소화할 수 있도록 오픈 소스 이중 쓰기 프록시를 제공하여 이 패턴을 보다 간단하게 구현했습니다. 이 패턴을 구현하는 방법에 대한 자세한 내용은 이중 쓰기 프록시 및 Apache Spark를 사용하여 라이브 마이그레이션에 대한 방법 문서를 참조하세요.

리소스 정리

더 이상 필요 없는 경우 리소스 그룹, Azure Cosmos DB 계정 및 모든 관련 리소스를 삭제할 수 있습니다. 삭제하려면 가상 머신의 리소스 그룹을 선택하고, 삭제를 선택한 다음, 삭제할 리소스 그룹의 이름을 확인합니다.

다음 단계

이 자습서에서는 Azure Cosmos DB의 API for Cassandra 계정으로 데이터를 마이그레이션하는 방법을 알아보았습니다. 이제 Azure Cosmos DB의 다른 개념에 대해 알아볼 수 있습니다.