יצירת עותקים לקריאה

בדף הזה מוסבר איך ליצור עותק לקריאה בלבד של מכונה ב-Cloud SQL.

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

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

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

לפני שמתחילים

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

יצירת עותק לקריאה בלבד

כך יוצרים עותק לקריאה בלבד:

המסוף

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

    כניסה לדף Cloud SQL Instances

  2. מוצאים את המכונה שרוצים ליצור לה רפליקה ופותחים את התפריט more actions לצד הרשומה.
  3. בוחרים באפשרות Create read replica.

    אם האפשרות הזו לא מופיעה, המכונה היא רפליקה. אי אפשר ליצור רפליקה של רפליקה.

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

    מידע נוסף על כל הגדרה זמין בדף מידע על הגדרות המכונה.

    לדוגמה, כדי לאפשר לשירותים אחרים של Cloud de Confiance by S3NS , כמו BigQuery, לגשת לנתונים ב-Cloud SQL ולבצע שאילתות על הנתונים האלה דרך חיבור פנימי, מרחיבים את הקבוצה Connections ומבטלים את הבחירה בתיבת הסימון Public IP.

  5. לוחצים על Create replica.

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

gcloud

יוצרים את הרפליקה:

gcloud sql instances create REPLICA_NAME \
--master-instance-name=MASTER_INSTANCE_NAME

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

אפשר לציין אזור אחר באמצעות הפרמטר --region.

אם למכונה הראשית יש רק כתובת IP פנימית, ואתם רוצים לאפשר לשירותי Cloud de Confiance by S3NS אחרים, כמו BigQuery, לגשת לנתונים ב-Cloud SQL ולבצע שאילתות על הנתונים האלה באמצעות חיבור פנימי, הוסיפו את הפרמטר --enable-google-private-path לפקודה.

צריך ליצור את הרפליקה באותה רשת VPC שבה נמצא המכונה הראשית. אפשר גם לציין allocated-ip-range-name ברשת ה-VPC הזו. אם לא מצוין טווח, הרפליקה נוצרת בטווח אקראי.

Terraform

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

resource "google_sql_database_instance" "read_replica" {
  name                 = "postgres-replica-instance-name"
  master_instance_name = google_sql_database_instance.primary.name
  region               = "europe-west4"
  database_version     = "POSTGRES_14"

  settings {
    tier              = "db-custom-2-7680"
    availability_type = "ZONAL"
    disk_size         = "100"
  }
  # 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
}

REST v1

משתמשים ב-method‏ insert של המשאב instances כדי ליצור את הרפליקה לקריאה בלבד. המאפיינים region ו-databaseVersion חייבים להיות זהים לאלה של המאסטר.

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

  • ‫project-id: מזהה הפרויקט
  • ‫database-version: מחרוזת גרסה של Enum (לדוגמה, POSTGRES_12)
  • ‫primary-instance-name: השם של המכונה הראשית
  • ‫primary-instance-region: האזור של המכונה הראשית
  • ‫replica-region: האזור של המכונה המשוכפלת
  • ‫replica-name: השם של מכונת הרפליקה
  • ‫machine-type: מחרוזת של טיפוסים בני מנייה (enum) של סוג המכונה. לדוגמה: "db-custom-1-3840"
  • ‫private-network: הרשת המורשית שמוסיפים או בוחרים כדי ליצור חיבור פרטי.

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

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

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

תוכן בקשת JSON:

{
  "masterInstanceName": "primary-instance-name",
  "project": "project-id",
  "databaseVersion": "database-version",
  "name": "replica-name",
  "region": "replica-region",
  "settings":
  {
    "tier": "machine-type",
    "settingsVersion": 0,
    "ipConfiguration": {
    object (IpConfiguration)
  },
  {
  "ipv4Enabled": false,
  "privateNetwork": private-network,
  "requireSsl": boolean,
  "authorizedNetworks": [
    {
      object (AclEntry)
    }
  ],
  "allocatedIpRange": string
    }
  },
  "sqlNetworkArchitecture": "NEW_NETWORK_ARCHITECTURE"
}

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

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

REST v1beta4

משתמשים ב-method‏ insert של המשאב instances כדי ליצור את הרפליקה לקריאה בלבד. המאפיינים region ו-databaseVersion חייבים להיות זהים לאלה של המאסטר.

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

  • ‫project-id: מזהה הפרויקט
  • ‫database-version: מחרוזת גרסה של Enum (לדוגמה, POSTGRES_12)
  • ‫primary-instance-name: השם של המכונה הראשית
  • ‫primary-instance-region: האזור של המכונה הראשית
  • ‫replica-region: האזור של המכונה המשוכפלת
  • ‫replica-name: השם של מכונת הרפליקה
  • ‫machine-type: מחרוזת של טיפוסים בני מנייה (enum) של סוג המכונה. לדוגמה: "db-custom-1-3840"
  • ‫private-network: הרשת המורשית שמוסיפים או בוחרים כדי ליצור חיבור פרטי.

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

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

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

תוכן בקשת JSON:

{
  "masterInstanceName": "primary-instance-name",
  "project": "project-id",
  "databaseVersion": "database-version",
  "name": "replica-name",
  "region": "replica-region",
  "settings":
  {
    "tier": "machine-type",
    "settingsVersion": 0,
    
    "ipConfiguration": {
    object (IpConfiguration)
  },
  {
  "ipv4Enabled": false,
  "privateNetwork": private-network,
  "requireSsl": boolean,
  "authorizedNetworks": [
    {
      object (AclEntry)
    }
  ],
  "allocatedIpRange": string
    }
    
  },
  "sqlNetworkArchitecture": "NEW_NETWORK_ARCHITECTURE"
}

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

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

יצירת עותק לקריאה בלבד של מכונה שמופעל בה Private Service Connect

כדי ליצור רפליקה לקריאה בלבד של מכונה שמופעל בה Private Service Connect, צריך להשתמש ב-ה-CLI של gcloud או ב-API. אתם יכולים ליצור את הרפליקה הזו באותו אזור או באזור שונה מהמכונה הראשית (רפליקה לקריאה בלבד בכמה אזורים).

הרפליקה לקריאה בלבד לא יכולה לשכפל ממכונה עם סוג קישוריות שונה. לדוגמה, מכונה שמופעל בה Private Service Connect יכולה לשכפל רק ממכונה אחרת של Private Service Connect. בנוסף, אי אפשר לשכפל ממכונה שתומכת בחיבורים של כתובות IP חיצוניות או ממכונה שמוגדרת עם גישה לשירותים פרטיים.

gcloud

כדי ליצור עותק לקריאה בלבד של מכונה, משתמשים בפקודה gcloud sql instances create:

gcloud sql instances create REPLICA_INSTANCE_NAME \
--master-instance-name=PRIMARY_INSTANCE_NAME \
--project=PROJECT_ID \
--region=REGION_NAME \
--enable-private-service-connect \
--allowed-psc-projects=ALLOWED_PROJECTS \
--availability-type=AVAILABILITY_TYPE \
--no-assign-ip

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

  • ‫REPLICA_INSTANCE_NAME: השם של מכונת הרפליקה.
  • ‫PRIMARY_INSTANCE_NAME: השם של המכונה הראשית.
  • ‫PROJECT_ID: המזהה או מספר הפרויקט ב- Cloud de Confiance שמכיל את המכונה.
  • ‫REGION_NAME: שם האזור של מכונת הרפליקה.
  • ‫ALLOWED_PROJECTS: רשימה של מזהי פרויקטים או מספרי פרויקטים מותרים, מופרדים בפסיקים. אם פרויקט לא מופיע ברשימה הזו, אי אפשר להשתמש בו כדי ליצור מכונה ולהפעיל בה את Private Service Connect.

    ‫Cloud SQL לא מעתיק לרפליקה את הפרויקטים המורשים של המכונה הראשית. לכל רפליקה צריך ליצור נקודת קצה (endpoint) מסוג Private Service Connect. אם אתם משתמשים ב-Cloud SQL Auth Proxy או ב-Cloud SQL Language Connectors, צרו תחום DNS ורשומת DNS לרפליקות.

  • ‫AVAILABILITY_TYPE: הפעלת זמינות גבוהה למכונה. בפרמטר הזה, מציינים את אחד מהערכים הבאים:
    • ‫REGIONAL: הפעלת זמינות גבוהה, מומלץ למכונות בסביבת הייצור. המכונה עוברת למצב של מעבר לגיבוי בעת כשל באזור אחר בתוך האזור שבחרתם.
    • ‫ZONAL: לא מספק יכולת יתירות כשל. זה ערך ברירת המחדל.

    מידע נוסף על הגדרה והסרה של זמינות גבוהה למכונות זמין במאמרים הגדרת מכונה קיימת לזמינות גבוהה והשבתת זמינות גבוהה למכונה.

REST v1

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

  • ‫PRIMARY_INSTANCE_NAME: השם של המכונה הראשית.
  • ‫PROJECT_ID: המזהה או מספר הפרויקט ב- Cloud de Confiance שמכיל את המכונה.
  • ‫REPLICA_INSTANCE_NAME: השם של מכונת הרפליקה.
  • ‫REGION_NAME: שם האזור של מכונת הרפליקה.
  • ‫MACHINE_TYPE: סוג המכונה.
  • ‫AVAILABILITY_TYPE: הפעלת זמינות גבוהה למכונה. בפרמטר הזה, מציינים את אחד מהערכים הבאים:
    • ‫REGIONAL: הפעלת זמינות גבוהה, מומלץ למכונות בסביבת הייצור. המכונה עוברת למצב של מעבר לגיבוי בעת כשל באזור אחר בתוך האזור שבחרתם.
    • ‫ZONAL: לא מספק יכולת יתירות כשל. זה ערך ברירת המחדל.

    מידע נוסף על הגדרה והסרה של זמינות גבוהה למכונות זמין במאמרים הגדרת מכונה קיימת לזמינות גבוהה והשבתת זמינות גבוהה למכונה.

  • ‫ALLOWED_PROJECTS: רשימה של מזהי פרויקטים או מספרי פרויקטים מותרים, מופרדים בפסיקים. אם פרויקט לא מופיע ברשימה הזו, אי אפשר להשתמש בו כדי ליצור מכונה ולהפעיל בה את Private Service Connect.

    ‫Cloud SQL לא מעתיק לרפליקה את הפרויקטים המורשים של המכונה הראשית. לכל רפליקה צריך ליצור נקודת קצה (endpoint) מסוג Private Service Connect. אם אתם משתמשים ב-Cloud SQL Auth Proxy או ב-Cloud SQL Language Connectors, אתם צריכים ליצור תחום DNS ורשומת DNS לרפליקות.

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

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

תוכן בקשת JSON:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "POSTGRES_13",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

REST v1beta4

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

  • ‫PRIMARY_INSTANCE_NAME: השם של המכונה הראשית.
  • ‫PROJECT_ID: המזהה או מספר הפרויקט ב- Cloud de Confiance שמכיל את המכונה.
  • ‫REPLICA_INSTANCE_NAME: השם של מכונת הרפליקה.
  • ‫REGION_NAME: שם האזור של מכונת הרפליקה.
  • ‫MACHINE_TYPE: סוג המכונה.
  • ‫AVAILABILITY_TYPE: הפעלת זמינות גבוהה למכונה. בפרמטר הזה, מציינים את אחד מהערכים הבאים:
    • ‫REGIONAL: הפעלת זמינות גבוהה, מומלץ למכונות בסביבת הייצור. המכונה עוברת למצב של מעבר לגיבוי בעת כשל באזור אחר בתוך האזור שבחרתם.
    • ‫ZONAL: לא מספק יכולת יתירות כשל. זה ערך ברירת המחדל.

    מידע נוסף על הגדרה והסרה של זמינות גבוהה למכונות זמין במאמרים הגדרת מכונה קיימת לזמינות גבוהה והשבתת זמינות גבוהה למכונה.

  • ‫ALLOWED_PROJECTS: רשימה של מזהי פרויקטים או מספרי פרויקטים מותרים, מופרדים בפסיקים. אם פרויקט לא מופיע ברשימה הזו, אי אפשר להשתמש בו כדי ליצור מכונה ולהפעיל בה את Private Service Connect.

    ‫Cloud SQL לא מעתיק לרפליקה את הפרויקטים המורשים של המכונה הראשית. לכל רפליקה צריך ליצור נקודת קצה (endpoint) מסוג Private Service Connect. אם אתם משתמשים ב-Cloud SQL Auth Proxy או ב-Cloud SQL Language Connectors, אתם צריכים ליצור תחום DNS ורשומת DNS לרפליקות.

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

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances

תוכן בקשת JSON:

{
  "masterInstanceName": "PRIMARY_INSTANCE_NAME",
  "project": "PROJECT_ID",
  "databaseVersion": "POSTGRES_13",
  "name": "REPLICA_INSTANCE_NAME",
  "region": "REGION_NAME",
  "kind": "sql#instance",
  "settings":
  {
    "tier": "MACHINE_TYPE",
    "availabilityType": "AVAILABILITY_TYPE",
    "settingsVersion": 0,
    "ipConfiguration": {
      "ipv4Enabled": false,
      "pscConfig": {
        "allowedConsumerProjects": [ALLOWED_PROJECTS],  
        "pscEnabled": true
      }
    },
    "kind": "sql#settings",
    "pricingPlan": "PER_USE",
    "replicationType": "ASYNCHRONOUS",
    "tier": "MACHINE_TYPE"
  }
}

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

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

{
  "kind": "sql#operation",
  "targetLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_NAME",
  "status": "PENDING",
  "user": "user@example.com",
  "insertTime": "2020-01-16T02:32:12.281Z",
  "operationType": "CREATE_REPLICA",
  "name": "OPERATION_ID",
  "targetId": "REPLICA_INSTANCE_NAME",
  "selfLink": "https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/operations/OPERATION_ID",
  "targetProject": "PROJECT_ID"
}

הגדרת רפליקות לקריאה בלבד לאימות מסד נתונים באמצעות IAM

אם מפעילים את הדגל cloudsql.iam_authentication במכונה הראשית, Cloud SQL ל-PostgreSQL מפעיל אותו אוטומטית ברפליקות לקריאה בלבד. עם זאת, אם לא תפעילו את הדגל הזה במכונה הראשית, Cloud SQL ל-PostgreSQL לא יפעיל אותו ברפליקות לקריאה בלבד. אי אפשר להשתמש ברפליקות לאימות מסד נתונים של IAM.

כדי להגדיר עותק לקריאה בלבד לאימות של מסד נתונים ב-IAM:

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

    כניסה לדף Cloud SQL Instances

  2. כדי לפתוח את הדף Overview של מכונה, לוחצים על שם המכונה.
  3. במשבצת Configuration, מחפשים את הדגל cloudsql.iam_authentication. אם הדגל לא מופיע ברשימה, אין צורך להפעיל אותו ברפליקה לקריאה בלבד. אם הדגל מופיע ברשימה, צריך להפעיל אותו ברפליקה לקריאה בלבד. אם צריך להפעיל את הדגל ברפליקה לקריאה בלבד, ממשיכים לשלב הבא.
  4. בתפריט הניווט של SQL, לוחצים על Replicas.
  5. לוחצים על שם הרפליקה שרוצים לערוך.
  6. לוחצים על Edit.
  7. בקטע Configuration options, מרחיבים את Flags.
  8. לוחצים על + הוספת פריט.
  9. מזינים את הערך cloudsql.iam_authentication בשם הדגל. מוודאים שהאפשרות מופעל נבחרה בדגל הזה.
  10. לוחצים על Save.

יצירת רפליקות מדורגות

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

במאמר רפליקות מדורגות מוסבר איך הן פועלות.

שלבים ליצירת רפליקה מדורגת

המסוף

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

    כניסה לדף Cloud SQL Instances

  2. בכרטיסייה Replicas, לוחצים על הרפליקה שתשמש כהורה לרפליקה שרוצים ליצור.
  3. לוחצים על Create replica.
  4. בדף Create read replica, מעדכנים את מזהה המכונה ואת כל אפשרויות ההגדרה האחרות, כולל השם, האזור והתחום.
  5. לוחצים על יצירה.

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

  6. חוזרים על שלבים 4 עד 6 לכל רפליקה מדורגת חדשה שרוצים ליצור.

gcloud

  1. יוצרים את הרפליקה החדשה על ידי ציון הרפליקה הראשית כמכונה הראשית באמצעות הדגל --master-instance-name:
  2. gcloud sql instances create REPLICA_NAME \
          --master-instance-name=PARENT_REPLICA_NAME \
    מחליפים את הערכים הבאים:
    • ‫REPLICA_NAME: המזהה הייחודי של הרפליקה שיוצרים
    • ‫PARENT_REPLICA_NAME: השם של הרפליקה הראשית
  3. אחרי שיוצרים את הרפליקה המשורשרת, אפשר לראות שהשינויים שבוצעו במכונה הראשית משוכפלים בכל הרפליקות בשרשרת הרפליקות המשורשרות.

curl

  1. כדי ליצור רפליקה מתחת לרפליקת ההורה, עורכים את דוגמת הקוד הבאה ב-JSON ושומרים אותה בקובץ בשם request.json:
    {
      "masterInstanceName": "PARENT_REPLICA_NAME",
      "project": "PROJECT_ID",
      "name": "REPLICA_NAME",
      "region": "REPLICA_REGION",
      "settings":
        {
          "tier": "MACHINE_TYPE",
        }
    }
  2. מריצים את הפקודה הבאה:
    curl -X POST
    -H "Authorization: Bearer "$(gcloud auth print-access-token)
    -H "Content-Type: application/json; charset=utf-8"
    -d @request.json
    "https://sqladmin.googleapis.com/v1/projects/PROJECT_ID/instances"

פתרון בעיות

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

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

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

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

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

הדיסק מלא. גודל הדיסק של המכונה הראשית יכול להתמלא במהלך יצירת הרפליקה. עורכים את המכונה הראשית כדי לשדרג אותה לגודל דיסק גדול יותר.
המקום בכונן גדל באופן משמעותי. אם יש משבצת שלא משמשת באופן פעיל למעקב אחרי נתונים, PostgreSQL שומר את מקטעי ה-WAL ללא הגבלת זמן, וכך המקום בכונן גדל ללא הגבלת זמן. אם אתם משתמשים בתכונות שכפול לוגי ופענוח ב-Cloud SQL, משבצות השכפול נוצרות ומוסרות באופן אוטומטי. כדי לזהות משבצות רפליקציה שלא בשימוש, אפשר לשלוח שאילתה לתצוגת המערכת pg_replication_slots ולסנן לפי העמודה active. אפשר להסיר משבצות שלא בשימוש כדי להסיר מקטעי WAL באמצעות הפקודה pg_drop_replication_slot.
מופע הרפליקה משתמש ביותר מדי זיכרון. הרפליקה משתמשת בזיכרון זמני כדי לשמור במטמון פעולות קריאה שמתבקשות לעיתים קרובות, מה שעלול לגרום לה להשתמש ביותר זיכרון מאשר המכונה הראשית.

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

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

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

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

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

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

אם אתם חייבים להשתמש באינדקסי גיבוב, שדרגו ל-PostgreSQL 10 ואילך. אחרת, אם אתם רוצים להשתמש גם ברפליקות, אל תשתמשו באינדקסי גיבוב ב-PostgreSQL 9.6.

השאילתה במכונה הראשית תמיד פועלת. אחרי שיוצרים רפליקה, השאילתה SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' אמורה לפעול באופן רציף במכונה הראשית.
יצירת הרפליקה נכשלת בגלל זמן קצוב לתפוגה. טרנזקציות ארוכות שלא בוצעו במכונה הראשית יכולות לגרום לכך שהיצירה של רפליקה לקריאה בלבד תיכשל.

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

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

כדי לפתור את הבעיה:

  1. מפעילים את הדגל log_duration ומגדירים את הפרמטר log_statement לערך ddl. כך תקבלו גם את השאילתות וגם את זמן הריצה במסד הנתונים. עם זאת, בהתאם לעומס העבודה, יכול להיות שזה יגרום לבעיות בביצועים.
  2. מריצים את explain analyze על השאילתות גם במכונה הראשית וגם ברפליקה לקריאה בלבד.
  3. משווים בין התוכניות לביצוע שאילתות ובודקים אם יש הבדלים.

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

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