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:
-
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'}; -
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:
- Modifique a estratégia de compactação de cada tabela.
- 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 LeveledCompactionStrategyALTER TABLEkms.oauth_20_access_tokens WITH compaction = {'class' : 'LeveledCompactionStrategy'}; # To change to SizeTieredCompactionStrategyALTER TABLEkms.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.
- CQLs para mudar a estratégia de compactação do keyspace:
kmsALTER 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'}; - CQLs para mudar a estratégia de compactação do keyspace:
user_settingsALTER TABLE user_settings.user_settings WITH compaction = {'class' : 'LeveledCompactionStrategy'}; - CQLs para mudar a estratégia de compactação do keyspace:
keyvaluemapALTER TABLE keyvaluemap.keyvaluemaps_r21 WITH compaction = {'class' : 'LeveledCompactionStrategy'}; - CQLs para mudar a estratégia de compactação do keyspace:
devconnectALTER TABLE devconnect.developers WITH compaction = {'class' : 'LeveledCompactionStrategy'}; ALTER TABLE devconnect.companies WITH compaction = {'class' : 'LeveledCompactionStrategy'}; ALTER TABLE devconnect.company_developers WITH compaction = {'class' : 'LeveledCompactionStrategy'}; - CQLs para mudar a estratégia de compactação do keyspace:
counterALTER 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'}; - CQLs para mudar a estratégia de compactação do keyspace:
cacheALTER TABLE cache.cache_entries WITH compaction = {'class' : 'LeveledCompactionStrategy'}; ALTER TABLE cache.cache_sequence_id_r24 WITH compaction = {'class' : 'LeveledCompactionStrategy'}; - CQLs para mudar a estratégia de compactação do keyspace:
authALTER TABLE auth.totp WITH compaction = {'class' : 'LeveledCompactionStrategy'}; - CQLs para mudar a estratégia de compactação do keyspace:
auditALTER TABLE audit.audits WITH compaction = {'class' : 'LeveledCompactionStrategy'}; ALTER TABLE audit.audits_ref WITH compaction = {'class' : 'LeveledCompactionStrategy'}; - CQLs para mudar a estratégia de compactação do keyspace:
apprepoALTER 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'}; - CQLs para mudar a estratégia de compactação do keyspace:
apimodel_v2ALTER 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'}; - CQLs para mudar a estratégia de compactação do keyspace:
identityzoneALTER TABLE identityzone.IdentityZones WITH compaction = {'class' : 'LeveledCompactionStrategy'}; ALTER TABLE identityzone.OrgToIdentityZone WITH compaction = {'class' : 'LeveledCompactionStrategy'}; - CQLs para mudar a estratégia de compactação do keyspace:
dekALTER TABLE dek.keys WITH compaction = {'class' : 'LeveledCompactionStrategy'}; - CQLs para mudar a estratégia de compactação do keyspace:
analyticsALTER 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'}; - [Somente monetização] CQLs para mudar a estratégia de compactação do keyspace:
mintALTER 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'}; - [Somente monetização] CQLs para mudar a estratégia de compactação do keyspace:
taurusALTER 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'}; - [Somente monetização] CQLs para mudar a estratégia de compactação do keyspace:
notificationALTER 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.
-
Recriar índices para keyspace:
kmsnodetool 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
-
Recriar índices para keyspace:
devconnectnodetool 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
-
Recriar índices para keyspace:
cachenodetool rebuild_index cache cache_entries cache_entries_cache_name_idx
-
Recriar índices para keyspace:
auditnodetool 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
-
Recriar índices para keyspace:
apimodel_v2nodetool 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
-
Recriar índices para keyspace:
deknodetool rebuild_index dek keys usecase_index
-
[Somente monetização] Recriar índices para keyspace:
mintnodetool 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
-
[Somente monetização] Recriar índices para keyspace:
taurusnodetool 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
-
[Somente monetização] Recriar índices para keyspace:
notificationnodetool 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
- Verifique se a mudança na estratégia de compactação no esquema entrou em vigor seguindo as instruções em Apêndice 1.
- Verifique se a compactação foi executada e os dados foram compactados após a mudança de estratégia:
- 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
- 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.
- 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:
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:
- 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.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}{'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';