שינוי אסטרטגיית הדחיסה של Cassandra

ב-Apigee, רוב הנתונים נשמרים במסד הנתונים של Cassandra, כולל נתונים של שרתי proxy, מטמונים וטוקנים. דחיסה היא תהליך קריטי להקטנת נפח הנתונים שמאוחסנים במאגרי נתונים, והיא חיונית לשמירה על פעולות יעילות של מסדי נתונים. ‫Cassandra תומכת באסטרטגיות שונות של דחיסה. ב-Apigee מומלץ לכל לקוחות Edge for Private Cloud להפעיל את אשכולות Cassandra עם LeveledCompactionStrategy ולא עם SizeTieredCompactionStrategy, שהוא ברירת המחדל, בכל הטבלאות. ‫LeveledCompactionStrategy מציע ביצועים טובים יותר, ניצול משופר של הדיסק, דחיסות יעילות יותר ודורש פחות שטח פנוי בהשוואה ל-SizeTieredCompactionStrategy.

בכל ההתקנות החדשות של Edge for Private Cloud בגרסה 4.52.02 ואילך, המערכת מגדירה אוטומטית את Cassandra עם LeveledCompactionStrategy. עם זאת, אם שדרגתם ל-Edge for Private Cloud 4.54.00 מגרסה קודמת, יכול להיות שההתקנה שלכם עדיין משתמשת ב-Cassandra עם SizeTieredCompactionStrategy.

למרות שלא מומלץ לשנות את אסטרטגיית הדחיסה לערך אחר מלבד LeveledCompactionStrategy, במאמר הזה מוסבר איך לבצע את השינוי אם יש צורך בכך, ומופיעות הוראות לבדיקת אסטרטגיית הדחיסה הנוכחית. אם תשנו את אסטרטגיית הדחיסה לאפשרות שלא מומלצת, יכול להיות ששדרוגים עתידיים של תוכנת Cassandra יחליפו את השינויים שלכם. אם אתם משתמשים בגישה לא סטנדרטית, מומלץ לאמת את אסטרטגיית הדחיסה אחרי כל שדרוג.

הכנה

דרישות מוקדמות

ב-Edge for Private Cloud 4.54.00, ‏ Cassandra 5.x דורש JDK 17 (Java 17). לפני שמריצים פקודות nodetool או cqlsh בצומת של Cassandra, צריך לוודא ש-Java 17 מוגדרת כגרסת ברירת המחדל של Java (לדוגמה, על ידי הרצת sudo alternatives --set java JAVA_17_PATH/bin/java או הגדרת JAVA_HOME להתקנה של JDK 17).

בדיקה של שיטת הדחיסה הקיימת

כדי לבדוק את אסטרטגיית הדחיסה הקיימת בטבלאות, אפשר לפעול לפי ההוראות שמפורטות בנספח 1. אם אסטרטגיית הדחיסה היא כבר LeveledCompactionStrategy, יכול להיות שהסיבה לכך היא שהתחלתם עם התקנה של Edge for Private Cloud בגרסה 4.51 ואילך, או ששיניתם בעבר ל-LeveledCompactionStrategy כפי שהומלץ על ידי Apigee. אם אתם כבר משתמשים ב-LeveledCompactionStrategy, מומלץ להמשיך להשתמש באסטרטגיה הזו ולא לבצע שינויים. עם זאת, מכיוון שאתם מפעילים את Edge for Private Cloud, בהוראות הבאות מוסבר איך לשנות את אסטרטגיית הדחיסה, אם רוצים.

גיבוי

שינוי אסטרטגיית הדחיסה מפעיל מחזור דחיסה מלא בצמתי Cassandra, ולכן עלול לגרום לזמני אחזור מסוימים בגלל עומס הדחיסות והתנועה הסימולטנית של האפליקציה. כדי לבטל את השינוי הזה, לא צריך לשחזר מגיבוי. אפשר לבטל את אסטרטגיית הדחיסה ישירות, כמו שמתואר בקטע אפשרות 1: ביטול השינוי. עם זאת, כאמצעי זהירות, כדאי לעיין במאמר איך לגבות כדי לגבות את הנתונים לפני שמשנים את אסטרטגיית הדחיסה.

קצב הדחיסה

אחרי שמשנים את אסטרטגיית הדחיסה ל-LeveledCompactionStrategy, יכול להיות שהדחיסות יפעלו במשך זמן רב. זמן הריצה עשוי להשתנות בהתאם לגודל של דחיסת הנתונים. במהלך מחזור הדחיסה, יכול להיות ש-Cassandra תשתמש ביותר משאבי מערכת. כדי לוודא שהדחיסה לא תופסת הרבה משאבי מערכת, מה שעלול לשבש את הבקשות של API Runtime, מומלץ להגדיר מגבלות על קצב העברת הנתונים של הדחיסה.

מריצים את הפקודה nodetool בכל אחד מהצמתים כדי להגדיר את קצב העברת הנתונים של הדחיסה לערך המקסימלי של 128MB בכל צמתי Cassandra:

nodetool setcompactionthroughput 128

שינוי הגודל של מכונות וירטואליות לצורך דחיסה

לפני שמבצעים את השינוי הזה, צריך לוודא שלצומתי Cassandra יש מספיק משאבי מעבד וזיכרון, ושהם פועלים בעומס מעבד של לא יותר מ-25%.

אחרי שינוי של אסטרטגיית הדחיסה, צפוי לפעול מחזור דחיסה מלא, ולכן מומלץ לשנות את אסטרטגיית הדחיסה בתקופות של תנועה נמוכה.

הפעלות מדורגות

יכול להיות שלא תצליחו להשלים את השינוי של כל הצמתים ביום אחד, במיוחד אם אתם מפעילים אשכולות גדולים של Cassandra, כי צריך לבנות מחדש את האינדקסים בכל צומת בנפרד. אפשר לשנות את אסטרטגיית הדחיסה של סכימה אחת או טבלה אחת בכל פעם. כדי לעשות את זה, משנים את שיטת הדחיסה של הטבלה ואז בונים מחדש את כל האינדקסים בטבלה (אם יש כאלה) בכל הצמתים. אחר כך חוזרים על התהליך שלמעלה לכל טבלה או מרחב מפתחות. אפשר לפצל ריצות כאלה של טבלה אחת או של מרחב מפתחות אחד כך שהן יתבצעו בימים שונים.

לדוגמה, כדי לשנות את אסטרטגיית הדחיסה של הטבלה oauth_20_access_tokens בסכימה kms ל-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'};

שינוי הטבלה כדי להגדיר אסטרטגיית דחיסה חדשה

מריצים את פקודות ה-CQL הבאות בכל צומת Cassandra כדי לשנות את האסטרטגיה של מרחב מפתחות אחד בכל פעם. אפשר להריץ שאילתות CQL בשורת הפקודה של CQL. הוראות להפעלת הנחיית CQL:

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

מחובר ל-Apigee בכתובת 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. CQLs to change compaction strategy for keyspace: 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. CQLs to change compaction strategy for keyspace: 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. CQLs to change compaction strategy for keyspace: 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. CQLs to change compaction strategy for keyspace: 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. CQLs to change compaction strategy for keyspace: 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'};

יצירה מחדש של אינדקסים

צריך לבצע את השלב הזה אחרי כל שינוי באסטרטגיית הדחיסה. מריצים את הפקודות הבאות של nodetool אחת אחרי השנייה בכל צומת של Cassandra.

השלבים 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 6.2.0 | Cassandra 5.0.8 | CQL spec 3.4.7 | Native protocol v5]
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';