בדף הזה מוסבר איך לבצע תחזוקה בשירות עצמי, שמאפשרת לכם לאשר עדכון תחזוקה במכונה מחוץ לתהליך הרגיל של תחזוקה מתוזמנת.
סקירה כללית
ב-Cloud SQL מתפרסמים באופן קבוע שיפורים בתוכנה, כמו תיקונים לנקודות חולשה ידועות, באמצעות גרסאות תחזוקה חדשות. ב-Cloud SQL מתוזמנים עדכוני תחזוקה אחת לכמה חודשים כדי לוודא שאתם משתמשים בגרסת התחזוקה העדכנית, אבל יכול להיות שתרצו להשתמש בתחזוקה בשירות עצמי אם:
- אתם צריכים עדכון לפני אירוע התחזוקה המתוזמן הבא.
- אתם רוצים להתעדכן בגרסת התחזוקה האחרונה אחרי שדילגתם על אירוע התחזוקה המתוזמן האחרון.
אתם לא צריכים לעדכן ידנית לגרסה העדכנית. אתם יכולים לאפשר ל-Cloud SQL לעדכן באופן אוטומטי את גרסת התחזוקה במהלך אירוע התחזוקה המתוזמן הבא.
ניהול התחזוקה בכל הרפליקות לקריאה בלבד של מכונה ראשית
כשמבצעים תחזוקה בשירות עצמי במכונה ראשית שיש לה רפליקות לקריאה בלבד, המערכת של Cloud SQL מחילה באופן אוטומטי את עדכון התחזוקה על כל הרפליקות לקריאה בלבד. אם יש לכם יותר משלושה מופעים של רפליקות לקריאה בלבד, המופעים מחולקים לקבוצות ומתעדכנים במקביל. בשלב האחרון, עדכון התחזוקה מוחל על המכונה הראשית.
במקרה הצורך, עדיין אפשר לבצע תחזוקה בשירות עצמי ברפליקה אחת לקריאה בלבד. עם זאת, כדי לוודא שכל המכונות של הרפליקות לקריאה והמכונה הראשית פועלות באותה גרסת תחזוקה, מומלץ לבצע תחזוקה בשירות עצמי בכל הרפליקות לקריאה של מכונה ראשית בו-זמנית.
כדי לעדכן מכונה אחת של רפליקה לקריאה בלבד, צריך לציין את המכונה הזו כשמבצעים תחזוקה בשירות עצמי.
רוטציה אוטומטית של אישורי שרת
במכונות שמשתמשות ברשויות אישורים משותפות (serverCaMode מוגדר לערך GOOGLE_MANAGED_CAS_CA), תקופת התפוגה של אישורי השרת היא שנה אחת. כשאתם מבצעים תחזוקה בשירות עצמי במכונה, אתם יכולים לאפשר ל-Cloud SQL להחליף באופן אוטומטי את אישור השרת במהלך עדכוני תחזוקה עד 180 יום לפני שתוקף האישור פג. כדי לעשות את זה, צריך להפעיל את האפשרות החלפה אוטומטית של אישור השרת.
לפני שמתחילים
לפני שמבצעים תחזוקה בשירות עצמי, צריך לבדוק את גרסת התחזוקה הנוכחית. אחרי זה תוכלו לבחור את גרסת התחזוקה שאליה אתם רוצים לעדכן, ולעדכן את המכונה לגרסה הזו. אם אתם משתמשים ברפליקות לקריאה, עדכנו את כל הרפליקות לקריאה של המכונה הראשית לגרסה הזו.
כדי לראות את גרסת התחזוקה הנוכחית של מכונה, מבצעים את הפעולות הבאות:
gcloud
לפני שמריצים את הפקודה הבאה של gcloud, מחליפים את הערכים הבאים:
- INSTANCE_ID: המכונה שרוצים לשלוח אליה שאילתה
gcloud sql instances describe INSTANCE_ID
גרסת התחזוקה שמותקנת במכונה מצוינת לצד המאפיין maintenanceVersion.
REST v1
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: המזהה או מספר הפרויקט של הפרויקט ב- Google Cloud שמכיל את המכונה
- INSTANCE_NAME: השם של המכונה שאתם מגדירים לזמינות גבוהה
ה-method של ה-HTTP וכתובת ה-URL:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"kind": "sql#instance",
"state": "RUNNABLE",
"databaseVersion": "SQLSERVER_2019_STANDARD"
}
מחפשים את הפריט maintenanceVersion בקטע DatabaseInstance של התשובה.
REST v1beta4
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: המזהה או מספר הפרויקט של הפרויקט ב- Google Cloud שמכיל את המכונה
- INSTANCE_NAME: השם של המכונה שאתם מגדירים לזמינות גבוהה
ה-method של ה-HTTP וכתובת ה-URL:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"kind": "sql#instance",
"state": "RUNNABLE",
"databaseVersion": "SQLSERVER_2019_STANDARD"
}
מחפשים את הפריט maintenanceVersion בקטע DatabaseInstance של התשובה.
קביעת גרסת התחזוקה של היעד
כדי לראות את גרסאות התחזוקה שאפשר לבחור כיעד, השתמשו בשיטה הבאה: אי אפשר לעדכן לגרסה שקודמת לגרסת התחזוקה הנוכחית.
gcloud
לפני שמריצים את הפקודה הבאה של gcloud, מחליפים את הערכים הבאים:
- INSTANCE_ID: המכונה שרוצים לשלוח אליה שאילתה
gcloud sql instances describe INSTANCE_ID
גרסת התחזוקה הזמינה מצוינת לצד המאפיין availableMaintenanceVersions.
REST v1
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: המזהה או מספר הפרויקט של הפרויקט ב- Google Cloud שמכיל את המכונה
- INSTANCE_NAME: השם של המכונה שאתם מגדירים לזמינות גבוהה
ה-method של ה-HTTP וכתובת ה-URL:
GET https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_NAME
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"kind": "sql#instance",
"state": "RUNNABLE",
"databaseVersion": "SQLSERVER_2019_STANDARD"
}
מחפשים את הפריט availableMaintenanceVersions בקטע DatabaseInstance של התשובה.
REST v1beta4
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: המזהה או מספר הפרויקט של הפרויקט ב- Google Cloud שמכיל את המכונה
- INSTANCE_NAME: השם של המכונה שאתם מגדירים לזמינות גבוהה
ה-method של ה-HTTP וכתובת ה-URL:
GET https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_NAME
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"kind": "sql#instance",
"state": "RUNNABLE",
"databaseVersion": "SQLSERVER_2019_STANDARD"
}
מחפשים את הפריט availableMaintenanceVersions בקטע DatabaseInstance של התשובה.
עדכון כל העותקים לקריאה בלבד של מכונה ראשית לגרסת התחזוקה של היעד
כדי לבצע עדכון תחזוקה בכל המכונות של הרפליקות לקריאה בלבד של מכונה ראשית, צריך להשתמש בתהליך הבא.
gcloud
לפני שמריצים את הפקודה הבאה של gcloud, צריך להחליף את הערכים הבאים:
- PRIMARY_INSTANCE_ID: המזהה של המכונה הראשית
- MAINTENANCE_VERSION: גרסת התחזוקה של Cloud SQL שרוצים להחיל
gcloud sql instances patch PRIMARY_INSTANCE_ID \ --maintenance-version=MAINTENANCE_VERSION
בהודעת האישור, מקלידים Y כדי להמשיך או N כדי לבטל.
אם בוחרים באפשרות Y, תהליך העדכון מחיל את גרסת התחזוקה שצוינה על כל הרפליקות לקריאה בלבד לפני עדכון המכונה הראשית. המערכת מדלגת על כל מכונות הרפליקה לקריאה שכבר עודכנו לגרסת התחזוקה המטורגטת.
אם בוחרים באפשרות N, אף מופע לא מתעדכן.
אחרי שהעדכון של הרפליקות לקריאה בלבד ושל המכונה הראשית מסתיים, מופיעה הודעה דומה לזו:
Patching Cloud SQL instance....done. Patching Cloud SQL instance....done. Patching Cloud SQL instance....done. Updated [https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/PRIMARY_INSTANCE_ID]
Terraform
כדי ליצור מכונה, משתמשים במשאב של Terraform.
החלה של השינויים
כך מחילים את ההגדרות של Terraform בפרויקט ב- Google Cloud :
הכנת Cloud Shell
- מפעילים את Cloud Shell.
-
מגדירים את פרויקט ברירת המחדל ב- Google Cloud שבו רוצים להחיל את ההגדרות של Terraform.
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
אם תגדירו ערכים ספציפיים בקובץ התצורה של Terraform, הם יבטלו את ערכי ברירת המחדל של משתני הסביבה.
הכנת הספרייה
לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).
-
יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת
.tf, למשלmain.tf. במדריך הזה, הקובץ נקראmain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.
מעתיקים את הקוד לדוגמה בקובץ
main.tfהחדש שיצרתם.לחלופין, אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.
- בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
- שומרים את השינויים.
-
מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
terraform init
אופציונלי: תוכלו לכלול את האפשרות
-upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:terraform init -upgrade
החלה של השינויים
-
בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
terraform plan
מתקנים את ההגדרות לפי הצורך.
-
מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה, כדי להחיל את הגדרות Terraform:terraform apply
ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!".
- פותחים את הפרויקט ב- Google Cloud כדי להציג את התוצאות. במסוף Google Cloud , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.
למחוק את השינויים
כדי למחוק את השינויים:
- כדי להשבית את ההגנה מפני מחיקה, בקובץ התצורה של Terraform מגדירים את הארגומנט
deletion_protectionלערךfalse.deletion_protection = "false"
- מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה, כדי להחיל את הגדרות Terraform המעודכנות:terraform apply
-
כדי להסיר משאבים שהוחלו בעבר על הגדרות Terraform, מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה:terraform destroy
REST v1
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט
- PROJECT_ID: מזהה המכונה של המכונה הראשית
- MAINTENANCE_VERSION: גרסת התוכנה של Cloud SQL לתחזוקה שרוצים להחיל
ה-method של ה-HTTP וכתובת ה-URL:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID
תוכן בקשת JSON:
{
"maintenanceVersion": "MAINTENANCE_VERSION"
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-16T02:32:12.281Z",
"startTime": "08:00",
"endTime": "08:01",
"operationType": UPDATE,
"name": "OPERATION_ID",
"targetId": "PRIMARY_INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
REST v1beta4
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט
- INSTANCE_ID: מזהה המכונה של המכונה הראשית
- MAINTENANCE_VERSION: גרסת התוכנה של Cloud SQL לתחזוקה שרוצים להחיל
ה-method של ה-HTTP וכתובת ה-URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID
תוכן בקשת JSON:
{
"maintenanceVersion": "MAINTENANCE_VERSION"
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-16T02:32:12.281Z",
"startTime": "08:00",
"endTime": "08:01",
"operationType": UPDATE,
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
עדכון מכונה אחת לגרסת התחזוקה הרצויה
כדי לבצע עדכון תחזוקה במכונה אחת, צריך להשתמש בתהליך הבא: במקרה הצורך, אתם יכולים להשתמש בתהליך הזה כדי לעדכן מכונה אחת של רפליקה לקריאה בלבד.
gcloud
לפני שמריצים את הפקודה gcloud, צריך להחליף את הערכים הבאים:
- INSTANCE_ID: המזהה של המכונה. המכונה הזו יכולה להיות מכונה של רפליקה לקריאה.
- MAINTENANCE_VERSION: גרסת התחזוקה של Cloud SQL שרוצים להחיל
gcloud sql instances patch INSTANCE_ID \ --maintenance-version=MAINTENANCE_VERSION
אם מציינים עותק לקריאה בלבד, מופיעה בקשה לאישור. כדי להמשיך, מקלידים Y. כדי לבטל, מקלידים N.
- אם בוחרים באפשרות
Y, תהליך העדכון מחיל את גרסת התחזוקה שצוינה רק על הרפליקה לקריאה בלבד שצוינה. - אם בוחרים באפשרות
N, אף מופע לא מתעדכן.
אחרי שהמכונה תתעדכן, תופיע הודעה דומה לזו:
Patching Cloud SQL instance....done. Updated [https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID]
Terraform
כדי ליצור מכונה, משתמשים במשאב של Terraform.
החלה של השינויים
כך מחילים את ההגדרות של Terraform בפרויקט ב- Google Cloud :
הכנת Cloud Shell
- מפעילים את Cloud Shell.
-
מגדירים את פרויקט ברירת המחדל ב- Google Cloud שבו רוצים להחיל את ההגדרות של Terraform.
תצטרכו להריץ את הפקודה הזו רק פעם אחת לכל פרויקט, ותוכלו לעשות זאת בכל ספרייה.
export GOOGLE_CLOUD_PROJECT=PROJECT_ID
אם תגדירו ערכים ספציפיים בקובץ התצורה של Terraform, הם יבטלו את ערכי ברירת המחדל של משתני הסביבה.
הכנת הספרייה
לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).
-
יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת
.tf, למשלmain.tf. במדריך הזה, הקובץ נקראmain.tf.mkdir DIRECTORY && cd DIRECTORY && touch main.tf
-
אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.
מעתיקים את הקוד לדוגמה בקובץ
main.tfהחדש שיצרתם.לחלופין, אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.
- בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
- שומרים את השינויים.
-
מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
terraform init
אופציונלי: תוכלו לכלול את האפשרות
-upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:terraform init -upgrade
החלה של השינויים
-
בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
terraform plan
מתקנים את ההגדרות לפי הצורך.
-
מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה, כדי להחיל את הגדרות Terraform:terraform apply
ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!".
- פותחים את הפרויקט ב- Google Cloud כדי להציג את התוצאות. במסוף Google Cloud , נכנסים למשאבים בממשק המשתמש כדי לוודא שהם נוצרו או עודכנו ב-Terraform.
למחוק את השינויים
כדי למחוק את השינויים:
- כדי להשבית את ההגנה מפני מחיקה, בקובץ התצורה של Terraform מגדירים את הארגומנט
deletion_protectionלערךfalse.deletion_protection = "false"
- מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה, כדי להחיל את הגדרות Terraform המעודכנות:terraform apply
-
כדי להסיר משאבים שהוחלו בעבר על הגדרות Terraform, מריצים את הפקודה הבאה ומזינים
yesבהודעה שמופיעה:terraform destroy
REST v1
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט
- PROJECT_ID: מזהה המכונה, שיכול להיות מכונה של רפליקה לקריאה בלבד
- MAINTENANCE_VERSION: גרסת התוכנה של Cloud SQL לתחזוקה שרוצים להחיל
ה-method של ה-HTTP וכתובת ה-URL:
PATCH https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID
תוכן בקשת JSON:
{
"maintenanceVersion": "MAINTENANCE_VERSION"
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/INSTANCE_ID",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-16T02:32:12.281Z",
"startTime": "08:00",
"endTime": "08:01",
"operationType": UPDATE,
"name": "OPERATION_ID",
"targetId": "PRIMARY_INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
REST v1beta4
לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:
- PROJECT_ID: מזהה הפרויקט
- INSTANCE_ID: מזהה המכונה, שיכול להיות מכונה של רפליקה לקריאה בלבד
- MAINTENANCE_VERSION: גרסת התוכנה של Cloud SQL לתחזוקה שרוצים להחיל
ה-method של ה-HTTP וכתובת ה-URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID
תוכן בקשת JSON:
{
"maintenanceVersion": "MAINTENANCE_VERSION"
}
כדי לשלוח את הבקשה צריך להרחיב אחת מהאפשרויות הבאות:
אתם אמורים לקבל תגובת JSON שדומה לזו:
{
"kind": "sql#operation",
"targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/INSTANCE_ID",
"status": "PENDING",
"user": "user@example.com",
"insertTime": "2020-01-16T02:32:12.281Z",
"startTime": "08:00",
"endTime": "08:01",
"operationType": UPDATE,
"name": "OPERATION_ID",
"targetId": "INSTANCE_ID",
"selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
"targetProject": "PROJECT_ID"
}
פתרון בעיות
| שגיאה | פתרון בעיות |
|---|---|
| אי אפשר להחיל עדכון תחזוקה על מכונה שהופסקה. | כדי לפתור את הבעיה, צריך להפעיל את המכונה לפני שמבצעים את עדכון התחזוקה בשירות עצמי. |
| עדכון התחזוקה נכשל בגלל הבדל בגרסה הראשית של מסד הנתונים. | אי אפשר להשתמש בתחזוקה בשירות עצמי כדי לשדרג את הגרסה הראשית של מסד הנתונים של מכונה. כדי לשדרג את הגרסה הראשית של מכונה, משתמשים באחד מהתהליכים הבאים: |