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

A Apigee usa o banco de dados do Cassandra para armazenar a maioria dos dados, incluindo dados de proxies, caches e tokens. A compactação é um processo essencial para reduzir o tamanho dos dados armazenados em repositórios de dados, fundamental 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 a LeveledCompactionStrategy, em vez da SizeTieredCompactionStrategy padrão, para todas as tabelas. A LeveledCompactionStrategy oferece melhor desempenho, utilização aprimorada do disco, compactações mais eficientes e requer menos espaço livre em comparação com a SizeTieredCompactionStrategy.

Todas as novas instalações do Edge para nuvem privada 4.52.02 ou mais recente configuram automaticamente o Cassandra com LeveledCompactionStrategy. No entanto, se você fez upgrade para o Edge para nuvem privada 4.54.00 de uma versão anterior, a instalação ainda poderá usar o Cassandra com SizeTieredCompactionStrategy.

Embora não seja recomendável mudar a estratégia de compactação para algo diferente de LeveledCompactionStrategy, este documento descreve como fazer a mudança, se necessário, e fornece instruções para verificar sua estratégia de compactação atual. A mudança da estratégia de compactação para uma opção não recomendada pode resultar em upgrades futuros do software do Cassandra que substituam suas mudanças. Recomendamos que você verifique sua estratégia de compactação após cada upgrade se estiver usando uma abordagem não padrão.

Preparação

Pré-requisitos

No Edge para nuvem privada 4.54.00, o Cassandra 5.x requer o JDK 17 (Java 17). Antes de executar comandos nodetool ou cqlsh em um nó do Cassandra, verifique se o Java 17 está configurado como a versão padrão do Java (por exemplo, executando sudo alternatives --set java JAVA_17_PATH/bin/java ou definindo JAVA_HOME para a instalação do JDK 17).

Verificar a estratégia de compactação atual

Para verificar a estratégia de compactação atual nas tabelas, siga as instruções no Apêndice 1. Se a estratégia de compactação já for LeveledCompactionStrategy, isso pode ser devido a uma instalação do Edge para nuvem privada 4.51 ou mais recente ou a uma mudança anterior para LeveledCompactionStrategy, conforme recomendado pela Apigee. Se você já estiver usando LeveledCompactionStrategy, a Apigee recomenda continuar com essa estratégia e evitar mudanças. No entanto, como o Edge para nuvem privada é operado por você, as instruções a seguir explicam como mudar a estratégia de compactação, se desejado.

Backup

Como a mudança da estratégia de compactação aciona um ciclo de compactação completo nos nós do Cassandra, ela pode introduzir algumas latências devido à carga de compactações e ao tráfego simultâneo de aplicativos. A reversão dessa mudança não exige a restauração de um backup. É possível reverter a estratégia de compactação diretamente, conforme descrito na Opção 1: reverter mudança. No entanto, como precaução, consulte Como fazer backup para fazer backup dos dados antes de mudar a estratégia de compactação.

Capacidade de processamento de compactação

Depois que a estratégia de compactação é alterada para LeveledCompactionStrategy, as compactações podem ser executadas por um longo período. Dependendo do tamanho da compactação de dados, o tempo de execução pode variar. Durante o ciclo de compactação, o Cassandra pode usar mais recursos do sistema. Para garantir que a compactação não consuma muitos recursos do sistema, o que pode interromper as solicitações do ambiente de execução da API, recomendamos definir limites para a capacidade de processamento de compactação.

Execute o comando nodetool a seguir em cada um dos nós para definir a capacidade de processamento de compactação como máxima de 128 MB em todos os nós do Cassandra:

nodetool setcompactionthroughput 128

Dimensionar VMs para compactações

Antes de executar essa mudança, verifique se os nós do Cassandra têm recursos suficientes de CPU e memória e se estão operando com uma carga de CPU de no máximo 25%.

Após uma mudança na estratégia de compactação, um ciclo de compactação completo é esperado, por isso é recomendável mudar a estratégia de compactação durante períodos de baixo tráfego.

Execuções escalonadas

Talvez não seja possível concluir a mudança de todos os nós em um dia, especialmente se você operar clusters grandes do Cassandra, porque os índices precisam ser recriados em cada nó um por um. É possível mudar 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 recrie todos os índices na 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 mudar a estratégia de compactação executando o seguinte CQL:

    ALTER TABLE kms.oauth_20_access_tokens WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  2. Recrie todos os índices apenas 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   
        

Mudar a estratégia de compactação

Em um nível alto, a mudança da 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, é necessário executar um comando ALTER TABLE em cada tabela, uma de cada vez. Um exemplo de comando ALTER TABLE é mostrado abaixo:

# 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 os CQLs a seguir em qualquer nó do Cassandra para mudar a estratégia de um keyspace por vez. Os CQLs podem ser executados 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 6.2.0 | Cassandra 5.0.8 | CQL spec 3.4.7 | Native protocol v5]
Use HELP for help.
cqlsh>

Os comandos abaixo abrangem 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ó são aplicáveis se você usar a monetização.

  1. CQLs para mudar a estratégia de compactação do 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 mudar a estratégia de compactação do keyspace: user_settings
    ALTER TABLE user_settings.user_settings WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  3. CQLs para mudar a estratégia de compactação do keyspace: keyvaluemap
    ALTER TABLE keyvaluemap.keyvaluemaps_r21 WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  4. CQLs para mudar a estratégia de compactação do 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 mudar a estratégia de compactação do 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 mudar a estratégia de compactação do 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 mudar a estratégia de compactação do keyspace: auth
    ALTER TABLE auth.totp WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  8. CQLs para mudar a estratégia de compactação do keyspace: audit
    ALTER TABLE audit.audits WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE audit.audits_ref WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  9. CQLs para mudar a estratégia de compactação do 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 mudar a estratégia de compactação do 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 mudar a estratégia de compactação do keyspace: identityzone
    ALTER TABLE identityzone.IdentityZones WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE identityzone.OrgToIdentityZone WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  12. CQLs para mudar a estratégia de compactação do keyspace: dek
    ALTER TABLE dek.keys WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  13. CQLs para mudar a estratégia de compactação do 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 para 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 para 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 para 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

Essa 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ó são aplicáveis se você usar a monetização.

  1. Recriar índices para 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. Recriar índices para 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. Recriar índices para keyspace: cache

    nodetool rebuild_index cache cache_entries cache_entries_cache_name_idx
    
  4. Recriar índices para 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. Recriar índices para 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. Recriar índices para keyspace: dek

    nodetool rebuild_index dek keys usecase_index
    
  7. [Somente monetização] Recriar índices para 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] Recriar índices para 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] Recriar índices para 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. Verifique se a mudança na estratégia de compactação no esquema entrou em vigor seguindo as instruções em Apêndice 1.
  2. Verifique se a compactação foi executada e os dados foram compactados após a mudança de estratégia:
    1. Em cada nó do Cassandra, execute o comando nodetool a seguir para verificar se todas as compactações foram concluídas e se não há nada pendente:
      nodetool compactionstats
    2. Depois de verificar usando o comando acima para garantir que nenhuma compactação esteja pendente, verifique o carimbo de data/hora da última modificação dos arquivos de dados (em /opt/apigee/data/apigee-cassandra/data/) para que seja posterior ao carimbo de data/hora em que o CQL de mudança de estratégia de compactação foi executado.

Reverter

Caso precise realizar uma reversão, escolha uma das opções abaixo:

Opção 1: reverter mudança

Reverta a estratégia de compactação para a estratégia original.

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

Se você já tiver recriado í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 recriou índices antes, não é necessário recriar índices durante a reversão.

Opção 2: restauração completa de dados do backup

Restaure os dados do backup para todos os keyspaces:

Siga as instruções para restaurar 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. É possível usar as consultas abaixo para verificar a estratégia de compactação de cada tabela.

É possível executar CQLs no prompt do CQL. Para invocar o prompt do 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 6.2.0 | Cassandra 5.0.8 | CQL spec 3.4.7 | Native protocol v5]
Use HELP for help.
cqlsh>

É possível determinar 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á algo como:
  • {'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á algo como:
  • {'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'}

As consultas abaixo podem ser executadas para determinar a estratégia de compactação de 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';