다음을 통해 공유


자습서: Cassandra 계정에 대한 API로 데이터 마이그레이션

적용 대상: 카산드라

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

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

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

Azure 구독이 없는 경우, 시작하기 전에 무료 계정을 만드십시오.

마이그레이션을 위한 필수 조건

  • 처리량 요구 사항 예측: Azure Cosmos DB에서 Cassandra용 API 계정으로 데이터를 마이그레이션하기 전에 워크로드의 처리량 요구 사항을 예측합니다. 일반적으로 CRUD(만들기, 읽기, 업데이트 및 삭제) 작업에 필요한 평균 처리량부터 시작합니다. 그런 다음 ETL(추출, 변환 및 로드) 또는 일시적으로 부하가 급증하는 작업에 필요한 추가 처리량을 포함합니다. 마이그레이션을 계획하려면 다음과 같은 세부 정보가 필요합니다.

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

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

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

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

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

    • 작업에 대한 RU(요청 단위) 요금을 확인합니다 . Cassandra용 API에서 지원하는 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 RU 계산기를 사용하여 처리량 요구 사항을 예측할 수 있습니다.

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

  • 처리량 늘리기: 데이터 마이그레이션 기간은 Azure Cosmos DB의 테이블에 대해 프로비전한 처리량에 따라 다릅니다. 마이그레이션하는 동안 처리량을 늘입니다. 처리량이 높으면 속도 제한을 방지하고 더 적은 시간 안에 마이그레이션할 수 있습니다. 마이그레이션을 완료한 후 처리량을 줄여 비용을 절감합니다. 또한 Azure Cosmos DB 계정은 원본 데이터베이스와 같은 지역에 두는 것이 좋습니다.

  • TLS(전송 계층 보안) 사용: Azure Cosmos DB에는 엄격한 보안 요구 사항 및 표준이 있습니다. 계정과 상호 작용할 때 TLS를 사용하도록 설정합니다. Secure Shell에서 CQL(Cassandra 쿼리 언어)을 사용하는 경우 TLS 정보를 제공할 수 있습니다.

데이터 마이그레이션 옵션

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

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

경고

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

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

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

    1. Azure Portal에 로그인하고 Azure Cosmos DB 계정으로 이동합니다.
    2. 연결 문자열 창을 엽니다. 여기에서는 cqlsh의 API for Cassandra 계정에 연결하는 데 필요한 모든 정보를 확인할 수 있습니다.
  3. Azure Portal에서 cqlsh 연결 정보를 사용하여 로그인합니다.

  4. CQL COPY FROM 명령을 사용하여 data.csv을 복사합니다. 이 파일은 아직 cqlsh가 설치된 사용자 루트 디렉터리에 있습니다.

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

참고

Cassandra용 API는 Cassandra 3.11과 함께 제공되는 프로토콜 버전 4를 지원합니다. 이후 프로토콜 버전을 API와 함께 사용하는 경우 문제가 있을 수 있습니다. 이후 프로토콜 버전을 사용하면 명령이 COPY FROM 루프로 이동하여 중복 행을 반환할 수 있습니다.

명령 cqlshprotocol-version을(를) 추가합니다.

cqlsh <USERNAME>.cassandra.cosmos.azure.com 10350 -u <USERNAME> -p <PASSWORD> --ssl --protocol-version=4

CQL COPY 명령에 처리량 제한 옵션 추가

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

명령에 대한 기본 구성은 COPY 빠른 속도로 데이터를 수집하려고 시도합니다. Azure Cosmos DB의 속도 제한 동작은 고려하지 않습니다. 처리량 설정에 따라 컬렉션에서 CHUNKSIZE 줄이거나 INGESTRATE을 선택합니다.

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

  • CHUNKSIZE = 100
  • INGESTRATE = 500
  • MAXATTEMPTS = 10
예제 명령
  • Cassandra용 API에서 로컬 .csv 파일로 데이터를 복사합니다.

    COPY standard1 (key, "C0", "C1", "C2", "C3", "C4") TO 'backup.csv' WITH PAGESIZE=100 AND MAXREQUESTS=1 ;
    
  • 로컬 .csv 파일에서 Cassandra용 API로 데이터를 복사합니다.

    COPY standard2 (key, "C0", "C1", "C2", "C3", "C4") FROM 'backup.csv' WITH CHUNKSIZE=100 AND INGESTRATE=100 AND MAXATTEMPTS=10;
    

중요합니다

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

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

Spark를 사용하여 Cassandra용 API 계정으로 데이터를 마이그레이션하려면 다음 단계를 수행합니다.

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

  2. Cassandra 엔드포인트에 대한 대상 API로 데이터를 이동합니다. 자세한 내용은 Cassandra에서 Apache Cassandra용 Azure Cosmos DB 계정으로 데이터 마이그레이션을 참조하세요.

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

실시간 마이그레이션

네이티브 Apache Cassandra 클러스터에서 가동 중지 시간이 0으로 마이그레이션되어야 하는 경우 기록 데이터를 마이그레이션하도록 이중 쓰기 및 별도의 대량 데이터 로드를 구성하는 것이 좋습니다. 오픈 소스 이중 쓰기 프록시 를 사용하여 애플리케이션 코드 변경을 최소화하는 경우 이 패턴을 구현하는 것이 더 간단합니다. 자세한 내용은 Apache Cassandra에서 Azure Cosmos DB for Apache Cassandra로 라이브 마이그레이션 데이터를 참조하세요.

리소스 정리

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

다음 단계

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