Apigee では、Cassandra データベースを使用して、プロキシ、キャッシュ、トークンのデータなど、ほとんどのデータを保存します。圧縮は、データベースに保存されているデータのサイズを削減するための重要なプロセスであり、効率的なデータベース オペレーションを維持するために不可欠です。Cassandra は、さまざまなコンパクション戦略をサポートしています。Apigee では、すべての Edge for Private Cloud のお客様に、すべてのテーブルでデフォルトの SizeTieredCompactionStrategy
ではなく LeveledCompactionStrategy
を使用して Cassandra クラスタを運用することをおすすめします。LeveledCompactionStrategy
は、SizeTieredCompactionStrategy
と比較してパフォーマンスが向上し、ディスク使用率が改善され、圧縮が効率的になり、必要な空き容量が少なくなります。
Apigee 4.52.02 以降の新しいインストールでは、すべて LeveledCompactionStrategy
を使用して Cassandra が自動的に構成されます。ただし、古いバージョンの Apigee を使用している場合や、古いバージョンから Apigee 4.53.00 にアップグレードしている場合は、インストールで 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
に変更するには、次の操作を行います。
-
次の CQL を実行して、テーブルを変更して圧縮戦略を変更します。
ALTER TABLE kms.oauth_20_access_tokens WITH compaction = {'class' : 'LeveledCompactionStrategy'};
-
このテーブルのみのすべてのインデックスを再作成します。
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 つずつ再構築します。
圧縮戦略を変更するには、各テーブルに対して ALTER TABLE
コマンドを 1 つずつ実行する必要があります。ALTER TABLE
コマンドの例を次に示します。
# To change to LeveledCompactionStrategyALTER TABLE
kms.oauth_20_access_tokens WITH compaction = {'class' : 'LeveledCompactionStrategy'}; # To change to SizeTieredCompactionStrategyALTER TABLE
kms.oauth_20_access_tokens WITH compaction = {'class' : 'SizeTieredCompactionStrategy'};
Alter Table を使用して新しい圧縮戦略を設定する
任意の 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 は、収益化を使用している場合にのみ適用されます。
- キースペースの圧縮戦略を変更する 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'};
- キースペースのコンパクション戦略を変更する CQL:
user_settings
ALTER TABLE user_settings.user_settings WITH compaction = {'class' : 'LeveledCompactionStrategy'};
- キースペースの圧縮戦略を変更する CQL:
keyvaluemap
ALTER TABLE keyvaluemap.keyvaluemaps_r21 WITH compaction = {'class' : 'LeveledCompactionStrategy'};
- キースペースのコンパクション戦略を変更する 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'};
- キースペースの圧縮戦略を変更する 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'};
- キースペースの圧縮戦略を変更する CQL:
cache
ALTER TABLE cache.cache_entries WITH compaction = {'class' : 'LeveledCompactionStrategy'}; ALTER TABLE cache.cache_sequence_id_r24 WITH compaction = {'class' : 'LeveledCompactionStrategy'};
- キースペースの圧縮戦略を変更する CQL:
auth
ALTER TABLE auth.totp WITH compaction = {'class' : 'LeveledCompactionStrategy'};
- キースペースの圧縮戦略を変更する CQL:
audit
ALTER TABLE audit.audits WITH compaction = {'class' : 'LeveledCompactionStrategy'}; ALTER TABLE audit.audits_ref WITH compaction = {'class' : 'LeveledCompactionStrategy'};
- キースペースのコンパクション戦略を変更する 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'};
- キースペースの圧縮戦略を変更する 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'};
- キースペースの圧縮戦略を変更する CQL:
identityzone
ALTER TABLE identityzone.IdentityZones WITH compaction = {'class' : 'LeveledCompactionStrategy'}; ALTER TABLE identityzone.OrgToIdentityZone WITH compaction = {'class' : 'LeveledCompactionStrategy'};
- キースペースの圧縮戦略を変更する CQL:
dek
ALTER TABLE dek.keys WITH compaction = {'class' : 'LeveledCompactionStrategy'};
- キースペースの圧縮戦略を変更する 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'};
- [収益化のみ] キースペースの圧縮戦略を変更する 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'};
- [収益化のみ] キースペースの圧縮戦略を変更する 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'};
- [収益化のみ] キースペースの圧縮戦略を変更する 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 は、収益化を使用している場合にのみ適用されます。
-
キースペース
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
-
キースペース
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
-
キースペース
cache
のインデックスを再ビルドしますnodetool rebuild_index cache cache_entries cache_entries_cache_name_idx
-
キースペース
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
-
キースペース
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
-
キースペース
dek
のインデックスを再ビルドしますnodetool rebuild_index dek keys usecase_index
-
[収益化のみ] キースペース
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
-
[収益化のみ] キースペース
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
-
[収益化のみ] キースペース
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 の手順に沿って、スキーマでの圧縮戦略の変更が有効になっていることを確認します。
- 圧縮が正常に実行され、戦略の変更後にデータが圧縮されていることを確認します。
- 各 Cassandra ノードで次の nodetool コマンドを実行して、すべてのコンパクションが完了し、保留中のものが何もないかどうかを確認します。
nodetool compactionstats
- 上記のコマンドを使用して、圧縮が保留されていないことを確認したら、データファイル(
/opt/apigee/data/apigee-cassandra/data/
の下)の最終更新タイムスタンプが、圧縮戦略変更 CQL が実行されたタイムスタンプの後であることを確認します。
- 各 Cassandra ノードで次の nodetool コマンドを実行して、すべてのコンパクションが完了し、保留中のものが何もないかどうかを確認します。
ロールバック
ロールバックを行う必要がある場合は、次のいずれかのオプションを選択します。
オプション 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 列は次のようになります。
- 圧縮戦略が LeveledCompactionStrategy に設定されている場合、以下のクエリの列 compaction は次のようになります。
{'class': 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy', 'max_threshold': '32', 'min_threshold': '4'}
{'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';