Mudar a estratégia de compactação do Cassandra

A Apigee usa o banco de dados Cassandra para armazenar a maioria dos dados, incluindo dados de proxies, caches e tokens. A compactação é um processo crítico para reduzir o tamanho dos dados armazenados em bancos de dados, essencial para manter operações eficientes. O Cassandra oferece suporte a várias estratégias de compactação. A Apigee recomenda que todos os clientes do Edge para nuvem privada operem os clusters do Cassandra com LeveledCompactionStrategy, em vez do SizeTieredCompactionStrategy padrão, para todas as tabelas. O LeveledCompactionStrategy oferece melhor desempenho, melhor utilização de disco, compactações mais eficientes e menos espaço livre em comparação com SizeTieredCompactionStrategy.

Todas as novas instalações da Apigee 4.52.02 ou posterior configuram automaticamente o Cassandra com LeveledCompactionStrategy. No entanto, se você estiver usando uma versão mais antiga da Apigee ou tiver atualizado de uma versão anterior para a Apigee 4.52.02, sua instalação ainda poderá usar o Cassandra com SizeTieredCompactionStrategy.

Embora não seja recomendado alterar a estratégia de compactação para algo diferente de LeveledCompactionStrategy, este documento descreve como fazer a alteração, se necessário, e fornece instruções para verificar sua estratégia de compactação atual. Alterar a estratégia de compactação para uma opção não recomendada pode fazer com que futuras atualizações do software do Cassandra substituam suas alterações. Recomendamos que você verifique sua estratégia de compactação após cada upgrade se estiver usando uma abordagem fora do padrão.

Preparação

Verificar a estratégia de compactação atual

Verifique a estratégia de compactação atual nas tabelas seguindo as instruções no Apêndice 1. Se a estratégia de compactação já estiver LeveledCompactionStrategy, talvez seja devido a ter começado com uma instalação do OPDK 4.51 ou posterior ou ter mudado anteriormente para LeveledCompactionStrategy, conforme recomendado pela Apigee. Se você já estiver usando LeveledCompactionStrategy, a Apigee recomenda continuar com essa estratégia e evitar alterações. No entanto, como o Edge para nuvem privada é operado por você, as instruções a seguir explicam como alterar a estratégia de compactação, se você quiser.

Backup

Como a alteração da estratégia de compactação aciona um ciclo completo de compactação nos nós do Cassandra, ela pode introduzir algumas latências devido à carga de compactações e ao tráfego de aplicativo simultâneo. Pode ser necessário reverter essa alteração para restaurar os nós do Cassandra a partir dos backups. Consulte Como fazer backup para saber como fazer backup dos dados antes de alterar a estratégia de compactação.

Capacidade de compactação

Depois que a estratégia de compactação for alterada para LeveledCompactionStrategy, as compactações poderão ser executadas para muito tempo. Dependendo do tamanho da compactação de dados, o ambiente de execução pode variar. Durante a compactação ciclo, o Cassandra pode consumir mais recursos do sistema. Para garantir que a compactação não ocupe muito de recursos do sistema, o que pode interromper as solicitações do ambiente de execução da API, recomendamos definir limites para de compactação e compactação.

Execute o comando nodetool a seguir em cada um dos nós para definir a capacidade de compactação e o máximo possível a 128 MB em todos os nós do Cassandra:

nodetool setcompactionthroughput 128

Como dimensionar VMs para compactação

Verifique se os nós do Cassandra têm recursos de CPU e memória suficientes antes de executar essa alteração. Verifique se nenhum nó do Cassandra está operando em mais de 25% da carga da CPU antes de executar essa alteração.

Depois de mudar a estratégia de compactação, espera-se que um ciclo de compactação completo seja executado. Por isso, recomendamos alterar a estratégia de compactação durante períodos de pouco tráfego.

Execuções escalonadas

Talvez não seja possível concluir a alteração de todos os nós em um dia, especialmente se você operar grandes clusters do Cassandra, já que os índices precisam ser reconstruídos em cada nó, um por um. É possível alterar a estratégia de compactação de um esquema ou de uma tabela por vez. Para isso, altere a tabela para mudar a estratégia de compactação e, em seguida, recrie todos os índices da tabela (se houver) em todos os nós. Em seguida, repita o procedimento acima para cada tabela ou keyspace. Essas execuções para uma tabela ou um keyspace podem ser divididas para serem executadas em dias diferentes.

Por exemplo, para mudar a estratégia de compactação da tabela oauth_20_access_tokens no esquema kms para LeveledCompactionStrategy, faça o seguinte:

  1. Altere a tabela para alterar a estratégia de compactação executando a seguinte CQL:

    ALTER TABLE kms.oauth_20_access_tokens WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  2. Recrie todos os índices desta tabela:

    nodetool rebuild_index kms oauth_20_access_tokens oauth_20_access_tokens_app_id_idx
    nodetool rebuild_index kms oauth_20_access_tokens oauth_20_access_tokens_client_id_idx
    nodetool rebuild_index kms oauth_20_access_tokens oauth_20_access_tokens_refresh_token_idx   
        

Como mudar a estratégia de compactação

De modo geral, alterar a estratégia de compactação é um processo de duas etapas:

  1. Modifique a estratégia de compactação de cada tabela.
  2. Recrie todos os índices em cada nó, um por um.

Para modificar a estratégia de compactação, execute um comando ALTER TABLE em cada tabela, um de cada vez. Veja abaixo um exemplo de comando ALTER TABLE:

# To change to LeveledCompactionStrategy
ALTER TABLE kms.oauth_20_access_tokens WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  
# To change to SizeTieredCompactionStrategy
ALTER TABLE kms.oauth_20_access_tokens WITH compaction = {'class' : 'SizeTieredCompactionStrategy'};

Alterar a tabela para definir uma nova estratégia de compactação

Execute as CQLs a seguir em qualquer nó do Cassandra para alterar a estratégia para um keyspace por vez. As CQLs podem ser executadas no prompt do CQL. Instruções para invocar o prompt do CQL:

/opt/apigee/apigee-cassandra/bin/cqlsh `hostname -i`

Conectado à Apigee em XXXXXXXX:9042.

[cqlsh 5.0.1 | Cassandra 3.11.16 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh>

Os comandos abaixo abordam a mudança da estratégia de compactação para LeveledCompactionStrategy, mas comandos semelhantes podem ser usados para mudar para outras estratégias de compactação.

As etapas 14 a 16 abaixo são aplicáveis somente se você usa a monetização.

  1. CQLs para alterar a estratégia de compactação para keyspace: kms
    ALTER TABLE kms.organizations WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE kms.maps WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE kms.apps WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE kms.app_credentials WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE kms.api_products WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE kms.apiproducts_appslist WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE kms.api_resources WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE kms.app_end_user WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE kms.oauth_20_authorization_codes WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE kms.oauth_20_access_tokens WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE kms.oauth_10_request_tokens WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE kms.oauth_10_access_tokens WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE kms.oauth_10_verifiers WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE kms.app_enduser_tokens WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  2. CQLs para alterar a estratégia de compactação para keyspace: user_settings
    ALTER TABLE user_settings.user_settings WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  3. CQLs para alterar a estratégia de compactação para keyspace: keyvaluemap
    ALTER TABLE keyvaluemap.keyvaluemaps_r21 WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  4. CQLs para alterar a estratégia de compactação para keyspace: devconnect
    ALTER TABLE devconnect.developers WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE devconnect.companies WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE devconnect.company_developers WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  5. CQLs para alterar a estratégia de compactação para keyspace: counter
    ALTER TABLE counter.counters_current_version WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE counter.counters_with_expiry WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE counter.counters WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE counter.key_timestamp_count WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE counter.timestamp_key WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE counter.period_timestamp WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE counter.gateway_quota WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  6. CQLs para alterar a estratégia de compactação para keyspace: cache
    ALTER TABLE cache.cache_entries WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE cache.cache_sequence_id_r24 WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  7. CQLs para alterar a estratégia de compactação para keyspace: auth
    ALTER TABLE auth.totp WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  8. CQLs para alterar a estratégia de compactação para keyspace: audit
    ALTER TABLE audit.audits WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE audit.audits_ref WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  9. CQLs para alterar a estratégia de compactação para keyspace: apprepo
    ALTER TABLE apprepo.organizations WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apprepo.environments WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apprepo.apiproxies WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apprepo.apiproxy_revisions WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apprepo.api_proxy_revisions_r21 WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  10. CQLs para alterar a estratégia de compactação para keyspace: apimodel_v2
    ALTER TABLE apimodel_v2.apis WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apimodel_v2.apis_revision WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apimodel_v2.resource WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apimodel_v2.method WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apimodel_v2.revision_counters WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apimodel_v2.template_counters WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apimodel_v2.template WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apimodel_v2.credentials WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apimodel_v2.credentialsv2 WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apimodel_v2.schemas WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apimodel_v2.security WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE apimodel_v2.template_auth WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  11. CQLs para alterar a estratégia de compactação para keyspace: identityzone
    ALTER TABLE identityzone.IdentityZones WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE identityzone.OrgToIdentityZone WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  12. CQLs para alterar a estratégia de compactação para keyspace: dek
    ALTER TABLE dek.keys WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  13. CQLs para alterar a estratégia de compactação para keyspace: analytics
    ALTER TABLE analytics.custom_aggregates_defn WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE analytics.custom_rules_defn WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE analytics.custom_aggregates_defn_updates WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE analytics.custom_rules_defn_updates WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  14. [Somente monetização] CQLs que vão mudar a estratégia de compactação do keyspace: mint
    ALTER TABLE mint.limits WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE mint.suspended_developer_products WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE mint.invitations WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  15. [Somente monetização] CQLs que vão mudar a estratégia de compactação do keyspace: taurus
    ALTER TABLE taurus.triggers WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE taurus.job_details WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE taurus.org_triggers WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE taurus.triggers_suite WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  16. [Somente monetização] CQLs que vão mudar a estratégia de compactação do keyspace: notification
    ALTER TABLE notification.notification_service_item WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE notification.notification_service_black_list_item WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE notification.notification_email_template_item WITH compaction = {'class' : 'LeveledCompactionStrategy'};

Recriar índices

Esta etapa precisa ser executada após qualquer mudança na estratégia de compactação. Execute os comandos nodetool a seguir, um por um, em cada nó do Cassandra.

As etapas 7 a 9 abaixo são aplicáveis apenas se você usa a monetização.

  1. Recrie índices para o keyspace: kms

    nodetool rebuild_index kms api_products api_products_organization_name_idx
    nodetool rebuild_index kms app_credentials app_credentials_api_products_idx
    nodetool rebuild_index kms app_credentials app_credentials_organization_app_id_idx
    nodetool rebuild_index kms app_credentials app_credentials_organization_name_idx
    nodetool rebuild_index kms app_end_user app_end_user_app_id_idx
    nodetool rebuild_index kms apps apps_app_family_idx
    nodetool rebuild_index kms apps apps_app_id_idx
    nodetool rebuild_index kms apps apps_app_type_idx
    nodetool rebuild_index kms apps apps_name_idx
    nodetool rebuild_index kms apps apps_organization_name_idx
    nodetool rebuild_index kms apps apps_parent_id_idx
    nodetool rebuild_index kms apps apps_parent_status_idx
    nodetool rebuild_index kms apps apps_status_idx
    nodetool rebuild_index kms maps maps_organization_name_idx
    nodetool rebuild_index kms oauth_10_access_tokens oauth_10_access_tokens_app_id_idx
    nodetool rebuild_index kms oauth_10_access_tokens oauth_10_access_tokens_consumer_key_idx
    nodetool rebuild_index kms oauth_10_access_tokens oauth_10_access_tokens_organization_name_idx
    nodetool rebuild_index kms oauth_10_access_tokens oauth_10_access_tokens_status_idx
    nodetool rebuild_index kms oauth_10_request_tokens oauth_10_request_tokens_consumer_key_idx
    nodetool rebuild_index kms oauth_10_request_tokens oauth_10_request_tokens_organization_name_idx
    nodetool rebuild_index kms oauth_10_verifiers oauth_10_verifiers_organization_name_idx
    nodetool rebuild_index kms oauth_10_verifiers oauth_10_verifiers_request_token_idx
    nodetool rebuild_index kms oauth_20_access_tokens oauth_20_access_tokens_app_id_idx
    nodetool rebuild_index kms oauth_20_access_tokens oauth_20_access_tokens_client_id_idx
    nodetool rebuild_index kms oauth_20_access_tokens oauth_20_access_tokens_refresh_token_idx
    nodetool rebuild_index kms oauth_20_authorization_codes oauth_20_authorization_codes_client_id_idx
    nodetool rebuild_index kms oauth_20_authorization_codes oauth_20_authorization_codes_organization_name_idx
    
  2. Recrie índices para o keyspace: devconnect

    nodetool rebuild_index devconnect companies companies_name_idx
    nodetool rebuild_index devconnect companies companies_organization_name_idx
    nodetool rebuild_index devconnect companies companies_status_idx
    nodetool rebuild_index devconnect company_developers company_developers_company_name_idx
    nodetool rebuild_index devconnect company_developers company_developers_developer_email_idx
    nodetool rebuild_index devconnect company_developers company_developers_organization_name_idx
    nodetool rebuild_index devconnect developers developers_email_idx
    nodetool rebuild_index devconnect developers developers_organization_name_idx
    nodetool rebuild_index devconnect developers developers_status_idx
    
  3. Recrie índices para o keyspace: cache

    nodetool rebuild_index cache cache_entries cache_entries_cache_name_idx
    
  4. Recrie índices para o keyspace: audit

    nodetool rebuild_index audit audits audits_operation_idx
    nodetool rebuild_index audit audits audits_requesturi_idx
    nodetool rebuild_index audit audits audits_responsecode_idx
    nodetool rebuild_index audit audits audits_timestamp_idx
    nodetool rebuild_index audit audits audits_user_idx
    
  5. Recrie índices para o keyspace: apimodel_v2

    nodetool rebuild_index apimodel_v2 apis a_name
    nodetool rebuild_index apimodel_v2 apis a_org_name
    nodetool rebuild_index apimodel_v2 apis_revision ar_a_active_rev
    nodetool rebuild_index apimodel_v2 apis_revision ar_a_def_index_template
    nodetool rebuild_index apimodel_v2 apis_revision ar_a_def_method_template
    nodetool rebuild_index apimodel_v2 apis_revision ar_a_latest_rev
    nodetool rebuild_index apimodel_v2 apis_revision ar_a_name
    nodetool rebuild_index apimodel_v2 apis_revision ar_a_uuid
    nodetool rebuild_index apimodel_v2 apis_revision ar_base_url
    nodetool rebuild_index apimodel_v2 apis_revision ar_is_active
    nodetool rebuild_index apimodel_v2 apis_revision ar_is_latest
    nodetool rebuild_index apimodel_v2 apis_revision ar_name
    nodetool rebuild_index apimodel_v2 apis_revision ar_org_name
    nodetool rebuild_index apimodel_v2 apis_revision ar_rel_ver
    nodetool rebuild_index apimodel_v2 apis_revision ar_rev_num
    nodetool rebuild_index apimodel_v2 method m_a_name
    nodetool rebuild_index apimodel_v2 method m_api_uuid
    nodetool rebuild_index apimodel_v2 method m_ar_uuid
    nodetool rebuild_index apimodel_v2 method m_base_url
    nodetool rebuild_index apimodel_v2 method m_name
    nodetool rebuild_index apimodel_v2 method m_org_name
    nodetool rebuild_index apimodel_v2 method m_r_name
    nodetool rebuild_index apimodel_v2 method m_r_uuid
    nodetool rebuild_index apimodel_v2 method m_res_path
    nodetool rebuild_index apimodel_v2 method m_rev_num
    nodetool rebuild_index apimodel_v2 resource r_a_name
    nodetool rebuild_index apimodel_v2 resource r_api_uuid
    nodetool rebuild_index apimodel_v2 resource r_ar_uuid
    nodetool rebuild_index apimodel_v2 resource r_base_url
    nodetool rebuild_index apimodel_v2 resource r_name
    nodetool rebuild_index apimodel_v2 resource r_org_name
    nodetool rebuild_index apimodel_v2 resource r_res_path
    nodetool rebuild_index apimodel_v2 resource r_rev_num
    nodetool rebuild_index apimodel_v2 schemas s_api_uuid
    nodetool rebuild_index apimodel_v2 schemas s_ar_uuid
    nodetool rebuild_index apimodel_v2 security sa_api_uuid
    nodetool rebuild_index apimodel_v2 security sa_ar_uuid
    nodetool rebuild_index apimodel_v2 template t_a_name
    nodetool rebuild_index apimodel_v2 template t_a_uuid
    nodetool rebuild_index apimodel_v2 template t_entity
    nodetool rebuild_index apimodel_v2 template t_name
    nodetool rebuild_index apimodel_v2 template t_org_name
    nodetool rebuild_index apimodel_v2 template_auth au_api_uuid
    
  6. Recrie índices para o keyspace: dek

    nodetool rebuild_index dek keys usecase_index
    
  7. [Somente monetização] Recrie índices para o keyspace: mint

    nodetool rebuild_index mint limits limits_created_date_idx
    nodetool rebuild_index mint limits limits_id_idx
    nodetool rebuild_index mint limits limits_org_id_idx
    nodetool rebuild_index mint limits limits_updated_date_idx
    nodetool rebuild_index mint suspended_developer_products suspended_developer_products_created_date_idx
    nodetool rebuild_index mint suspended_developer_products suspended_developer_products_currency_idx
    nodetool rebuild_index mint suspended_developer_products suspended_developer_products_dev_id_idx
    nodetool rebuild_index mint suspended_developer_products suspended_developer_products_id_idx
    nodetool rebuild_index mint suspended_developer_products suspended_developer_products_limit_id_idx
    nodetool rebuild_index mint suspended_developer_products suspended_developer_products_org_id_idx
    nodetool rebuild_index mint suspended_developer_products suspended_developer_products_prod_id_idx
    nodetool rebuild_index mint suspended_developer_products suspended_developer_products_reason_code_idx
    nodetool rebuild_index mint suspended_developer_products suspended_developer_products_sub_org_id_idx
    nodetool rebuild_index mint invitations invitations_company_id_idx
    nodetool rebuild_index mint invitations invitations_created_at_idx
    nodetool rebuild_index mint invitations invitations_developer_id_idx
    nodetool rebuild_index mint invitations invitations_lastmodified_at_idx
    nodetool rebuild_index mint invitations invitations_org_id_idx
    
  8. [Somente monetização] Recrie índices para o keyspace: taurus

    nodetool rebuild_index taurus triggers triggers_env_idx
    nodetool rebuild_index taurus triggers triggers_job_id_idx
    nodetool rebuild_index taurus triggers triggers_org_id_idx
    nodetool rebuild_index taurus job_details job_details_job_class_name_idx
    nodetool rebuild_index taurus job_details job_details_job_group_idx
    nodetool rebuild_index taurus job_details job_details_job_name_idx
    nodetool rebuild_index taurus org_triggers org_triggers_org_id_idx
    nodetool rebuild_index taurus triggers_suite triggers_suite_group_idx
    nodetool rebuild_index taurus triggers_suite triggers_suite_name_idx
    nodetool rebuild_index taurus triggers_suite triggers_suite_suite_id_idx
    
  9. [Somente monetização] Recrie índices para o keyspace: notification

    nodetool rebuild_index notification notification_service_item notification_service_item_org_id_idx
    nodetool rebuild_index notification notification_service_item notification_service_item_status_idx
    nodetool rebuild_index notification notification_service_black_list_item notification_service_black_list_item_org_id_idx
    nodetool rebuild_index notification notification_service_black_list_item notification_service_black_list_item_to_email_idx
    nodetool rebuild_index notification notification_email_template_item notification_email_template_item_name_idx
    nodetool rebuild_index notification notification_email_template_item notification_email_template_item_org_id_idx
    

Verificação

  1. Siga as instruções no Apêndice 1 para verificar se a alteração da estratégia de compactação no esquema entrou em vigor.
  2. Verifique se a compactação foi executada e os dados estão compactados após a mudança de estratégia:
    1. Em cada nó do Cassandra, execute o seguinte comando nodetool para ver se todas as compactações foram concluídas e se nada está pendente:
      nodetool compactionstats
    2. Depois de fazer a verificação usando o comando acima para garantir que não haja compactações pendentes, verifique o carimbo de data/hora da última modificação dos arquivos de dados (em /opt/apigee/data/apigee-cassandra/data/) para ser posterior ao carimbo de data/hora em que a CQL de alteração da estratégia de compactação foi executada.

Reversão

Caso seja necessário fazer uma reversão, escolha uma das opções abaixo:

Opção 1: reverter alteração

Reverta a estratégia de compactação para a estratégia que você tinha originalmente.

Execute comandos ALTER TABLE semelhantes no comando CQL que você executou antes para mudar a estratégia de compactação.

Se você já tiver reconstruído os índices ao mudar a estratégia de compactação para LeveledCompactionStrategy, será necessário recriar os índices novamente. Siga as mesmas etapas anteriores para recriar todos os índices. Se você não recria os índices antes, não precisa fazer isso durante a reversão.

Opção 2: restauração de dados completos a partir do backup

Restaurar dados do backup para todos os keyspaces:

Siga as instruções de restauração conforme documentado em Restaurar de um backup.

Apêndice 1: verificar a estratégia de compactação

As estratégias de compactação são definidas no nível da tabela no Cassandra. Você pode usar as consultas abaixo para verificar a estratégia de compactação para cada tabela.

É possível executar CQLs no prompt de CQL. Para invocar o prompt CQL:

/opt/apigee/apigee-cassandra/bin/cqlsh `hostname -i`

Você verá uma resposta como esta:

Connected to apigee at XX.XX.XX.XX:9042.
[cqlsh 5.0.1 | Cassandra 3.11.16 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cqlsh>

Determine a estratégia de compactação atual da seguinte maneira:

Cada linha na saída pertence a uma tabela em um keyspace. Para cada linha, a coluna compaction indica a estratégia de compactação usada pela tabela.

  • Se a estratégia de compactação estiver definida como "SizeTieredCompactionStrategy", a coluna compaction nas consultas abaixo será semelhante a esta:
  • {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
  • Se a estratégia de compactação estiver definida como LeveledCompactionStrategy, a coluna compaction nas consultas abaixo será semelhante a esta:
  • {'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'}

É possível executar as consultas abaixo para determinar a estratégia de compactação para cada tabela em um keyspace específico:

select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'kms';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'user_settings';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'keyvaluemap';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'devconnect';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'counter';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'cache';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'auth';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'audit';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'apprepo';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'apimodel_v2';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'identityzone';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'dek';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'analytics';

#If you are using Monetization, check the below as well
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'mint';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'taurus';
select keyspace_name, table_name, compaction from system_schema.tables where keyspace_name = 'notification';