Cassandra 프록시를 사용하여 Spanner Omni에 연결

Apache Cassandra 프록시를 Spanner Omni에 연결하여 기존 Cassandra 애플리케이션이 Cassandra Query Language(CQL)를 사용하여 Spanner Omni와 상호작용하도록 합니다. 이 통합을 사용하면 Cassandra 클라이언트 애플리케이션과의 호환성을 유지하면서 Spanner Omni 기능을 사용할 수 있습니다.

프록시를 연결하려면 다음 단계를 따르세요.

  1. Cassandra-to-Spanner 프록시 저장소를 클론합니다.

  2. 제공된 스키마 변환기 스크립트를 사용하여 Cassandra 스키마 정의를 Spanner Omni 스키마로 변환합니다. 이 스크립트는 일반 텍스트, TLS, mTLS 보안 모드를 지원합니다.

  3. Spanner Omni 엔드포인트 및 보안 설정으로 구성 파일을 업데이트하여 프록시 어댑터를 구성합니다.

  4. 프록시를 빌드하고 실행합니다. 그런 다음 cqlsh를 사용하여 연결하여 작업을 시작합니다.

자세한 내용은 Spanner 문서의 Cassandra 인터페이스를 참고하세요.

시작하기 전에

시작하기 전에 다음 요구사항을 완료하세요.

  • Spanner Omni 배포를 구성하고 데이터베이스를 만듭니다.

  • 필요한 환경 변수를 설정하여 환경 내에서 다중화 세션을 사용 설정합니다.

  • 로컬 머신에 Go가 설치되어 있는지 확인합니다.

  • 사용 고려사항은 Cassandra-to-Spanner 프록시의 제한사항을 참고하세요.

  • 프록시와 Spanner Omni 간 통신에 사용할 보안 모드 (일반 텍스트, TLS 또는 mTLS)를 설정합니다.

환경 변수 설정하기

Cassandra 프록시를 사용하려면 필요한 환경 변수를 설정하여 다중화 세션을 사용 설정해야 합니다. 다중화 세션은 Spanner Omni 연결에 필요하지만 Spanner 클라이언트 라이브러리 및 드라이버에서는 기본적으로 사용 중지되어 있습니다.

다음 환경 변수를 설정합니다.

GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_FOR_RW=true
GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_PARTITIONED_OPS=true
GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS=true

저장소 복제

프록시를 지원하는 저장소를 클론하고 머신에 Go가 설치되어 있는지 확인합니다.

git clone https://github.com/cloudspannerecosystem/cassandra-to-spanner-proxy.git

// Ensure all Go modules are installed
go mod tidy

Cassandra 스키마 변환

모든 Cassandra 테이블을 미리 만듭니다. schema_converter/cql_to_spanner_schema_converter.go 스크립트는 CQL 파일의 Cassandra CREATE TABLE 쿼리를 Spanner CREATE TABLE 쿼리로 변환합니다.

  • --database DATABASE_ID: Spanner Omni에서 대상 데이터베이스 이름을 지정합니다. DATABASE_ID을 데이터베이스 이름으로 바꿉니다.

  • --cql PATH_TO_CQL_FILE: Cassandra 스키마 정의가 포함된 CQL 파일의 경로를 지정합니다.

  • --endpoint ENDPOINT: Spanner Omni 엔드포인트 주소를 지정합니다. ENDPOINT을 Spanner Omni 엔드포인트로 바꿉니다.

    go run schema_converter/cql_to_spanner_schema_converter.go --database DATABASE_ID --cql PATH_TO_CQL_FILE --endpoint ENDPOINT
    

    스키마 변환기는 일반 텍스트, TLS, mTLS의 세 가지 Spanner Omni 보안 모드를 모두 지원합니다. 각 보안 모드에는 추가 매개변수가 필요합니다.

  • 일반 텍스트 모드의 경우 --usePlainText 플래그를 사용합니다.

    go run schema_converter/cql_to_spanner_schema_converter.go --database DATABASE_ID --cql PATH_TO_CQL_FILE --endpoint ENDPOINT --usePlainText
    
  • TLS 모드의 경우 CA 인증서 파일의 경로와 함께 --caCertificate 플래그를 사용합니다.

    go run schema_converter/cql_to_spanner_schema_converter.go --database DATABASE_ID --cql PATH_TO_CQL_FILE --endpoint ENDPOINT --caCertificate PATH_TO_CA_CRT
    
  • mTLS 모드의 경우 --caCertificate, --clientCertificate, --clientKey 플래그를 해당 경로와 함께 사용합니다.

    go run schema_converter/cql_to_spanner_schema_converter.go --database DATABASE_ID --cql PATH_TO_CQL_FILE --endpoint ENDPOINT --caCertificate PATH_TO_CA_CRT --clientCertificate PATH_TO_CLIENT_CERT --clientKey PATH_TO_CLIENT_KEY
    

    스크립트는 TableConfigurations 테이블이 아직 없는 경우 이 테이블도 만듭니다. 이 표에서는 Cassandra 테이블 및 열의 스키마 메타데이터를 추적합니다.

    CREATE TABLE IF NOT EXISTS TableConfigurations (
        `KeySpaceName` STRING(MAX),
        `TableName` STRING(MAX),
        `ColumnName` STRING(MAX),
        `ColumnType` STRING(MAX),
        `IsPrimaryKey` BOOL,
        `PK_Precedence` INT64,
    ) PRIMARY KEY (TableName, ColumnName, KeySpaceName);
    

프록시 어댑터 구성

스키마 변환기 스크립트를 사용하여 Cassandra 테이블을 만든 후 테이블에서 작업을 실행하도록 어댑터를 구성합니다. 어댑터를 설정하려면 다음 단계를 따르세요.

저장소의 루트 디렉터리에 있는 config.yaml 파일을 사용 가능한 구성 옵션으로 업데이트합니다. 어댑터 구성 파일에서는 관련 보안 모드 옵션과 함께 Spanner Omni 엔드포인트를 정의해야 합니다.

# [Optional] endpoint configuration for spanner
endpoint: ENDPOINT

# [Optional] If set to True, will connect to endpoint over plain text
usePlainText: False

# [Optional] CA certificate path for TLS and mTLS configuration
caCertificate: PATH_TO_CA_CRT

# [Optional] client certificate path for mTLS configuration
clientCertificate: PATH_TO_CLIENT_CERT

# [Optional] client key path for mTLS configuration
clientKey: PATH_TO_CLIENT_KEY

다음 구성 설정은 어댑터를 실행하는 최소 구성을 제공합니다.

cassandra_to_spanner_configs:
  # [Optional] endpoint configuration for spanner
  endpoint: ENDPOINT

  # Uncomment the options as required by the security mode of the Spanner Omni deployment
  # [Optional] If set to True, will connect to endpoint over plain text
  # usePlainText: False
  # [Optional] CA certificate path for TLS and mTLS configuration
  # caCertificate: /tmp/ca.crt
  # [Optional] client certificate path for mTLS configuration
  # clientCertificate: /tmp/client.crt
  # [Optional] client key path for mTLS configuration
  # clientKey: /tmp/client.key

listeners:
  - name: CLUSTER_NAME
    port: 9042
    spanner:
      databaseId: DATABASE_ID

프록시 빌드 및 실행

프록시 어댑터를 구성한 후 다음 명령어를 사용하여 프록시를 빌드하고 실행합니다.

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o cassandra-to-spanner-proxy .
./cassandra-to-spanner-proxy

다음 명령어를 사용하여 셸을 통해 프록시에 연결합니다.

./cqlsh localhost 9042