Cassandra 압축 전략 변경

Apigee는 Cassandra 데이터베이스를 사용하여 프록시, 캐시, 토큰 데이터를 포함한 대부분의 데이터를 저장합니다. 압축은 데이터베이스에 저장되는 데이터 크기를 줄이는 중요한 프로세스로, 효율적인 데이터베이스 작업을 유지하는 데 필수적입니다. Cassandra는 다양한 압축 전략을 지원합니다. Apigee는 모든 프라이빗 클라우드용 Edge 고객이 모든 테이블에 대해 기본 SizeTieredCompactionStrategy 대신 LeveledCompactionStrategy를 사용하여 Cassandra 클러스터를 운영할 것을 권장합니다. LeveledCompactionStrategySizeTieredCompactionStrategy보다 우수한 성능과 개선된 디스크 사용률, 더 효율적인 압축 기능을 제공하고 여유 공간이 더 적습니다.

Apigee 4.52.02 이상을 새로 설치하면 모두 LeveledCompactionStrategy로 Cassandra가 자동으로 구성됩니다. 그러나 이전 버전의 Apigee를 사용하거나 이전 버전에서 Apigee 4.52.02로 업그레이드한 경우에는 설치 시 SizeTieredCompactionStrategy와 함께 Cassandra를 계속 사용할 수 있습니다.

압축 전략을 LeveledCompactionStrategy 이외의 값으로 변경하는 것은 권장되지 않지만 이 문서에서는 필요한 경우 변경하는 방법을 설명하고 현재 압축 전략을 확인하는 방법을 안내합니다. 압축 전략을 권장되지 않는 옵션으로 변경하면 향후 Cassandra 소프트웨어 업그레이드에서 변경사항을 덮어쓸 수 있습니다. 비표준 접근 방식을 사용하는 경우 업그레이드 후 매번 압축 전략을 확인하는 것이 좋습니다.

준비

기존 압축 전략 확인

부록 1의 안내에 따라 테이블에서 기존 압축 전략을 확인할 수 있습니다. 압축 전략이 이미 LeveledCompactionStrategy 상태라면 OPDK 4.51 이상을 설치하여 시작했거나 이전에 Apigee에서 권장하는 LeveledCompactionStrategy로 변경했기 때문일 수 있습니다. 이미 LeveledCompactionStrategy를 사용 중인 경우 이 전략을 계속 사용하고 변경하지 않는 것이 좋습니다. 하지만 프라이빗 클라우드용 Edge는 사용자가 직접 운영하므로 다음 안내에서는 원하는 경우 압축 전략을 변경하는 방법을 설명합니다.

백업

압축 전략을 변경하면 Cassandra 노드에서 전체 압축 주기가 트리거되므로 압축 로드와 동시 애플리케이션 트래픽으로 인해 일부 지연 시간이 발생할 수 있습니다. 백업에서 Cassandra 노드를 복원하려면 이 변경사항을 롤백해야 할 수 있습니다. 압축 전략을 변경하기 전에 데이터를 백업하는 방법을 알아보려면 백업 방법을 참조하세요.

압축 처리량

압축 전략이 LeveledCompactionStrategy로 변경된 후에는 압축이 오랫동안 실행될 수 있습니다. 데이터 압축의 크기에 따라 런타임이 달라질 수 있습니다. 압축 주기 중에 Cassandra가 더 많은 시스템 리소스를 사용할 수 있습니다. 압축 시 API 런타임 요청이 중단될 수 있는 시스템 리소스를 많이 차지하지 않도록 압축 처리량 한도를 설정하는 것이 좋습니다.

각 노드에서 다음 nodetool 명령어를 실행하여 모든 Cassandra 노드에서 압축 처리량이 최대 128MB가 되도록 설정합니다.

nodetool setcompactionthroughput 128

압축을 위한 VM 크기 조정

이 변경사항을 실행하기 전에 Cassandra 노드에 CPU 및 메모리 리소스가 충분한지 확인하세요. 이 변경사항을 실행하기 전에 CPU 부하의 25% 를 초과하는 Cassandra 노드가 작동하지 않는지 확인하세요.

압축 전략을 변경하면 전체 압축 주기가 실행될 것으로 예상되므로 트래픽이 적은 기간에 압축 전략을 변경하는 것이 좋습니다.

시차를 둔 러닝

특히 대규모 Cassandra 클러스터를 운영하는 경우 각 노드에서 색인을 하나씩 다시 빌드해야 하므로 하루 안에 모든 노드의 변경을 완료하지 못할 수도 있습니다. 한 번에 하나의 스키마 또는 하나의 테이블의 압축 전략을 변경할 수 있습니다. 이를 위해 테이블을 변경하여 압축 전략을 변경한 다음 모든 노드의 테이블에 있는 모든 색인 (있는 경우)을 다시 빌드합니다. 그런 다음 각 테이블 또는 키스페이스에 위 절차를 반복합니다. 하나의 테이블 또는 하나의 키스페이스에 대한 이러한 실행은 날짜별로 실행되도록 세분화할 수 있습니다.

예를 들어 kms 스키마에서 oauth_20_access_tokens 테이블의 압축 전략을 LeveledCompactionStrategy로 변경하려면 다음을 수행합니다.

  1. 다음 CQL을 실행하여 테이블을 변경하여 압축 전략을 변경합니다.

    ALTER TABLE kms.oauth_20_access_tokens WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  2. 이 테이블의 모든 색인만 다시 빌드합니다.

    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   
        

압축 전략 변경

압축 전략의 변경은 개략적으로 두 단계로 이루어집니다.

  1. 모든 테이블의 압축 전략을 수정합니다.
  2. 각 노드의 모든 색인을 하나씩 다시 빌드합니다.

압축 전략을 수정하려면 각 테이블에서 한 번에 하나씩 ALTER TABLE 명령어를 실행해야 합니다. 샘플 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'};

테이블을 변경하여 새로운 압축 전략 설정

하나의 Cassandra 노드에서 다음 CQL을 실행하여 한 번에 하나의 키스페이스에 대한 전략을 변경합니다. CQL은 CQL 프롬프트에서 실행할 수 있습니다. CQL 프롬프트를 호출하는 방법은 다음과 같습니다.

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

XXXXXXXX:9042에서 Apigee에 연결되었습니다.

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

아래 명령어는 압축 전략을 LeveledCompactionStrategy로 변경하는 방법을 다루지만 유사한 명령어를 다른 압축 전략으로 변경하는 데 사용할 수 있습니다.

아래의 14~16단계는 수익 창출을 사용하는 경우에만 적용됩니다.

  1. 키스페이스의 압축 전략을 변경하는 CQL: 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. 키스페이스의 압축 전략을 변경하는 CQL: user_settings
    ALTER TABLE user_settings.user_settings WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  3. 키스페이스의 압축 전략을 변경하는 CQL: keyvaluemap
    ALTER TABLE keyvaluemap.keyvaluemaps_r21 WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  4. 키스페이스의 압축 전략을 변경하는 CQL: 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. 키스페이스의 압축 전략을 변경하는 CQL: 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. 키스페이스의 압축 전략을 변경하는 CQL: cache
    ALTER TABLE cache.cache_entries WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE cache.cache_sequence_id_r24 WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  7. 키스페이스의 압축 전략을 변경하는 CQL: auth
    ALTER TABLE auth.totp WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  8. 키스페이스의 압축 전략을 변경하는 CQL: audit
    ALTER TABLE audit.audits WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE audit.audits_ref WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    
  9. 키스페이스의 압축 전략을 변경하는 CQL: 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. 키스페이스의 압축 전략을 변경하는 CQL: 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. 키스페이스의 압축 전략을 변경하는 CQL: identityzone
    ALTER TABLE identityzone.IdentityZones WITH compaction = {'class' : 'LeveledCompactionStrategy'};
    ALTER TABLE identityzone.OrgToIdentityZone WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  12. 키스페이스의 압축 전략을 변경하는 CQL: dek
    ALTER TABLE dek.keys WITH compaction = {'class' : 'LeveledCompactionStrategy'};
  13. 키스페이스의 압축 전략을 변경하는 CQL: 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. [수익 창출만 해당] 키스페이스의 압축 전략을 변경하는 CQL: 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. [수익 창출만 해당] 키스페이스의 압축 전략을 변경하는 CQL: 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. [수익 창출만 해당] 키스페이스의 압축 전략을 변경하는 CQL: 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'};

색인 다시 빌드

이 단계는 압축 전략이 변경된 후에 실행해야 합니다. 각 Cassandra 노드에서 다음 nodetool 명령어를 하나씩 실행하세요.

아래의 7~9단계는 수익 창출을 사용하는 경우에만 적용됩니다.

  1. 키스페이스 색인 재빌드: 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. 키스페이스 색인 재빌드: 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. 키스페이스 색인 재빌드: cache

    nodetool rebuild_index cache cache_entries cache_entries_cache_name_idx
    
  4. 키스페이스 색인 재빌드: 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. 키스페이스 색인 재빌드: 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. 키스페이스 색인 재빌드: dek

    nodetool rebuild_index dek keys usecase_index
    
  7. [수익 창출만 해당] 키스페이스 색인 재빌드: 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. [수익 창출만 해당] 키스페이스 색인 재빌드: 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. [수익 창출만 해당] 키스페이스 색인 재빌드: 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
    

인증

  1. 부록 1의 안내에 따라 스키마의 압축 전략 변경사항이 적용되었는지 확인합니다.
  2. 전략이 변경된 후 압축이 성공적으로 실행되고 데이터가 압축되었는지 확인합니다.
    1. 각 Cassandra 노드에서 다음 nodetool 명령어를 실행하여 모든 압축이 완료되었으며 대기 중인 항목이 없는지 확인합니다.
      nodetool compactionstats
    2. 위 명령어를 사용하여 대기 중인 압축이 없는지 확인한 후 데이터 파일의 최종 수정된 타임스탬프 (/opt/apigee/data/apigee-cassandra/data/ 아래)가 압축 전략 변경 CQL이 실행된 타임스탬프 이후인지 확인합니다.

롤백

롤백을 수행해야 하는 경우 아래 옵션 중 하나를 선택할 수 있습니다.

옵션 1: 변경사항 되돌리기

압축 전략을 원래 보유한 전략으로 롤백합니다.

이전에 실행한 CQL 프롬프트에서 유사한 ALTER TABLE 명령어를 실행하여 압축 전략을 변경합니다.

압축 전략을 LeveledCompactionStrategy로 변경하는 동안 이미 색인을 다시 빌드한 경우 색인을 다시 빌드해야 합니다. 모든 색인을 다시 빌드하는 이전과 동일한 단계를 따릅니다. 이전에 색인을 다시 생성하지 않았다면 롤백 중에 색인을 다시 작성할 필요가 없습니다.

옵션 2: 백업에서 전체 데이터 복원

모든 키스페이스의 백업에서 데이터를 복원합니다.

백업에서 복원에 설명된 대로 안내를 따라 복원하세요.

부록 1: 압축 전략 확인

압축 전략은 Cassandra에서 테이블 수준에서 설정됩니다. 아래 쿼리를 사용하여 각 테이블의 압축 전략을 확인할 수 있습니다.

CQL 프롬프트에서 CQL을 실행할 수 있습니다. CQL 프롬프트를 호출하는 방법은 다음과 같습니다.

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

다음과 같은 응답이 표시됩니다.

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>

다음과 같이 현재 압축 전략을 확인할 수 있습니다.

출력의 각 행은 키스페이스 내의 테이블과 관련이 있습니다. 각 행에서 compaction 열은 테이블에서 사용하는 압축 전략을 나타냅니다.

  • 압축 전략이 SizeTieredCompactionStrategy로 설정된 경우 아래 쿼리의 compaction 열은 다음과 같습니다.
  • {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
  • 압축 전략이 LeveledCompactionStrategy로 설정된 경우 아래 쿼리의 compaction 열은 다음과 같습니다.
  • {'class': 'org.apache.cassandra.db.compaction.LeveledCompactionStrategy'}

아래 쿼리를 실행하여 특정 키스페이스의 각 테이블에 대한 압축 전략을 결정할 수 있습니다.

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';