Usar o proxy do Cassandra para se conectar ao Spanner Omni

Conecte o proxy do Apache Cassandra ao Spanner Omni para permitir que seus aplicativos Cassandra interajam com o Spanner Omni usando a linguagem de consulta do Cassandra (CQL). Essa integração permite usar os recursos do Spanner Omni, mantendo a compatibilidade com os aplicativos cliente do Cassandra.

Para conectar o proxy, siga estas etapas gerais:

  1. Clone o repositório de proxy do Cassandra para o Spanner.

  2. Converta as definições de esquema do Cassandra para o esquema do Spanner Omni usando o script de conversor de esquema fornecido, que oferece suporte aos modos de segurança de texto simples, TLS e mTLS.

  3. Configure o adaptador de proxy atualizando o arquivo de configuração com o endpoint e as configurações de segurança do Spanner Omni.

  4. Crie e execute o proxy. Em seguida, conecte-se a ele usando cqlsh para iniciar as operações.

Para mais informações, consulte a interface do Cassandra na documentação do Spanner.

Antes de começar

Antes de começar, atenda aos seguintes requisitos:

  • Configure uma implantação do Spanner Omni e crie um banco de dados.

  • Ative sessões multiplexadas no seu ambiente definindo as variáveis de ambiente necessárias .

  • Verifique se o Go está instalado na sua máquina local.

  • Leia as limitações do proxy do Cassandra para o Spanner para considerações de uso.

  • Estabeleça o modo de segurança (texto simples, TLS ou mTLS) que você quer usar para a comunicação entre o proxy e o Spanner Omni.

Defina as variáveis de ambiente

Para usar o proxy do Cassandra, é necessário ativar sessões multiplexadas definindo as variáveis de ambiente necessárias. As sessões multiplexadas são necessárias para conexões do Spanner Omni, mas ficam desativadas por padrão nas bibliotecas de cliente e nos drivers do Spanner.

Configure as variáveis de ambiente a seguir:

GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_FOR_RW=true
GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS_PARTITIONED_OPS=true
GOOGLE_CLOUD_SPANNER_MULTIPLEXED_SESSIONS=true

Clonar o repositório

Clone o repositório que oferece suporte ao proxy e verifique se o Go está instalado na sua máquina:

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

// Ensure all Go modules are installed
go mod tidy

Converter o esquema do Cassandra

Crie todas as tabelas do Cassandra com antecedência. O script schema_converter/cql_to_spanner_schema_converter.go converte consultas CREATE TABLE do Cassandra de um arquivo CQL em consultas CREATE TABLE do Spanner.

  • --database DATABASE_ID: especifique o nome do banco de dados de destino no Spanner Omni. Substitua DATABASE_ID pelo nome do banco de dados.

  • --cql PATH_TO_CQL_FILE: especifique o caminho para o arquivo CQL que contém a definição do esquema do Cassandra.

  • --endpoint ENDPOINT: especifique o endereço do endpoint do Spanner Omni. Substitua ENDPOINT pelo endpoint do Spanner Omni.

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

    O conversor de esquema oferece suporte a todos os três modos de segurança do Spanner Omni: texto simples, TLS e mTLS. Cada modo de segurança exige parâmetros adicionais:

  • Para o modo de texto simples, use a flag --usePlainText:

    go run schema_converter/cql_to_spanner_schema_converter.go --database DATABASE_ID --cql PATH_TO_CQL_FILE --endpoint ENDPOINT --usePlainText
    
  • Para o modo TLS, use a flag --caCertificate com o caminho para o arquivo de certificado de CA:

    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
    
  • Para o modo mTLS, use as flags --caCertificate, --clientCertificate e --clientKey com os caminhos correspondentes:

    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
    

    O script também cria uma tabela TableConfigurations se ela ainda não estiver presente. Essa tabela acompanha os metadados de esquema das tabelas e colunas do 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);
    

Configurar o adaptador de proxy

Depois de criar tabelas do Cassandra usando o script do conversor de esquema, configure o adaptador para realizar operações nas tabelas. Para configurar o adaptador, faça o seguinte:

Atualize o arquivo config.yaml no diretório raiz do repositório com as opções de configuração disponíveis. O arquivo de configuração do adaptador exige que você defina o endpoint do Spanner Omni, além das opções de modo de segurança relevantes.

# [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

A configuração a seguir fornece a configuração mínima para executar o adaptador:

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

Crie e execute o proxy

Depois de configurar o adaptador de proxy, crie e execute o proxy usando os comandos a seguir:

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

Conecte-se ao proxy usando o shell com o seguinte comando:

./cqlsh localhost 9042