Cassandra コンパクション戦略を変更する

Apigee は、プロキシ、キャッシュ、トークンのデータなど、ほとんどのデータを Cassandra データベースに保存します。圧縮は、データベースに保存されるデータのサイズを削減するための重要なプロセスであり、データベースの効率的な運用を維持するために不可欠です。 Cassandra は、さまざまな圧縮戦略をサポートしています。Apigee は、すべての Edge for Private Cloud のお客様が、すべてのテーブルでデフォルトの SizeTieredCompactionStrategy ではなく LeveledCompactionStrategy を使用して Cassandra クラスタを運用することをおすすめします。LeveledCompactionStrategy は、SizeTieredCompactionStrategy と比較して、パフォーマンスの向上、ディスク使用率の改善、より効率的な圧縮を実現し、必要な空き容量を削減します。

Edge for Private Cloud 4.52.02 以降の新規インストールでは、Cassandra が自動的に LeveledCompactionStrategy で構成されます。ただし、以前のバージョンから Edge for Private Cloud 4.54.00 にアップグレードした場合、インストールで SizeTieredCompactionStrategy を使用する Cassandra が使用されている可能性があります。

LeveledCompactionStrategy 以外の圧縮戦略に変更することはおすすめしませんが、このドキュメントでは、必要に応じて変更する方法と、現在の圧縮戦略を確認する手順について説明します。圧縮戦略を推奨されていないオプションに変更すると、今後の Cassandra ソフトウェアのアップグレードで変更が上書きされる可能性があります。標準以外の方法を使用している場合は、アップグレードごとに圧縮戦略を確認することをおすすめします。

準備

前提条件

Edge for Private Cloud 4.54.00 では、Cassandra 5.x で JDK 17(Java 17)が必要です。 Cassandra ノードで nodetool コマンドまたは cqlsh コマンドを実行する前に、Java 17 がデフォルトの Java バージョンとして構成されていることを確認します(たとえば、sudo alternatives --set java JAVA_17_PATH/bin/java を実行するか、JAVA_HOME を JDK 17 のインストールに設定します)。

既存の圧縮戦略を確認する

付録 1 の手順に沿って、テーブルの既存の圧縮戦略を確認できます。圧縮戦略がすでに LeveledCompactionStrategy、 になっている場合は、Edge for Private Cloud 4.51 以降のインストールから開始したか、Apigee の推奨に従って以前に LeveledCompactionStrategy に変更したことが原因である可能性があります。すでに LeveledCompactionStrategy を使用している場合は、Apigee はこの戦略を継続し、変更しないことをおすすめします。ただし、Edge for Private Cloud はお客様が運用しているため、必要に応じて圧縮戦略を変更する方法について説明します。

バックアップ

圧縮戦略を変更すると、Cassandra ノードで完全な圧縮サイクルがトリガーされるため、圧縮の負荷と同時アプリケーション トラフィックによりレイテンシが発生する可能性があります。この変更をロールバックする場合、バックアップからの復元は必要ありません。オプション 1: 変更を元に戻すで説明されているように、圧縮戦略を直接元に戻すことができます。ただし、念のため、圧縮戦略を変更する前にデータをバックアップする方法をご覧ください。

圧縮スループット

圧縮戦略が LeveledCompactionStrategy に変更されると、圧縮が 長時間実行されることがあります。データの圧縮サイズによって、実行時間が異なる場合があります。圧縮サイクル中に、Cassandra がより多くのシステム リソースを使用する可能性があります。圧縮によって多くのシステム リソースが消費され、API ランタイム リクエストが中断されないようにするため、圧縮スループットに上限を設定することをおすすめします。

各ノードで次の nodetool コマンドを実行して、すべての Cassandra ノードで圧縮スループットを最大 128 MB に設定します。

nodetool setcompactionthroughput 128

圧縮用の VM のサイズ設定

この変更を実行する前に、Cassandra ノードに十分な CPU リソースと メモリリソースがあり、CPU 使用率が 25% 以下で動作していることを確認してください。

圧縮戦略を変更すると、完全な圧縮サイクルが実行されることが想定されるため、トラフィックの少ない時間帯に圧縮戦略を変更することをおすすめします。

段階的な実行

特に大規模な Cassandra クラスタを運用している場合、すべてのノードの変更を 1 日以内に完了できないことがあります。これは、各ノードでインデックスを 1 つずつ再構築する必要があるためです。スキーマまたはテーブルの圧縮戦略を一度に変更できます。これを行うには、テーブルを変更して圧縮戦略を変更し、すべてのノードでテーブルのすべてのインデックス(存在する場合)を再構築します。次に、テーブルまたはキースペースごとに上記の手順を繰り返します。1 つのテーブルまたは 1 つのキースペースに対するこのような実行は、複数の日に分けて実行できます。

たとえば、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   
        

圧縮戦略の変更

圧縮戦略の変更は、大まかに次の 2 つの手順で行います。

  1. すべてのテーブルの圧縮戦略を変更します。
  2. 各ノードのすべてのインデックスを 1 つずつ再構築します。

圧縮戦略を変更するには、各テーブルで ALTER TABLE コマンドを 1 つずつ実行する必要があります。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`

Connected to Apigee at XXXXXXXX:9042.

[cqlsh 6.2.0 | Cassandra 5.0.8 | CQL spec 3.4.7 | Native protocol v5]
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 コマンドを 1 つずつ実行します。

次の手順 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: 変更を元に戻す

圧縮戦略を元の戦略にロールバックします。

圧縮戦略を変更するために以前実行したのと同様の ALTER TABLE コマンドを CQL プロンプトで実行します。

圧縮戦略を 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 6.2.0 | Cassandra 5.0.8 | CQL spec 3.4.7 | Native protocol v5]
Use HELP for help.
cqlsh>

現在の圧縮戦略は次のように判断できます。

出力の各行は、キースペース内のテーブルに関連しています。各行の column compaction は、テーブルで使用される圧縮戦略を示します。

  • 圧縮戦略が SizeTieredCompactionStrategy に設定されている場合、次のクエリの column compaction は次のようになります。
  • {'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
  • 圧縮戦略が LeveledCompactionStrategy に設定されている場合、次のクエリの column 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';