בדף הזה מוסבר איך להגדיר ייבוא מנוהל של נתונים ולהשתמש בו כשמשכפלים משרת חיצוני ל-Cloud SQL.
אתם צריכים להשלים את כל השלבים בדף הזה. בסיום התהליך, תוכלו לנהל ולנטר את מכונת הייצוג של המקור בדיוק כמו כל מכונה אחרת של Cloud SQL.
לפני שמתחילים
לפני שמתחילים, צריך לבצע את השלבים הבאים:
אימות הגדרות השכפול
אחרי שמשלימים את ההגדרה, מוודאים שהרפליקה של Cloud SQL יכולה לשכפל מהשרת החיצוני.
ההגדרות הבאות של סנכרון חיצוני צריכות להיות נכונות.
- קישוריות בין העותק המשוכפל של Cloud SQL לבין שרת חיצוני
- הרשאות משתמש לשכפול
- תאימות גרסאות
- השכפול של הרפליקה ב-Cloud SQL לא מתבצע כבר
כדי לוודא שההגדרות האלה תקינות, פותחים טרמינל ב-Cloud Shell ומזינים את הפקודות הבאות:
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "SYNC_MODE",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL",
"selectedObjects": "SELECTED_OBJECTS"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/verifyExternalSyncSettings
דוגמה
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal",
"selectedObjects":[{"database":"db1"}, {"database":"db2"}]
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/myproject/instances/myreplica/verifyExternalSyncSettings
הקריאות האלה מחזירות רשימה מהסוג sql#externalSyncSettingErrorList.
אם הרשימה ריקה, אין שגיאות. תגובה ללא שגיאות נראית כך:
{ "kind": "sql#externalSyncSettingErrorList" }
| מאפיין (property) | תיאור |
|---|---|
| SYNC_MODE | מוודאים שאפשר לשמור על סנכרון בין הרפליקה של Cloud SQL לבין השרת החיצוני אחרי שמגדירים את השכפול. מצבי הסנכרון כוללים את EXTERNAL_SYNC_MODE_UNSPECIFIED, ONLINE ו-OFFLINE. |
| SYNC_PARALLEL_LEVEL | בודקים את ההגדרה שקובעת את המהירות שבה הנתונים מועברים מטבלאות של מסד נתונים. הערכים הבאים זמינים:
הערה: ערך ברירת המחדל של הפרמטר הזה הוא |
| SELECTED_OBJECTS | רשימה מופרדת בפסיקים של אובייקטים, שמציינת מסדי נתונים שאתם מעבירים ממופע ייצוג המקור למופע היעד של Cloud SQL. אם לא משתמשים בפרמטר הזה או שמספקים רשימה ריקה כערך של הפרמטר, כל מסדי הנתונים מועברים מהמקור ליעד. |
| PROJECT_ID | המזהה של Google Cloud הפרויקט. |
| REPLICA_INSTANCE_ID | המזהה של רפליקת Cloud SQL. |
עדכון של מופע ייצוג מקור
כדי לעדכן את מסדי הנתונים שרוצים להעביר ממופע הייצוג של המקור למופע היעד של Cloud SQL, צריך לעדכן את רשימת שמות מסדי הנתונים שמשויכים לפרמטר selectedObjects. אם לא משתמשים בפרמטר הזה או שמספקים רשימה ריקה כערך של הפרמטר, כל מסדי הנתונים מועברים מהמקור ליעד.
source.json
{ "name": "SOURCE_NAME", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "onPremisesConfiguration": { "selectedObjects": "SELECTED_OBJECTS", "username": "USERNAME", "password": "PASSWORD" } }
דוגמה
// example of source.json for external server that
// - initiates replication from a Cloud SQL managed import
// - doesn't use SSL/TLS
{
"name": "cloudsql-source-instance",
"region": "us-central1",
"databaseVersion": "POSTGRES_9_6",
"onPremisesConfiguration": {
"selectedObjects":[{"database":"db1"}, {"database":"db3"}],
"username": "newReplicationUser",
"password": "525#@%*@"
}
}
| מאפיין (property) | תיאור |
|---|---|
| SOURCE_NAME | השם של מופע ייצוג המקור. |
| REGION | האזור שבו נמצא מופע הייצוג של המקור. |
| DATABASE_VERSION | גרסת מסד הנתונים שפועלת בשרת החיצוני. האפשרויות הן POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16 או POSTGRES_17. |
| SELECTED_OBJECTS | רשימה מעודכנת של אובייקטים מופרדים בפסיקים, שמציינת את מסדי הנתונים שאתם מעבירים ממופע הייצוג של המקור למופע היעד של Cloud SQL. |
| USERNAME | חשבון המשתמש של השכפול בשרת החיצוני. |
| PASSWORD | הסיסמה לחשבון. |
כדי לשנות את מופע הייצוג של המקור ב-Cloud SQL, פותחים טרמינל של Cloud Shell ומזינים את הפקודות הבאות:
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data @JSON_PATH \
-X PATCH \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/SOURCE_NAME
דוגמה
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data @./source.json \
-X PATCH \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/cloudsql-source-instance
| מאפיין (property) | תיאור |
|---|---|
| JSON_PATH | הנתיב לקובץ JSON שמכיל את נתוני הבקשה לשרת החיצוני. |
| PROJECT_ID | המזהה של Google Cloud הפרויקט. |
| SOURCE_NAME | השם של מופע ייצוג המקור. |
הפעלת השכפול בשרת החיצוני
אחרי שמוודאים שאפשר לשכפל מהשרת החיצוני, מתחילים את השכפול. המהירות של ביצוע השכפול בתהליך הייבוא הראשוני היא עד 500GB לשעה. עם זאת, המהירות הזו יכולה להשתנות בהתאם לרמת המכונה, לגודל דיסק הנתונים, לתפוקת הרשת ולסוג מסד הנתונים.
curl
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "SYNC_MODE",
"skipVerification": "SKIP_VERIFICATION",
"syncParallelLevel": "SYNC_PARALLEL_LEVEL"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT_ID/instances/REPLICA_INSTANCE_ID/startExternalSync
דוגמה
gcloud auth login
ACCESS_TOKEN="$(gcloud auth print-access-token)"
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \
--header 'Content-Type: application/json' \
--data '{
"syncMode": "online",
"syncParallelLevel": "optimal"
}' \
-X POST \
https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances/replica-instance/startExternalSync
| מאפיין (property) | תיאור |
|---|---|
| SYNC_MODE | מוודאים שאפשר לשמור על סנכרון בין הרפליקה של Cloud SQL לבין השרת החיצוני אחרי שמגדירים את השכפול. |
| SKIP_VERIFICATION | האם לדלג על שלב האימות המובנה לפני סנכרון הנתונים. מומלץ להשתמש בפרמטר הזה רק אם כבר אימתתם את הגדרות השכפול. |
| SYNC_PARALLEL_LEVEL | צריך לספק הגדרה ששולטת במהירות שבה מועברים נתונים מטבלאות של מסד נתונים. הערכים הבאים זמינים:
הערה: ערך ברירת המחדל של הפרמטר הזה הוא |
| PROJECT_ID | המזהה של Google Cloud הפרויקט. |
| REPLICA_INSTANCE_ID | המזהה של רפליקת Cloud SQL. |
מעקב אחרי ההעברה
אחרי שמתחילים את השכפול מהשרת החיצוני, צריך לעקוב אחרי השכפול. מידע נוסף זמין במאמר בנושא מעקב אחרי רפליקציה. אחרי הלחיצה אפשר להשלים את ההעברה.
פתרון בעיות
כדאי לנסות את האפשרויות הבאות לפתרון בעיות:
| שגיאה | פתרון בעיות |
|---|---|
| השכפול של העותק לקריאה לא התחיל בזמן היצירה. | סביר להניח שיש שגיאה ספציפית יותר בקובצי היומן. בודקים את היומנים ב-Cloud Logging כדי למצוא את השגיאה בפועל. |
| אי אפשר ליצור העתק לקריאה – השגיאה invalidFlagValue. | אחד מהדגלים בבקשה לא תקין. יכול להיות שזה דגל שציינתם באופן מפורש או דגל שהוגדר לו ערך ברירת מחדל.
קודם כול, בודקים שהערך של הדגל אם הדגל |
| לא ניתן ליצור רפליקה לקריאה – שגיאה לא ידועה. | סביר להניח שיש שגיאה ספציפית יותר בקובצי היומן.
בודקים את היומנים ב-Cloud Logging כדי למצוא את השגיאה בפועל.
אם השגיאה היא: |
| הדיסק מלא. | יכול להיות שהגודל של הדיסק של המופע הראשי יתמלא במהלך יצירת רפליקה. עורכים את המופע הראשי כדי לשדרג אותו לגודל דיסק גדול יותר. |
| נפח האחסון בדיסק גדל באופן משמעותי. | משבצת שלא נמצאת בשימוש פעיל למעקב אחרי נתונים גורמת ל-PostgreSQL לשמור על קטעי WAL ללא הגבלת זמן, וכך נפח הדיסק גדל ללא הגבלה. אם משתמשים בתכונות logical replication and decoding ב-Cloud SQL, משבצות השכפול נוצרות ומוסרות באופן אוטומטי. אפשר לזהות משבצות שכפול שלא נעשה בהן שימוש על ידי שליחת שאילתה לתצוגת המערכת pg_replication_slots וסינון לפי העמודה active. אפשר להשתמש בפקודה pg_drop_replication_slot כדי להסיר פלחים של WAL על ידי השמטה של משבצות לא בשימוש.
|
| מופע הרפליקה משתמש ביותר מדי זיכרון. | הרפליקה משתמשת בזיכרון זמני כדי לשמור במטמון פעולות קריאה שמבוקשות לעיתים קרובות, מה שעלול לגרום לה להשתמש ביותר זיכרון מהמופע הראשי.
מפעילים מחדש את מופע הרפליקה כדי לפנות את המקום הזמני בזיכרון. |
| השכפול הופסק. | הגעתם למגבלת האחסון המקסימלית ולא הפעלתם את האפשרות להגדלת נפח האחסון באופן אוטומטי.
עורכים את המופע כדי להפעיל את |
| ההשהיה בשכפול גבוהה באופן עקבי. | עומס הכתיבה גבוה מדי בשביל הרפליקה. השהיית שכפול
מתרחשת כשהשרשור של SQL ברפליקה לא מצליח לעמוד בקצב של השרשור של IO. סוגים מסוימים של שאילתות או עומסי עבודה עלולים לגרום לעיכובים זמניים או קבועים בשכפול של סכימה נתונה. חלק מהסיבות הנפוצות להשהיה בשכפול:
הנה כמה פתרונות אפשריים:
|
| שגיאות במהלך בנייה מחדש של אינדקסים ב-PostgreSQL 9.6. | קיבלתם שגיאה מ-PostgreSQL שמציינת שצריך לבנות מחדש אינדקס מסוים. אפשר לעשות את זה רק במופע הראשי. אם תיצרו מכונת רפליקה חדשה, תקבלו שוב את אותה שגיאה תוך זמן קצר.
אינדקסים של Hash
לא מועברים לרפליקות בגרסאות PostgreSQL מתחת ל-10.
אם אתם חייבים להשתמש באינדקסים של hash, אתם צריכים לשדרג ל-PostgreSQL 10 ומעלה. אחרת, אם אתם רוצים להשתמש גם בעותקים משוכפלים, אל תשתמשו באינדקסים של hash ב-PostgreSQL 9.6. |
| השאילתה במופע הראשי תמיד פועלת. | אחרי שיוצרים רפליקה, השאילתה SELECT * from pg_stat_activity where state = 'active' and pid = XXXX and username = 'cloudsqlreplica' אמורה לפעול באופן רציף במופע הראשי.
|
| יצירת רפליקה נכשלה בגלל זמן קצוב לתפוגה. | עסקאות ארוכות טווח שלא בוצעו במופע הראשי עלולות לגרום לכך שיצירת רפליקת קריאה תיכשל.
אחרי שמפסיקים את כל השאילתות הפעילות, יוצרים מחדש את העותק. |
| אם למופע הראשי ולרפליקה יש גדלים שונים של vCPU, יכול להיות שיהיו בעיות בביצועי השאילתות, כי האופטימיזציה של השאילתות מתבצעת בהתאם לגדלים של vCPU. |
כדי לפתור את הבעיה, מבצעים את השלבים הבאים:
אם מדובר בשאילתה ספציפית, צריך לשנות את השאילתה. לדוגמה, אפשר לשנות את הסדר של הפעולות לצירוף כדי לראות אם הביצועים משתפרים. |
בדיקת יומני השכפול
כשמאמתים את הגדרות השכפול, נוצרים יומנים.
כדי לראות את היומנים האלה:
נכנסים אל Logs Viewer במסוף Google Cloud .
- בתפריט הנפתח Instance (מופע), בוחרים את הרפליקה של Cloud SQL.
- בוחרים את קובץ היומן
replication-setup.log.
אם הרפליקה של Cloud SQL לא מצליחה להתחבר לשרת החיצוני, צריך לוודא את הדברים הבאים:
- חומת אש בשרת החיצוני מוגדרת כך שהיא מאפשרת חיבורים מכתובת ה-IP היוצאת של העותק המשוכפל של Cloud SQL.
- הגדרת ה-SSL/TLS נכונה.
- המשתמש, המארח והסיסמה של השכפול נכונים.
המאמרים הבאים
- מידע נוסף על עדכון של מופע
- מידע נוסף על ניהול רפליקות
- מידע על מעקב אחר מופעים
- מידע נוסף על קידום הרפליקה של Cloud SQL