סקירה כללית
Database Migration Service תומך בהעברות רציפות ממסדי נתונים של מקור למסדי נתונים של יעד ב-Cloud SQL.
מסדי הנתונים הנתמכים כמקורות ל-PostgreSQL כוללים:
- Amazon RDS 9.6.10+, 10.5+, 11.1+, 12, 13, 14, 15, 16, 17, 18.
- Amazon Aurora 10.11+, 11.6+, 12.4+, 13.3+, 14.6+, 15.2+, 16, 17, 18.
- PostgreSQL בניהול עצמי (במקום או במכונה וירטואלית בענן שאתם שולטים בה באופן מלא) 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16, 17, 18.
- Cloud SQL ל-PostgreSQL 9.6, 10, 11, 12, 13, 14, 15, 16, 17, 18.
- Microsoft Azure Database for PostgreSQL Flexible Server: 11 ומעלה
כדי להגדיר את המקור, צריך להגדיר גם את מופע המקור וגם את מסדי הנתונים הבסיסיים של המקור.
הגדרת מופע המקור
כדי להגדיר את מופע המקור, פועלים לפי השלבים הבאים:
- למקורות Cloud SQL: אם אתם מבצעים העברה ממכונת Cloud SQL שמשתמשת בקישור דרך IP פרטי למכונת Cloud SQL שמשתמשת בטווח של כתובות IP מסוג non-RFC 1918, צריך להוסיף את הטווח הזה להגדרת הרשת של מכונת המקור של Cloud SQL. מידע נוסף על הגדרת רשתות מורשות בתיעוד של Cloud SQL.
- מופע המקור צריך לכלול את מסד הנתונים
postgres. אם אין לכם את מסד הנתונים הזה, אתם צריכים ליצור אותו. מתקינים את חבילת
pglogicalבמופע המקור ומוודאים שהיא כלולה במשתנהshared_preload_libraries. אפשר לעיין במאמר בנושא התקנת חבילתpglogicalבמופע המקור בסביבה שלכם.בודקים את התוספים במופע המקור. Database Migration Service לא מעביר הרחבות שלא נתמכות על ידי Cloud SQL. הנוכחות של התוספים האלה לא חוסמת את ההעברה, אבל כדי להבטיח תהליך העברה חלק, צריך לוודא שהאובייקטים או האפליקציות לא מפנים לתוספים לא נתמכים. מומלץ להסיר את התוספים וההפניות האלה ממסד הנתונים של המקור לפני שממשיכים.
למקורות שמשתמשים בתוסף
pg_cron: שירות Database Migration Service לא מעביר את התוסףpg_cron(או הגדרותcronשמשויכות לתוסף), אבל הוא נתמך ביעדים של Cloud SQL ל-PostgreSQL. אם אתם משתמשים בתוסףpg_cronבמסדי הנתונים של המקור, תוכלו להתקין אותו מחדש במופע היעד אחרי שההעברה תושלם.
הגדרת מסדי הנתונים של המקור
השירות Database Migration Service מעביר את כל מסדי הנתונים שמופיעים מתחת למופע המקור, למעט מסדי הנתונים הבאים:
- למקורות PostgreSQL מקומיים: מסדי נתונים של תבניות
template0ו-template1 - למקורות Amazon RDS:
template0,template1וגםrdsadmin - למקורות Cloud SQL: מסדי נתונים של תבניות
template0ו-template1 - למקורות של Microsoft Azure:
azure_maintenance,azure_sys,template0,template1
מבצעים את הפעולות הבאות בכל מסד נתונים במופע המקור שלא צוין למעלה:
למקורות בגרסה 9.4 של PostgreSQL בלבד, מתקינים את התוספים הבאים
pglogicalבכל מסד נתונים במופע המקור:CREATE EXTENSION IF NOT EXISTS pglogical;CREATE EXTENSION IF NOT EXISTS pglogical_origin;
בכל הגרסאות האחרות, מתקינים רק את התוסף
pglogicalבכל מסד נתונים במופע המקור:CREATE EXTENSION IF NOT EXISTS pglogical.בטבלאות שאין להן מפתחות ראשיים, Database Migration Service תומך בהעברה של התמונה הראשונית ושל הצהרות
INSERTבמהלך שלב ה-CDC. מומלץ להעביר את הדוחותUPDATEו-DELETEבאופן ידני.לUSER שמשמש לחיבור למופע המקור (שיוגדר כמשתמש בדף פרופילים של חיבורים) צריכות להיות הרשאות מסוימות בכל אחד ממסדי הנתונים שהועברו, וגם במסד הנתונים
postgresשמוגדר כברירת מחדל. אתם יכולים ליצור משתמש חדש או להשתמש במשתמש קיים. כדי להגדיר את ההרשאות האלה, מתחברים למופע ומריצים את הפקודות הבאות:GRANT USAGE on SCHEMA SCHEMA to USERבכל הסכימות (מלבד סכימת המידע וסכימות שמתחילות ב-pg_) בכל מסד נתונים שרוצים להעביר.GRANT USAGE on SCHEMA pglogical to PUBLIC;בכל מסד נתונים שרוצים להעביר.GRANT SELECT on ALL TABLES in SCHEMA pglogical to USERבכל מסדי הנתונים כדי לקבל מידע על השכפול ממסדי הנתונים של המקור.GRANT SELECT on ALL TABLES in SCHEMA SCHEMA to USERבכל הסכימות (מלבד סכימת המידע וסכימות שמתחילות ב-pg_) בכל מסד נתונים שרוצים להעביר.GRANT SELECT on ALL SEQUENCES in SCHEMA SCHEMA to USERבכל הסכימות (מלבד סכימת המידע וסכימות שמתחילות ב-pg_) בכל מסד נתונים שרוצים להעביר.- אם המקור הוא Amazon RDS, מריצים את הפקודה הבאה:
GRANT rds_replication to USER
- אם המקור שלכם הוא לא Amazon RDS, מריצים את הפקודה הבאה:
ALTER USER USER with REPLICATIONתפקיד
התקנת חבילת pglogical במופע המקור
בקטע הזה מוסבר איך להגדיר את חבילת pglogical ואת הפרמטרים הרלוונטיים, בהתאם למופע המקור.
PostgreSQL מקומי או בניהול עצמי
- מתקינים את חבילת pglogical בשרת.
- מתחברים למופע ומגדירים את הפרמטרים הבאים לפי הצורך:
shared_preload_librariesחייב לכלול אתpglogical.כדי להגדיר את הפרמטר הזה, מריצים את הפקודה
ALTER SYSTEM SET shared_preload_libraries = 'pglogical,[any other libraries in your instance]';.- מגדירים את
wal_levelלהיותlogical.כדי להגדיר את הפרמטר הזה, מריצים את הפקודה
ALTER SYSTEM SET wal_level = 'logical';. מגדירים את
wal_sender_timeoutלהיות0.כדי להגדיר את הפרמטר הזה, מריצים את הפקודה
ALTER SYSTEM SET wal_sender_timeout = 0;, כאשר0משבית את מנגנון הזמן הקצוב לתפוגה שמשמש לסיום חיבורי שכפול לא פעילים.max_replication_slots מגדיר את המספר המקסימלי של משבצות שכפול שמופע המקור יכול לתמוך בהן. הערך צריך להיות לפחות מספר המינויים שצפויים להתחבר, בתוספת כמה עתודות לסנכרון הטבלה.
Database Migration Service דורש משבצת אחת לכל מסד נתונים שמועבר (כלומר, כל מסדי הנתונים שמופיעים מתחת למופע המקור).
לדוגמה, אם יש 5 מסדי נתונים במופע המקור ויש 2 משימות העברה שנוצרו עבור המקור, מספר משבצות השכפול צריך להיות לפחות 5 * 2 = 10, ועוד מספר משבצות השכפול שכבר נמצאות בשימוש. אם אתם מתכננים להשתמש בהגדרות מקביליות של העברת נתונים מותאמת, חשוב להגדיל את מספר משבצות השכפול ו להריץ את בדיקת משימת ההעברה כשיוצרים את משימת ההעברה כדי לוודא שההגדרה נכונה.
כדי להגדיר את הפרמטר הזה, מריצים את הפקודה
ALTER SYSTEM SET max_replication_slots = #;, כאשר # מייצג את המספר המקסימלי של משבצות שכפול.הערך של max_wal_senders צריך להיות לפחות כמו הערך של
max_replication_slots, ועוד מספר השולחים שכבר נמצאים בשימוש במופע.לדוגמה, אם הפרמטר
כדי להגדיר את הפרמטר הזה, מריצים את הפקודהmax_replication_slotsמוגדר ל-10, ואתם כבר משתמשים ב-2 שולחים, מספר התהליכים של WAL sender שפועלים בו-זמנית יהיה 10 + 2 = 12. אם אתם מתכננים להשתמש בהגדרות מקביליות של יצוא נתונים מותאמים, חשוב להגדיל את מספר השולחים ו להריץ את הבדיקה של משימת ההעברה כשיוצרים את משימת ההעברה כדי לוודא שההגדרה נכונה.ALTER SYSTEM SET max_wal_senders = #;, כאשר # מייצג את מספר התהליכים של WAL sender שפועלים בו-זמנית.- הערך של max_worker_processes צריך להיות לפחות מספר מסדי הנתונים שיועברו באמצעות Database Migration Service (כלומר כל מסדי הנתונים שמתחת למופע המקור), ועוד מספר התהליכים של
max_worker_processesשכבר נמצאים בשימוש במופע.אם אתם מתכננים להשתמש בהגדרות מקביליות של העברת נתונים מותאמות, הקפידו להגדיל את מספר תהליכי העובד ו להריץ את הבדיקה של משימת ההעברה כשאתם יוצרים את משימת ההעברה כדי לוודא שההגדרה נכונה.
כדי להגדיר את הפרמטר הזה, מריצים את הפקודה
ALTER SYSTEM SET max_worker_processes = #;, כאשר # מייצג את מספר מסדי הנתונים שיועברו.
- כדי להחיל את שינויי ההגדרה, מפעילים מחדש את מופע המקור.
Microsoft Azure Database for PostgreSQL
כדי להגדיר את מקור Microsoft Azure Database for PostgreSQL, מבצעים את השלבים הבאים:
- מתקינים את חבילת pglogical בשרת.
למקורות בגרסה 9.4 של PostgreSQL בלבד, מתקינים את התוספים הבאים
pglogicalבכל מסד נתונים במופע המקור:CREATE EXTENSION IF NOT EXISTS pglogical;CREATE EXTENSION IF NOT EXISTS pglogical_origin;
בכל הגרסאות האחרות, מתקינים את התוסף
pglogicalבכל מסד נתונים במופע המקור:CREATE EXTENSION IF NOT EXISTS pglogical.מגדירים את פרמטרי השרת הנדרשים במקור באמצעות Microsoft Azure portal. מידע נוסף זמין במאמרים Configure server parameters in Azure Database for PostgreSQL ו-Server parameters in Azure Database for PostgreSQL במאמרי העזרה של Microsoft.
מגדירים את הפרמטרים הבאים:
- מגדירים את
shared_preload_librariesכך שיכלול אתpglogical. - מגדירים את
azure.extensionsכך שיכלול אתpglogical. - מגדירים את
wal_levelלערךlogical. מגדירים את הערך של
max_replication_slotsלמספר המינויים שצפויים להתחבר לפחות, בתוספת כמה מינויים נוספים לסנכרון הטבלה.הפרמטר
max_replication_slotsמגדיר את המספר המקסימלי של משבצות שכפול שמופע המקור יכול לתמוך בהן.Database Migration Service דורש משבצת אחת לכל מסד נתונים שמועבר (כלומר, כל מסדי הנתונים שמופיעים מתחת למופע המקור).
לדוגמה, אם יש 5 מסדי נתונים במופע המקור ויש 2 משימות העברה שנוצרו עבור המקור, מספר משבצות השכפול צריך להיות לפחות 5 * 2 = 10, ועוד מספר משבצות השכפול שכבר נמצאות בשימוש. אם אתם מתכננים להשתמש בהגדרות מקביליות של העברת נתונים מותאמת, חשוב להגדיל את מספר משבצות השכפול ו להריץ את בדיקת משימת ההעברה כשיוצרים את משימת ההעברה כדי לוודא שההגדרה נכונה.
מגדירים את
max_wal_sendersלמספר שזהה לפחות למספרmax_replication_slots, בתוספת מספר השולחים שכבר נמצאים בשימוש במופע.לדוגמה, אם הפרמטר
max_replication_slotsמוגדר ל-10, ואתם כבר משתמשים ב-2 שולחים, מספר התהליכים של WAL sender שפועלים בו-זמנית יהיה 10 + 2 = 12.אם אתם מתכננים להשתמש בהגדרות מקביליות של יצוא נתונים מותאמים, חשוב להגדיל את מספר השולחים ו להריץ את הבדיקה של משימת ההעברה כשיוצרים את משימת ההעברה כדי לוודא שההגדרה נכונה.
מגדירים את
max_worker_processesלמספר מסדי נתונים לפחות כמו מספר מסדי הנתונים שיועברו באמצעות Database Migration Service (כלומר כל מסדי הנתונים שמתחת למופע המקור), ועוד מספר מסדי הנתונים שכבר נמצאים בשימוש במופע.max_worker_processesאם אתם מתכננים להשתמש בהגדרות מקביליות של העברת נתונים מותאמות, הקפידו להגדיל את מספר תהליכי העובד ו להריץ את הבדיקה של משימת ההעברה כשאתם יוצרים את משימת ההעברה כדי לוודא שההגדרה נכונה.
- מגדירים את
בודקים את הערך של ההגדרה
require_secure_transport.כברירת מחדל, מסדי נתונים של Microsoft Azure דורשים הצפנה מסוג SSL/TLS לכל החיבורים הנכנסים. בהתאם לערך של
require_secure_transport, משתמשים באחת מהגדרות ההצפנה הבאות כשיוצרים את פרופיל חיבור המקור:- אם הערך של
require_secure_transportהואon, בוחרים באפשרות בסיסי, TLS או mTLS. - אם הערך של
require_secure_transportהואoff, בוחרים באפשרות ללא.
- אם הערך של
- כדי להחיל את שינויי ההגדרה, מפעילים מחדש את מופע המקור.
Amazon RDS PostgreSQL
מתקינים את התוסף
pglogicalבמסד הנתונים של המקור.מידע נוסף זמין במאמר Using PostgreSQL extensions with Amazon RDS for PostgreSQL במסמכי העזרה של Amazon RDS.
מגדירים את מופע המקור באמצעות קבוצות פרמטרים.
- יצירת קבוצת פרמטרים חדשה. בקבוצת הפרמטרים:
- מוודאים שהפרמטר
shared_preload_librariesכולל את הערךpglogical. - מגדירים את הפרמטר
rds.logical_replicationלערך 1. הפעולה הזו תפעיל יומני WAL ברמה 'הלוגית'. - מגדירים את הפרמטר
wal_sender_timeoutל-0. הפעולה הזו תשבית את מנגנון פסק הזמן שמשמש להפסקת חיבורי שכפול לא פעילים. מגדירים את הפרמטר max_replication_slots. הפרמטר הזה מגדיר את המספר המקסימלי של משבצות שכפול שמופע המקור יכול לתמוך בהן. הערך צריך להיות לפחות כמספר המינויים שצפויים להתחבר, בתוספת כמה מינויים נוספים לגיבוי לסנכרון הטבלה.
Database Migration Service דורש משבצת אחת לכל מסד נתונים שמועבר (כלומר, כל מסדי הנתונים שמופיעים מתחת למופע המקור).
לדוגמה, אם יש 5 מסדי נתונים במופע המקור וייווצרו 2 משימות העברה למקור, מספר משבצות השכפול צריך להיות לפחות 5 * 2 = 10, ועוד מספר משבצות השכפול שכבר נמצאות בשימוש. אם אתם מתכננים להשתמש בהגדרות מקביליות של העברת נתונים מותאמת, הקפידו להגדיל את מספר משבצות השכפול ו להריץ את בדיקת משימת ההעברה כשאתם יוצרים את משימת ההעברה כדי לוודא שההגדרה שלכם נכונה.
ערך ברירת המחדל של הפרמטר הזה הוא 10.
מגדירים את הפרמטר max_wal_senders לערך שהוא לפחות כמו
max_replication_slots, בתוספת מספר השולחים שכבר נמצאים בשימוש במופע.לדוגמה, אם הפרמטר
max_replication_slotsמוגדר ל-10, ואתם כבר משתמשים ב-2 שולחים, מספר התהליכים של WAL sender שפועלים בו-זמנית יהיה 10 + 2 = 12. אם אתם מתכננים להשתמש בהגדרות מקביליות של העברת נתונים מותאמות, הקפידו להגדיל את מספר השולחים ו להריץ את הבדיקה של משימת ההעברה כשאתם יוצרים את משימת ההעברה כדי לוודא שההגדרה נכונה.ערך ברירת המחדל של הפרמטר הזה הוא 10.
מגדירים את פרמטר המקור max_worker_processes למספר זהה לפחות למספר מסדי הנתונים שהשירות להעברת נתונים יעביר (כלומר כל מסדי הנתונים שמתחת למופע המקור), ועוד המספר
max_worker_processesשכבר נמצא בשימוש במופע. אם אתם מתכננים להשתמש בהגדרות מקביליות של יצוא נתונים מותאמים, הקפידו להגדיל את מספר תהליכי העובד ו להריץ את הבדיקה של משימת ההעברה כשאתם יוצרים את משימת ההעברה כדי לוודא שההגדרה שלכם נכונה.ערך ברירת המחדל של הפרמטר הזה הוא 8.
מצרפים את קבוצת הפרמטרים למופע. אם יוצרים מופע חדש, האפשרות הזו נמצאת בקטע Additional Configuration (הגדרה נוספת).
אחרת, משנים את המופע כדי לצרף את קבוצת הפרמטרים.
כדי להחיל את שינויי ההגדרה, מפעילים מחדש את מופע המקור.
Cloud SQL ל-PostgreSQL
כדי להפעיל שכפול ופענוח לוגיים במסד הנתונים של המקור, צריך להגדיר את הדגלים הבאים:
- מגדירים את הדגלים
cloudsql.logical_decodingו-cloudsql.enable_pglogicalלערךon. מגדירים את הדגל max_replication_slots. הדגל הזה מגדיר את המספר המקסימלי של משבצות שכפול שמופע המקור יכול לתמוך בהן. הערך צריך להיות לפחות מספר המינויים שצפויים להתחבר, בתוספת כמה עתודות לסנכרון הטבלה.
Database Migration Service דורש משבצת אחת לכל מסד נתונים שמועבר (כלומר, כל מסדי הנתונים שמופיעים מתחת למופע המקור).
לדוגמה, אם יש 5 מסדי נתונים במופע המקור וייווצרו 2 משימות העברה למקור, מספר משבצות השכפול צריך להיות לפחות 5 * 2 = 10, ועוד מספר משבצות השכפול שכבר נמצאות בשימוש. אם אתם מתכננים להשתמש בהגדרות מקביליות של העברת נתונים מותאמת, חשוב להגדיל את מספר משבצות השכפול ו להריץ את בדיקת משימת ההעברה כשיוצרים את משימת ההעברה כדי לוודא שההגדרה נכונה.
ערך ברירת המחדל של הדגל הזה הוא 10.
מגדירים את הדגל max_wal_senders לערך שהוא לפחות כמו
max_replication_slots, ועוד מספר השולחים שכבר נמצאים בשימוש במופע.לדוגמה, אם הדגל
max_replication_slotsמוגדר ל-10, ואתם כבר משתמשים ב-2 שולחים, מספר התהליכים של WAL sender שפועלים בו-זמנית יהיה 10 + 2 = 12. אם אתם מתכננים להשתמש בהגדרות מקביליות של יצוא נתונים מותאמים, חשוב להגדיל את מספר השולחים ו להריץ את הבדיקה של משימת ההעברה כשיוצרים את משימת ההעברה כדי לוודא שההגדרה נכונה.ערך ברירת המחדל של הדגל הזה הוא 10.
מגדירים את דגל המקור max_worker_processes למספר שהוא לפחות מספר מסדי הנתונים שיועברו באמצעות שירות העברת הנתונים (כלומר כל מסדי הנתונים שמתחת למופע המקור), ועוד המספר
max_worker_processesשכבר בשימוש במופע. אם אתם מתכננים להשתמש בהגדרות של מקביליות מותאמת של העברת נתונים, הקפידו להגדיל את מספר תהליכי העבודה ו להריץ את הבדיקה של משימת ההעברה כשאתם יוצרים את משימת ההעברה כדי לוודא שההגדרה שלכם נכונה.ערך ברירת המחדל של הדגל הזה הוא 8.
מגדירים את הפרמטר
wal_sender_timeoutלערך0. הערך0משבית את מנגנון הזמן הקצוב לתפוגה שמסיים חיבורי שכפול לא פעילים.- מפעילים מחדש את מופע המקור כדי שהשינויים בהגדרות שביצעתם בדגלים ייכנסו לתוקף.
הפעלת מעקב אחר השהיית שכפול ב-PostgreSQL בגרסה מוקדמת יותר מ-9.6
אם אתם מעבירים נתונים מגרסת PostgreSQL קודמת לגרסה 9.6, מדד השהיית השכפול לא זמין כברירת מחדל. החלופות הבאות מאפשרות לעקוב אחרי המדד הזה כדי להבטיח זמן השבתה מינימלי כשמעבירים את מסד הנתונים לקידום:
אפשרות 1: נותנים ל-Database Migration Service גישה לשאילתה ספציפית כדי לעקוב אחרי העיכוב בשכפול. משתמשים עם הרשאה
SUPERUSERיכולים לבצע את הפעולות הבאות:מגדירים את הפונקציה הבאה כדי לאפשר ל-Database Migration Service לבצע שאילתה לגבי העיכוב בשכפול.
CREATE OR REPLACE FUNCTION pg_stat_replication_user() RETURNS TABLE ( pid integer , usesysid oid , username name , application_name text , client_addr inet , client_hostname text , client_port integer , backend_start timestamp with time zone , backend_xmin xid , state text , sent_location pg_lsn , write_location pg_lsn , flush_location pg_lsn , replay_location pg_lsn , sync_priority integer , sync_state text ) LANGUAGE SQL SECURITY DEFINER AS $$ SELECT * FROM pg_catalog.pg_stat_replication; $$;כדי להעניק את ההרשאה
EXECUTEל-USER, מריצים את הפקודות הבאות:REVOKE EXECUTE ON FUNCTION pg_stat_replication_user() FROM public;GRANT EXECUTE ON FUNCTION pg_stat_replication_user() to {replication_user};
אפשרות 2: הקצאת ההרשאה
SUPERUSERישירות לUSER שמשמש לחיבור למופע המקור. כך שירות העברת הנתונים יוכל לקרוא ישירות את עיכוב השכפול.אפשרות 3: מעקב אחר זמן ההשהיה של השכפול באופן עצמאי באמצעות השאילתה הבאה:
SELECT current_timestamp, application_name, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.sent_location) AS sent_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.write_location) AS write_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.flush_location) AS flush_location_lag, pg_xlog_location_diff(pg_current_xlog_location(), pg_stat_replication.replay_location) AS replay_location_lag FROM pg_stat_replication WHERE application_name like 'cloudsql%';
אם תבחרו באפשרות הזו, מדד השהיית השכפול לא יוצג בתרשימים או בתגובות של API ב-Database Migration Service.