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

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

Apigee 4.52.02 以降のすべての新規インストールでは、Cassandra が LeveledCompactionStrategy で自動的に構成されます。ただし、古いバージョンの Apigee を使用している場合や、古いバージョンから Apigee 4.52.02 にアップグレードしている場合は、インストールで SizeTieredCompactionStrategy が指定された Cassandra を引き続き使用できます。

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

準備

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

テーブルに対する既存のコンパクション戦略は、 付録 1 の手順に沿って確認できます。圧縮戦略がすでに LeveledCompactionStrategy になっている場合は、OPDK 4.51 以降のインストールを最初に開始したか、以前に Apigee が推奨する LeveledCompactionStrategy に変更した可能性があります。すでに LeveledCompactionStrategy を使用している場合は、この戦略を継続し、変更を避けることをおすすめします。ただし、Edge for Private Cloud はユーザーが操作するため、必要に応じて圧縮戦略を変更する方法について説明します。

バックアップ

コンパクション戦略を変更すると、Cassandra ノードで完全なコンパクション サイクルがトリガーされるため、コンパクションの負荷と同時アプリケーション トラフィックのため、レイテンシが発生する可能性があります。Cassandra ノードをバックアップから復元するために、この変更のロールバックが必要になる場合があります。コンパクション戦略を変更する前にデータをバックアップする方法については、バックアップ方法をご覧ください。

圧縮スループット

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

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

nodetool setcompactionthroughput 128

コンパクション用の VM のサイズ設定

この変更を実行する前に、Cassandra ノードに十分な CPU リソースとメモリリソースがあることを確認してください。この変更を実行する前に、Cassandra ノードが CPU 負荷の 25% を超えて動作していないことを確認してください。

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

スタッガード ランニング

特に大規模な Cassandra クラスタを運用している場合は、各ノードでインデックスを 1 つずつ再構築する必要があるため、すべてのノードの変更を 1 日で完了できないことがあります。一度に 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 つずつ再構築します。

コンパクション戦略を変更するには、各テーブルに 1 つずつ 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'};

表を変更して新しい圧縮戦略を設定

任意の 1 つの Cassandra ノードで次の CQL を実行し、一度に 1 つのキースペースの戦略を変更します。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 コマンドを 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: 変更を元に戻す

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

先ほど実行した 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';