שכפול מופעים

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

סקירה כללית

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

שיבוט רגיל

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

שאלות נפוצות

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

שכפול מופע

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

המסוף

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

    כניסה לדף Cloud SQL Instances

  2. מוצאים את השורה של המופע שרוצים לשכפל.
  3. בעמודה פעולות, לוחצים על התפריט עוד פעולות.
  4. לוחצים על יצירת שיבוט.
  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. למידע נוסף על ההרשאות הנדרשות להרצת פקודות של ה-CLI של gcloud, אפשר לעיין במאמר הרשאות Cloud SQL.

Terraform

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

resource "google_sql_database_instance" "clone" {
  name             = "sqlserver-instance-clone-name"
  region           = "us-central1"
  database_version = "SQLSERVER_2017_STANDARD"
  root_password    = "INSERT-PASSWORD-HERE"
  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. מגדירים את פרויקט ברירת המחדל שבו רוצים להחיל את ההגדרות של Terraform. Google Cloud

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

    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. מידע נוסף על ההרשאות הנדרשות לשימוש בשיטות 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. מידע נוסף על ההרשאות הנדרשות לשימוש בשיטות 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. למידע נוסף על ההרשאות הנדרשות להרצת פקודות של ה-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. מידע נוסף על ההרשאות הנדרשות לשימוש בשיטות 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. מידע נוסף על ההרשאות הנדרשות לשימוש בשיטות API זמין במאמר הרשאות Cloud SQL.

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

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

פתרון בעיות

שגיאה פתרון בעיות
השיבוט נכשל עם השגיאה constraints/sql.restrictAuthorizedNetworks. הפעולה של שיבוט נחסמת על ידי ההגדרה Authorized Networks. Authorized Networks מוגדרות לכתובות IP ציבוריות בקטע 'קישוריות' במסוף 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 פרטית.