שכפול מופעים

בדף הזה מוסבר איך לשכפל מכונה.

סקירה כללית

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

שיבוט רגיל

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

שכפול מהיר

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

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

מתי משתמשים בשכפול מהיר

מערכת Cloud SQL משתמשת באופן אוטומטי בשכפול מהיר כשהתנאים הבאים מתקיימים:

  • פעולות באותו אזור: צריך להתחיל את פעולת השכפול באותו אזור שבו נמצא מכונת המקור. אם תציינו אזור אחר (או אפילו אם תציינו מחדש את אותו אזור), התהליך יחזור כברירת מחדל לתהליך העבודה הרגיל של השכפול.
  • עקביות במאפייני הדיסק: מאפייני הדיסק של השכפול החדש חייבים להתאים בדיוק למכונה המקורית (למשל, Persistent Disk לעומת Google Cloud Hyperdisk, סוג ההצפנה, גודל הבלוק).
  • תמיכה במנוע של מסד הנתונים: המנוע של מסד הנתונים הוא Cloud SQL ל-MySQL או Cloud SQL ל-PostgreSQL

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

השוואה בין שיטות השכפול

בטבלה הבאה מוצגת השוואה בין התכונות של שכפול מהיר ושכפול רגיל:

תכונה שיבוט רגיל שכפול מהיר
טכנולוגיה תמונות מצב רגילות קובצי Snapshot מיידיים
העברת נתונים העתקת נתונים מלאה אל Cloud Storage וממנו. משך הזמן תלוי בגודל של מסד הנתונים. פעולה של מטא-נתונים בלבד לשכפול באותו אזור. גודל הנתונים לא משפיע על משך הזמן של יצירת השכפול.
משך הזמן שעות במסדי נתונים גדולים. השלבים ליצירת שכפול נמשכים בין כמה שניות לכמה דקות.
דרישות הגיבוי יוצרת גיבוי מלא זמני ב-Cloud Storage. משתמש בקובץ snapshot מואץ שנמחק אחרי שנוצר הדיסק החדש.
תחולה תמיכה בשכפולים בין אזורים שונים ובין אזורים גיאוגרפיים שונים. תמיכה רק בשכפולים באותו אזור.

שאלות נפוצות

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

שכפול מכונה

אפשר לשכפל מכונה של Cloud SQL באמצעות מסוף Google Cloud , ה-CLI של gcloud, ‏Terraform או ה-API.

המסוף

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

    כניסה לדף Cloud SQL Instances

  2. מוצאים את השורה של המכונה שרוצים לשכפל.
  3. בעמודה פעולות, לוחצים על התפריט פעולות נוספות.
  4. לוחצים על Create clone.
  5. בדף Create a clone, מעדכנים את מזהה המכונה לפי הצורך ולוחצים על Create clone, ומשאירים את האפשרות Clone current state of instance מסומנת.

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

gcloud

כדי לשכפל מכונה, משתמשים בפקודה gcloud sql instances clone:

gcloud sql instances clone SOURCE_INSTANCE_NAME DESTINATION_INSTANCE_NAME \
--project PROJECT_ID \
--preferred-zone ZONE_NAME \
--preferred-secondary-zone SECONDARY_ZONE_NAME

מחליפים את הפרטים הבאים:

  • ‫SOURCE_INSTANCE_NAME: השם של מכונת Cloud SQL שרוצים לשכפל.
  • ‫DESTINATION_INSTANCE_NAME: השם של המכונה המשוכפלת.
  • ‫PROJECT_ID: המזהה או מספר הפרויקט של הפרויקט ב- Google Cloud שמכיל את מכונות המקור והיעד.
  • ‫ZONE_NAME: אופציונלי. שם האזור הראשי של מכונת היעד. האפשרות הזו מתאימה אם רוצים שהמכונה של היעד תהיה באזור ראשי שונה מהמכונה של Cloud SQL שמשכפלים. במכונה אזורית, האזור הזה מחליף את האזור הראשי, אבל האזור המשני נשאר זהה למכונת המקור.
  • ‫SECONDARY_ZONE_NAME: אופציונלי. שם האזור המשני של מכונת היעד. אפשר להשתמש באפשרות הזו כדי לציין אזור משני אחר למכונה האזורית של Cloud SQL שרוצים לשכפל.

אם אתם משתמשים בפרמטרים --preferred-zone ו---preferred-secondary-zone, התנאים הבאים חלים:

  • גם האזור הראשי וגם האזור המשני חייבים להיות אזורים תקינים.
  • שני האזורים צריכים להיות באותו אזור של מכונת המקור.
  • האזור הראשי והאזור המשני חייבים להיות שונים.
  • במכונות אזוריות, אי אפשר להשתמש בפרמטר --preferred-secondary-zone. אם תעשו זאת, התהליך לשכפול המכונה ייכשל.
  • אם לא מציינים ערכים לפרמטרים --preferred-zone או --preferred-secondary-zone, למכונה המשוכפלת יהיו אותם אזורים ראשיים ומשניים כמו למכונת המקור.

כדי להריץ את הפקודה gcloud sql instances clone, צריך את ההרשאות cloudsql.instances.clone ו-cloudsql.instances.create. למידע נוסף על ההרשאות שנדרשות כדי להריץ פקודות של ה-CLI של gcloud, קראו את המאמר הרשאות ב-Cloud SQL.

Terraform

כדי לשכפל את המכונה, משתמשים במשאב של Terraform.

resource "google_sql_database_instance" "clone" {
  name             = "mysql-instance-clone-name"
  region           = "us-central1"
  database_version = "MYSQL_8_0"
  clone {
    source_instance_name = google_sql_database_instance.source.id
  }
  # set `deletion_protection` to true, will ensure that one cannot accidentally delete this instance by
  # use of Terraform whereas `deletion_protection_enabled` flag protects this instance at the GCP level.
  deletion_protection = false
}

החלה של השינויים

כך מחילים את ההגדרות של Terraform בפרויקט ב- Google Cloud :

הכנת Cloud Shell

  1. מפעילים את Cloud Shell.
  2. מגדירים את פרויקט ברירת המחדל ב- Google Cloud שבו רוצים להחיל את ההגדרות של Terraform.

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

    export GOOGLE_CLOUD_PROJECT=PROJECT_ID

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

הכנת הספרייה

לכל קובץ תצורה של Terraform צריכה להיות ספרייה משלו (שנקראת גם מודול ברמה הבסיסית).

  1. יוצרים ספרייה חדשה ב-Cloud Shell ובה יוצרים קובץ חדש. שם הקובץ חייב לכלול את הסיומת .tf, למשל main.tf. במדריך הזה, הקובץ נקרא main.tf.
    mkdir DIRECTORY && cd DIRECTORY && touch main.tf
  2. אם אתם עוקבים אחרי המדריך, תוכלו להעתיק את הקוד לדוגמה בכל קטע או שלב.

    מעתיקים את הקוד לדוגמה בקובץ main.tf החדש שיצרתם.

    לחלופין, אפשר גם להעתיק את הקוד מ-GitHub. כדאי לעשות את זה כשקטע הקוד של Terraform הוא חלק מפתרון מקצה לקצה.

  3. בודקים את הפרמטרים לדוגמה ומשנים אותם בהתאם לסביבה שלכם.
  4. שומרים את השינויים.
  5. מפעילים את Terraform. צריך לעשות זאת רק פעם אחת לכל ספרייה.
    terraform init

    אופציונלי: תוכלו לכלול את האפשרות -upgrade, כדי להשתמש בגרסה העדכנית ביותר של הספק של Google:

    terraform init -upgrade

החלה של השינויים

  1. בודקים את ההגדרות ומוודאים שהמשאבים שמערכת Terraform תיצור או תעדכן תואמים לציפיות שלכם:
    terraform plan

    מתקנים את ההגדרות לפי הצורך.

  2. מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה, כדי להחיל את הגדרות Terraform:
    terraform apply

    ממתינים עד שב-Terraform תוצג ההודעה "Apply complete!‎".

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

למחוק את השינויים

כדי למחוק את השינויים:

  1. כדי להשבית את ההגנה מפני מחיקה, בקובץ התצורה של Terraform מגדירים את הארגומנט deletion_protection לערך false.
    deletion_protection =  "false"
  2. מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה, כדי להחיל את הגדרות Terraform המעודכנות:
    terraform apply
  1. כדי להסיר משאבים שהוחלו בעבר על הגדרות Terraform, מריצים את הפקודה הבאה ומזינים yes בהודעה שמופיעה:

    terraform destroy

REST v1

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

  • ‫PROJECT_ID: המזהה או מספר הפרויקט של הפרויקט ב- Google Cloud שמכיל את מכונות המקור והיעד.
  • ‫SOURCE_INSTANCE_NAME: השם של מכונת Cloud SQL שרוצים לשכפל.
  • ‫DESTINATION_INSTANCE_NAME: השם של המכונה המשוכפלת.
  • ‫ZONE_NAME: אופציונלי. שם האזור הראשי של מכונת היעד. האפשרות הזו מתאימה אם רוצים שהמכונה של היעד תהיה באזור ראשי שונה מהמכונה של Cloud SQL שמשכפלים. במכונה אזורית, האזור הזה מחליף את האזור הראשי, אבל האזור המשני נשאר זהה למכונת המקור.
  • ‫SECONDARY_ZONE_NAME: אופציונלי. שם האזור המשני של מכונת היעד. אפשר להשתמש באפשרות הזו כדי לציין אזור משני אחר למכונה האזורית של Cloud SQL שרוצים לשכפל.

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

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone

תוכן בקשת JSON:

{
  "cloneContext":
  {
    "destinationInstanceName": "DESTINATION_INSTANCE_NAME",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

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

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

אם אתם משתמשים בפרמטרים preferredZone ו-preferredSecondaryZone, התנאים הבאים חלים:

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

כדי להשתמש ב-method ‏instances.clone ב-API, אתם צריכים את ההרשאות cloudsql.instances.clone ו-cloudsql.instances.create. למידע נוסף על ההרשאות שנדרשות כדי להשתמש בשיטות API, קראו את המאמר הרשאות ב-Cloud SQL.

REST v1beta4

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

  • ‫PROJECT_ID: המזהה או מספר הפרויקט של הפרויקט ב- Google Cloud שמכיל את מכונות המקור והיעד.
  • ‫SOURCE_INSTANCE_NAME: השם של מכונת Cloud SQL שרוצים לשכפל.
  • ‫DESTINATION_INSTANCE_NAME: השם של המכונה המשוכפלת.
  • ‫ZONE_NAME: אופציונלי. שם האזור הראשי של מכונת היעד. האפשרות הזו מתאימה אם רוצים שהמכונה של היעד תהיה באזור ראשי שונה מהמכונה של Cloud SQL שמשכפלים. במכונה אזורית, האזור הזה מחליף את האזור הראשי, אבל האזור המשני נשאר זהה למכונת המקור.
  • ‫SECONDARY_ZONE_NAME: אופציונלי. שם האזור המשני של מכונת היעד. אפשר להשתמש באפשרות הזו כדי לציין אזור משני אחר למכונה האזורית של Cloud SQL שרוצים לשכפל.

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

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_INSTANCE_NAME/clone

תוכן בקשת JSON:

{
  "cloneContext":
  {
    "destinationInstanceName": "DESTINATION_INSTANCE_NAME",
    "preferredZone": "ZONE_NAME",
    "preferredSecondaryZone": "SECONDARY_ZONE_NAME"
  }
}

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

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

אם אתם משתמשים בפרמטרים preferredZone ו-preferredSecondaryZone, התנאים הבאים חלים:

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

כדי להשתמש ב-method ‏instances.clone ב-API, אתם צריכים את ההרשאות cloudsql.instances.clone ו-cloudsql.instances.create. למידע נוסף על ההרשאות שנדרשות כדי להשתמש בשיטות API, קראו את המאמר הרשאות ב-Cloud SQL.

שכפול מכונה שמשתמשת בכתובת IP פנימית

אם למכונה של Cloud SQL יש כתובת IP פנימית, אתם יכולים לציין טווח IP מוקצה לכתובת ה-IP החדשה של השכפול. לדוגמה, google-managed-services-default.

gcloud

משכפלים את המכונה, ואם רוצים, מציינים את טווח כתובות ה-IP שהוקצה שבו רוצים להשתמש:

gcloud sql instances clone SOURCE_INSTANCE_NAME TARGET_INSTANCE_NAME \
--allocated-ip-range-name ALLOCATED_IP_RANGE_NAME

לחשבון המשתמש או לחשבון השירות שמריץ את הפקודה gcloud sql instances clone צריכות להיות ההרשאות cloudsql.instances.clone ו-cloudsql.instances.create. למידע נוסף על ההרשאות שנדרשות כדי להריץ פקודות של ה-CLI של gcloud, קראו את המאמר הרשאות ב-Cloud SQL.

REST v1

משכפלים את המכונה, ואם רוצים, מציינים את טווח כתובות ה-IP שהוקצה שבו רוצים להשתמש:

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

  • ‫project-id: מזהה הפרויקט
  • ‫source-instance-id: מזהה המכונה של המקור
  • ‫target-instance-id: מזהה מכונת היעד
  • ‫allocated-ip-range-name: השם של טווח כתובות ה-IP שהוקצה

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

POST https://sqladmin.googleapis.com/v1/projects/project-id/instances/source-instance-id/clone

תוכן בקשת JSON:

{
  "cloneContext":
  {
    "destinationInstanceName": "target-instance-id",
    "allocatedIpRange": "allocated-ip-range-name"
  }
}

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

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

לחשבון המשתמש או לחשבון השירות שמשתמשים ב-method‏ instances.clone של ה-API צריכות להיות ההרשאות cloudsql.instances.clone ו-cloudsql.instances.create. למידע נוסף על ההרשאות שנדרשות כדי להשתמש בשיטות API, קראו את המאמר הרשאות ב-Cloud SQL.

REST v1beta4

משכפלים את המכונה, ואם רוצים, מציינים את טווח כתובות ה-IP שהוקצה שבו רוצים להשתמש:

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

  • ‫project-id: מזהה הפרויקט
  • ‫source-instance-id: מזהה המכונה של המקור
  • ‫target-instance-id: מזהה מכונת היעד
  • ‫allocated-ip-range-name: השם של טווח כתובות ה-IP שהוקצה

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

POST https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/source-instance-id/clone

תוכן בקשת JSON:

{
  "cloneContext":
  {
    "destinationInstanceName": "target-instance-id",
    "allocatedIpRange": "allocated-ip-range-name"
  }
}

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

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

לחשבון המשתמש או לחשבון השירות שמשתמשים ב-method‏ instances.clone של ה-API צריכות להיות ההרשאות cloudsql.instances.clone ו-cloudsql.instances.create. למידע נוסף על ההרשאות שנדרשות כדי להשתמש בשיטות API, קראו את המאמר הרשאות ב-Cloud SQL.

אם לא מציינים טווח כתובות IP שהוקצה, תחול ההתנהגות הבאה:

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

פתרון בעיות

שגיאה פתרון בעיות
השכפול נכשל ומוצגת השגיאה constraints/sql.restrictAuthorizedNetworks. פעולת השכפול נחסמת על ידי ההגדרה Authorized Networks. Authorized Networks מוגדרים לכתובות IP ציבוריות בקטע Connectivity במסוף Google Cloud , ואי אפשר לשכפל אותם משיקולי אבטחה.

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

הודעת שגיאה: Failed to create subnetwork. Couldn't find free blocks in allocated IP ranges. Please allocate new ranges for this service provider. Help Token: [help-token-id].

אתם מנסים להשתמש במסוף כדי לשכפל מכונה עם כתובת IP פרטית, אבל לא ציינתם את טווח ה-IP שהוקצה שבו אתם רוצים להשתמש, ומכונת המקור לא נוצרה עם הטווח שצוין. Google Cloud כתוצאה מכך, המכונה המשוכפלת נוצרת בטווח אקראי.

משתמשים ב-gcloud כדי לשכפל את המכונה ומזינים ערך לפרמטר
--allocated-ip-range-name. מידע נוסף זמין במאמר שכפול מכונה עם כתובת IP פרטית.