ניהול רפליקות לקריאה

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

למידע נוסף על אופן הפעולה של הרפליקציה, ראו רפליקציה ב-Cloud SQL.

הדף הזה רלוונטי לרפליקות של מכונה ב-Cloud SQL. כדי להגדיר מכונה של Cloud SQL שתפעל כמפרסם למנוי חיצוני, קראו את המאמר הגדרת רפליקות חיצוניות.

השבתת הרפליקציה

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

השבתת הרפליקציה לא עוצרת את מכונת הרפליקה, אלא הופכת אותה למכונה לקריאה בלבד שלא משכפלת יותר מהמכונה הראשית שלה. החיוב על המכונה יימשך. ברפליקה המושבתת, אפשר להפעיל מחדש את הרפליקציה, למחוק את הרפליקה או לקדם את הרפליקה למכונה עצמאית.

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

כדי להשבית את הרפליקציה:

המסוף

  1. נכנסים לדף Cloud SQL Instances במסוף Google Cloud .

    כניסה לדף Cloud SQL Instances

  2. לוחצים על השם של מכונת הרפליקה.
  3. בסרגל הלחצנים, לוחצים על Disable replication.
  4. לוחצים על OK.

gcloud

gcloud sql instances patch REPLICA_NAME \
--no-enable-database-replication

REST v1

כדי להריץ את פקודת ה-cURL הזו בשורת הפקודה, צריך לקבל אסימון גישה באמצעות הפקודה gcloud auth print-access-token. אפשר גם להשתמש ב-APIs Explorer בדף Instances:patch כדי לשלוח את בקשת ה-API בארכיטקטורת REST.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט
  • ‫replica-name: השם של מכונת הרפליקה

ה-method של ה-HTTP וכתובת ה-URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name

תוכן בקשת JSON:

{
  "settings":
  {
    "databaseReplicationEnabled": "False"
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

‫REST v1beta4

כדי להריץ את פקודת ה-cURL הזו בשורת הפקודה, צריך לקבל אסימון גישה באמצעות הפקודה gcloud auth print-access-token. אפשר גם להשתמש ב-APIs Explorer בדף Instances:patch כדי לשלוח את בקשת ה-API בארכיטקטורת REST.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט
  • ‫replica-name: השם של מכונת הרפליקה

ה-method של ה-HTTP וכתובת ה-URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name

תוכן בקשת JSON:

{
  "settings":
  {
    "databaseReplicationEnabled": "False"
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

הפעלת הרפליקציה

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

כדי להפעיל את הרפליקציה:

המסוף

  1. נכנסים לדף Cloud SQL Instances במסוף Google Cloud .

    כניסה לדף Cloud SQL Instances

  2. לוחצים על השם של מכונת הרפליקה.
  3. לוחצים על Enable replication.
  4. לוחצים על אישור.

gcloud

gcloud sql instances patch REPLICA_NAME \
--enable-database-replication

REST v1

כדי להריץ את פקודת ה-cURL הזו בשורת הפקודה, צריך לקבל אסימון גישה באמצעות הפקודה gcloud auth print-access-token. אפשר גם להשתמש ב-APIs Explorer בדף Instances:patch כדי לשלוח את בקשת ה-API בארכיטקטורת REST.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט
  • ‫replica-name: השם של מכונת הרפליקה

ה-method של ה-HTTP וכתובת ה-URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name

תוכן בקשת JSON:

{
  "settings":
  {
    "databaseReplicationEnabled": "True"
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

‫REST v1beta4

כדי להריץ את פקודת ה-cURL הזו בשורת הפקודה, צריך לקבל אסימון גישה באמצעות הפקודה gcloud auth print-access-token. אפשר גם להשתמש ב-APIs Explorer בדף Instances:patch כדי לשלוח את בקשת ה-API בארכיטקטורת REST.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט
  • ‫replica-name: השם של מכונת הרפליקה

ה-method של ה-HTTP וכתובת ה-URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name

תוכן בקשת JSON:

{
  "settings":
  {
    "databaseReplicationEnabled": "True"
  }
}

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

קידום רפליקה

כשמקדמים רפליקה לקריאה בלבד, הרפליקציה נפסקת והמכונה הופכת למכונה ראשית עצמאית של Cloud SQL עם יכולות קריאה וכתיבה.

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

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

  1. מפסיקים את כל פעולות הכתיבה למכונה הראשית.
  2. בודקים את סטטוס הרפליקציה של הרפליקה. אחת מהאפשרויות היא להשתמש במרכז הבקרה Always On Availability Group ב-SQL Server Management Studio ‏(SSMS).
  3. מוודאים שהרפליקה משוכפלת, ואז בודקים את השהיית השכפול, למשל כפי שדווחה על ידי המדד seconds_behind_master.
  4. משתמשים בפרוצדורה המאוחסנת sp_help_revlogin כדי לייצא את כל פרטי ההתחברות שנוצרו במכונה הראשית אחרי שנוצרה הרפליקה, ויוצרים אותם מחדש ברפליקה.

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

כדי לקדם רפליקה למכונה עצמאית:

המסוף

  1. נכנסים לדף Cloud SQL Instances במסוף Google Cloud .

    כניסה לדף Cloud SQL Instances

  2. לוחצים על השם של מכונת הרפליקה.
  3. לוחצים על Promote replica.
  4. לוחצים על אישור.

gcloud

gcloud sql instances promote-replica REPLICA_NAME
  

REST v1

כדי להריץ את פקודת ה-cURL הזו בשורת הפקודה, צריך לקבל אסימון גישה באמצעות הפקודה gcloud auth print-access-token.

אפשר גם להשתמש ב-APIs Explorer בדף Instances:promoteReplica כדי לשלוח את בקשת ה-API בארכיטקטורת REST.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט
  • ‫replica-name: השם של מכונת הרפליקה

ה-method של ה-HTTP וכתובת ה-URL:

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/replica-name/promoteReplica

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

‫REST v1beta4

כדי להריץ את פקודת ה-cURL הזו בשורת הפקודה, צריך לקבל אסימון גישה באמצעות הפקודה gcloud auth print-access-token.

אפשר גם להשתמש ב-APIs Explorer בדף Instances:promoteReplica כדי לשלוח את בקשת ה-API בארכיטקטורת REST.

לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

  • ‫project-id: מזהה הפרויקט
  • ‫replica-name: השם של מכונת הרפליקה

ה-method של ה-HTTP וכתובת ה-URL:

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/replica-name/promoteReplica

כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:

אתם אמורים לקבל תגובת JSON שדומה לזו:

מוודאים שהמכונה שקודמה מוגדרת בצורה נכונה. במיוחד כדאי לשקול להגדיר את המכונה לזמינות גבוהה, אם צריך.

בדיקת סטטוס הרפליקציה

נכון לעכשיו, צריך להשתמש בשאילתות T-SQL או ב-SSMS כדי לעקוב אחרי סטטוס הרפליקציה. למידע נוסף, קראו את המאמרים הבאים:

פתרון בעיות

שגיאה פתרון בעיות
הרפליקה לקריאה בלבד לא התחילה לשכפל בזמן היצירה. סביר להניח שיש שגיאה ספציפית יותר בקובצי היומן. בודקים את היומנים ב-Cloud Logging כדי למצוא את השגיאה בפועל.
לא ניתן ליצור עותק לקריאה בלבד – שגיאת invalidFlagValue. אחד מהדגלים בבקשה לא תקין. יכול להיות שזה דגל שציינתם במפורש או דגל שהוגדר לערך ברירת מחדל.

קודם כל, בודקים שהערך של הדגל max_connections גדול מהערך בשרת הראשי או שווה לו.

אם הדגל max_connections מוגדר כראוי, בודקים את היומנים ב-Cloud Logging כדי למצוא את השגיאה בפועל.

לא ניתן ליצור עותק לקריאה בלבד – שגיאה לא ידועה. סביר להניח שיש שגיאה ספציפית יותר בקובצי היומן. בודקים את היומנים ב-Cloud Logging כדי למצוא את השגיאה בפועל.

אם השגיאה היא set Service Networking service account as servicenetworking.serviceAgent role on consumer project, אפשר ליצור ידנית את חשבון השירות הנדרש לפי ההוראות במאמר יצירה והקצאה של תפקידים לסוכני שירות.

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

מפעילים מחדש את מכונת הרפליקה כדי לפנות את שטח הזיכרון הזמני.

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

עורכים את המכונה כדי להפעיל את automatic storage increase.

השהיית השכפול גבוהה באופן עקבי. עומס הכתיבה גבוה מדי והרפליקה לא יכולה לטפל בו. השהיית שכפול מתרחשת כשה-SQL thread ברפליקה לא מצליח לעמוד בקצב של ה-IO thread. סוגים מסוימים של שאילתות או עומסי עבודה יכולים לגרום לעיכוב זמני או קבוע ברפליקציה של סכימה מסוימת. חלק מהסיבות הנפוצות לעיכוב ברפליקציה הן:
  • שאילתות איטיות ברפליקה. צריך למצוא ולתקן אותן.
  • שאילתות כמו DELETE ... WHERE field < 50000000 גורמות לעיכוב ברפליקציה עם רפליקציה מבוססת-שורות, כי מספר עצום של עדכונים נערמים ברפליקה.

פתרונות אפשריים:

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

יוצרים מחדש את הרפליקה אחרי שעוצרים את כל השאילתות שפועלות.

המאמרים הבאים