בדף הזה מוסבר איך להגדיר את השרת החיצוני לרפליקציה ל-Cloud SQL, ליצור מכונה של ייצוג מקור ב-Cloud SQL ולשכפל את הנתונים ל-Cloud SQL. צריך לבצע את כל השלבים שבדף הזה לפני שממשיכים לשלבי הרפליקציה.
אפשרות נוספת לביצוע הפעולות שמתוארות בדף הזה היא שימוש ב-Database Migration Service, שמאפשר שכפול רציף או העברה חד-פעמית של מסד נתונים משרת חיצוני ל-Cloud SQL.
לפני שמתחילים
לפני שמגדירים רפליקציה, חשוב לעיין בדרישות המוקדמות ובמונחים הבאים.
הסברים על המונחים
שרת חיצוני. שרת PostgreSQL חיצוני ל-Cloud SQL, שממנו רוצים לשכפל נתונים. הוא נקרא גם מסד הנתונים של המקור או שרת מסד הנתונים החיצוני. הוא יכול להיות מכונה אחרת של Cloud SQL או כל שרת אחר של מסד נתונים, כמו שרת מקומי או Amazon Relational Database Service (RDS).
מופע של ייצוג המקור. דמה של מכונת Cloud SQL שמייצג את השרת החיצוני של הרפליקה של Cloud SQL. הוא מופיע במסוף Google Cloud ונראה כמו מכונה רגילה של Cloud SQL, אבל הוא לא מכיל נתונים, לא דורש הגדרה או תחזוקה ולא משפיע על החיוב.
רפליקה של Cloud SQL. המכונה של Cloud SQL שמשכפלת מהשרת החיצוני. הוא נקרא גם "רפליקה חיצונית ראשית לקריאה בלבד".
חשבון משתמש לרפליקציה. חשבון המשתמש ב-PostgreSQL בשרת החיצוני עם הרשאות מספיקות כדי לאפשר שכפול בין השרת החיצוני לבין העותק המשוכפל של Cloud SQL.
ייבוא מנוהל. תהליך הייבוא של נתונים ישירות מהשרת החיצוני לרפליקה של Cloud SQL. במצב כזה, Cloud SQL מתחבר לשרת החיצוני באמצעות חשבון המשתמש של השכפול ומריץ את גיבוי הנתונים ישירות בשרת החיצוני כדי לייבא נתונים לרפליקה של Cloud SQL.
הגדרת פרויקט ב- Google Cloud
- נכנסים לחשבון Google Cloud . אנחנו ממליצים למשתמשים חדשים ב- Google Cloud ליצור חשבון כדי שיוכלו להעריך את הביצועים של המוצרים שלנו בתרחישים מהעולם האמיתי. לקוחות חדשים מקבלים בחינם גם קרדיט בשווי 300$ להרצה, לבדיקה ולפריסה של עומסי העבודה.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud SQL Admin API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
Enable the Cloud SQL Admin API, if it is not already enabled.
Roles required to enable APIs
To enable APIs, you need the
serviceusage.services.enablepermission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.-
חשוב לוודא שבחשבון המשתמש שלכם מוגדרים התפקידים "אדמין של Cloud SQL", "אדמין של Storage" ו"צפייה ב-Compute".
התקנת ה-SDK של Google Cloud
כדי להגדיר את הרפליקציה, התקינו את Google Cloud SDK בשרת החיצוני. אם ה-SDK לא מותקן במקום אחר, כדאי להתקין אותו בשרת החיצוני.
הגדרת השרת החיצוני לרפליקציה
Cloud SQL תומך בהעברות רציפות ממסדי נתונים של מקור למסדי נתונים של יעד ב-Cloud SQL.
מסדי הנתונים הבאים של PostgreSQL נתמכים כמקור:
- PostgreSQL בניהול עצמי (במקום או במכונה וירטואלית בענן שאתם שולטים בה באופן מלא) 9.4, 9.5, 9.6, 10, 11, 12, 13, 14, 15, 16, 17 ו-18
- 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.
- Microsoft Azure Database for PostgreSQL Flexible Server מגרסה 11 ואילך
- Cloud SQL בגרסאות 9.6, 10, 11, 12, 13, 14, 15, 16, 17 ו-18
כדי להגדיר את המקור, צריך להגדיר גם את מופע המקור וגם את מסדי הנתונים הבסיסיים של המקור.
רשימת משימות לשרת חיצוני
אם הרפליקה של Cloud SQL מופעלת עם כתובת IP פרטית, מכיוון שכתובת ה-IP הפרטית היוצאת היא לא סטטית, צריך להגדיר את חומת האש של השרת החיצוני כך שתאפשר את טווח כתובות ה-IP הפנימיות שהוקצו לגישה לשירותים פרטיים של רשת ה-VPC שבה הרפליקה של Cloud SQL משתמשת כרשת הפרטית שלה.
חומת האש של שרת מסד הנתונים של המקור צריכה להיות מוגדרת כך שתאפשר את כל טווח כתובות ה-IP הפנימיות שהוקצה לחיבור לשירות הפרטי של רשת ה-VPC, שבה מכונת היעד של Cloud SQL משתמשת בתור השדה privateNetwork של הגדרות ה-ipConfiguration שלה.
כדי למצוא את טווח כתובות ה-IP הפנימיות:
במסוף Google Cloud , נכנסים לדף רשתות VPC.
בוחרים את רשת ה-VPC שבה רוצים להשתמש.
לוחצים על הכרטיסייה Private service connection (חיבור פרטי לשירות).
הגדרת המכונה של המקור
כדי להגדיר את מופע המקור:
- אם מופע המקור לא כולל את מסד הנתונים
postgres, צריך ליצור אותו. - מתקינים את החבילה pglogical במכונה של המקור.
מגדירים את הפרמטרים הבאים, לפי הצורך.
אם מכונת המקור של PostgreSQL היא Amazon RDS, צריך לכלול את הפרמטרים האלה ב קבוצת פרמטרים חדשה ולצרף את קבוצת הפרמטרים למכונה.
אם המקור הוא Cloud SQL, מגדירים את הדגלים
cloudsql.logical_decodingו-cloudsql.enable_pglogicalלערךon.מידע על הפעלת דגלים לניהול מסד נתונים ב-Cloud SQL זמין במאמר הגדרת דגלים לניהול מסד נתונים.
מגדירים את
shared_preload_librariesכך שיכלול אתpglogicalבאמצעות הפקודה הבאה:ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
מגדירים את
wal_levelל-logicalבאמצעות הפקודה הבאה:ALTER SYSTEM SET wal_level = 'logical';
אם מכונת PostgreSQL של המקור היא Amazon RDS, כדי להפעיל יומני WAL ברמה
logical, צריך להגדיר את הפרמטרrds.logical_replicationלערך1.מגדירים את
wal_sender_timeoutל-0באמצעות הפקודה הבאה:ALTER SYSTEM SET wal_sender_timeout = 0;
הערך
0משבית את מנגנון הזמן הקצוב לתפוגה שמשמש לסיום חיבורי רפליקציה לא פעילים.מגדירים את max_replication_slots למספר המקסימלי של משבצות הרפליקציה שבהן מכונת המקור יכולה לתמוך. משתמשים בפקודה הבאה, אחרי שמחליפים את MAX_REPLICATION_SLOTS במספר:
ALTER SYSTEM SET max_replication_slots = MAX_REPLICATION_SLOTS;
ב-Cloud SQL נדרש סלוט אחד לכל מסד נתונים שמועבר. צריך לציין לפחות את מספר המינויים שצפויים להתחבר, עם כמה עתודות לסנכרון הטבלה.
לדוגמה, אם למופע המקור יש 5 מסדי נתונים ונוצרו 2 משימות העברה למקור, מספר משבצות השכפול צריך להיות לפחות 5 * 2 = 10, בנוסף למספר משבצות השכפול שכבר נמצאות בשימוש.
מגדירים את max_wal_senders לפחות לאותו ערך כמו
max_replication_slots, בנוסף למספר השולחים שכבר נמצאים בשימוש במכונה. מריצים את הפקודה הבאה, ומחליפים את MAX_WAL_SENDERS במספר הכולל של תהליכי השליחה של WAL שפועלים בו-זמנית:ALTER SYSTEM SET max_wal_senders = MAX_WAL_SENDERS;
לדוגמה, אם הפרמטר
max_replication_slotsמוגדר ל-10ואתם כבר משתמשים ב-2 שולחים, מספר תהליכי השליחה של WAL שפועלים בו-זמנית יהיה 10 + 2 = 12.מגדירים את max_worker_processes לפחות למספר מסדי הנתונים במופע המקור, בנוסף למספר תהליכי העבודה שכבר נמצאים בשימוש במופע. מריצים את הפקודה הבאה, אחרי שמחליפים את MAX_WORKER_PROCESSES במספר הכולל:
ALTER SYSTEM SET max_worker_processes = MAX_WORKER_PROCESSES;
- אם מכונת המקור של PostgreSQL היא Microsoft Azure Database for PostgreSQL Flexible Server, צריך לבצע את הפעולות הבאות כדי לתמוך בהעברת נתונים משרת חיצוני למכונה של Cloud SQL:
מגדירים את
shared_preload_librariesכך שיכלול אתpglogicalבאמצעות הפקודה הבאה:ALTER SYSTEM SET shared_preload_libraries = 'pglogical';
- מגדירים את
wal_levelלהיותlogical. מידע נוסף זמין במאמר Logical replication and logical decoding in Azure Database for PostgreSQL - Flexible Server. מגדירים את max_replication_slots למספר המקסימלי של משבצות הרפליקציה שבהן המכונה של המקור יכולה לתמוך. משתמשים בפקודה הבאה, אחרי שמחליפים את MAX_REPLICATION_SLOTS במספר:
ALTER SYSTEM SET max_replication_slots = MAX_REPLICATION_SLOTS;
ב-Cloud SQL נדרש סלוט אחד לכל מסד נתונים שמועבר. צריך לציין לפחות את מספר המינויים שצפויים להתחבר, עם כמה עתודות לסנכרון הטבלה.
לדוגמה, אם למכונה במקור יש 5 מסדי נתונים ונוצרו 2 משימות העברה למקור, מספר משבצות השכפול צריך להיות לפחות 5 * 2 = 10, בנוסף למספר משבצות השכפול שכבר נמצאות בשימוש.
מגדירים את max_wal_senders לפחות לאותו ערך כמו
max_replication_slots, בנוסף למספר השולחים שכבר נמצאים בשימוש במכונה. מריצים את הפקודה הבאה, ומחליפים את MAX_WAL_SENDERS במספר הכולל של תהליכי השליחה של WAL שפועלים בו-זמנית:ALTER SYSTEM SET max_wal_senders = MAX_WAL_SENDERS;
לדוגמה, אם הפרמטר
max_replication_slotsמוגדר ל-10ואתם כבר משתמשים ב-2 שולחים, מספר תהליכי השליחה של WAL שפועלים בו-זמנית יהיה 10 + 2 = 12.מגדירים את max_worker_processes לפחות למספר מסדי הנתונים במכונה של המקור, בנוסף למספר תהליכי ה-worker שכבר נמצאים בשימוש במכונה. משתמשים בפקודה הבאה, אחרי שמחליפים את MAX_WORKER_PROCESSES במספר הכולל:
ALTER SYSTEM SET max_worker_processes = MAX_WORKER_PROCESSES;
- מגדירים את azure.extensions כך שיכלול את
pglogical. מידע נוסף זמין במאמר פרמטרים של שרת ב-Azure Database for PostgreSQL – Flexible Server.
- אם הרפליקה של Cloud SQL תשתמש בכתובת IP פרטית, צריך להגדיר את חומת האש של השרת החיצוני כך שתאפשר את טווח כתובות ה-IP הפנימי שהוקצה לגישה לשירותים פרטיים של רשת ה-VPC של הרפליקה.
- כדי להחיל את השינויים בהגדרות, מפעילים מחדש את מכונת המקור.
הפרמטרים שאתם מגדירים בשלב הזה חלים על שרת מסד נתונים של PostgreSQL שפועל. אפשר גם להחיל את השינויים האלה באופן קבוע על ידי הוספתם לקובץ postgresql.conf.
הפעלת מעקב אחר עיכוב בשכפול ב-PostgreSQL בגרסאות קודמות ל-9.6
אם אתם עוברים מגרסת PostgreSQL נמוכה מ-9.6, מדד השהיית השכפול לא זמין כברירת מחדל. אתם יכולים להשתמש באחת משלוש החלופות הבאות כדי לעקוב אחרי המדד הזה, ולהבטיח זמן השבתה מינימלי כשאתם מקדמים את מסד הנתונים:
אפשרות 1: מאפשרים לשרת החיצוני של Cloud SQL לעקוב אחרי העיכוב ברפליקציה על ידי מתן גישה לשאילתה ספציפית. משתמשים במשתמש עם ההרשאה
SUPERUSERומבצעים את הפעולות הבאות:מגדירים את הפונקציה הבאה כדי לאפשר לשרת החיצוני לשלוח שאילתות לגבי עיכוב הרפליקציה.
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:REVOKE EXECUTE ON FUNCTION pg_stat_replication_user() FROM public;GRANT EXECUTE ON FUNCTION pg_stat_replication_user() to {replication_user};
אפשרות 2: הענקת ההרשאה
SUPERUSERישירות למשתמש שמשמש לחיבור למכונת המקור. כך השרת החיצוני יכול לקרוא את עיכוב השכפול ישירות.אפשרות 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%';
באפשרות הזו, מדד השהיית השכפול לא מוצג ב-Cloud SQL בתרשימים או בתגובות מה-API.
הגדרת מסדי הנתונים של המקור
השרת החיצוני של Cloud SQL מעביר את כל מסדי הנתונים במופע המקור, למעט מסדי הנתונים הבאים:
- למקורות מקומיים: מסדי נתונים של תבניות
template0ו-template1 - למקורות Amazon RDS:
template0,template1ו-rdsadmin - למקורות Cloud SQL: מסדי נתונים של תבניות
template0ו-template1
בכל מסד נתונים במכונה של המקור שלא נכלל ברשימה הקודמת, מבצעים את הפעולות הבאות:
כדי להתקין את התוסף
pglogical, מריצים את הפקודה הבאה בכל מסד נתונים במכונה של המקור:CREATE EXTENSION IF NOT EXISTS pglogical
בטבלאות שאין להן מפתחות ראשיים, Cloud SQL תומך בהעברה של התמונה הראשונית ושל הצהרות
INSERTבמהלך השלב של סימון נתונים שהשתנו (CDC). העברה ידנית של הצהרותUPDATEו-DELETE.מתחברים למופע ומריצים את הפקודות הבאות כדי להגדיר הרשאות למשתמש בכל אחד ממסדי הנתונים שהועברו, וגם במסד הנתונים
postgresשמוגדר כברירת מחדל.המשתמש שמשמש לחיבור למופע המקור מוגדר כמשתמש בדף פרופילי חיבור. אפשר ליצור משתמש חדש או להשתמש במשתמש קיים.
מריצים את הפקודה הבאה בכל הסכימות בכל מסד נתונים שרוצים להעביר, חוץ מסכימת המידע וסכימות שמתחילות ב-
pg_:GRANT USAGE on SCHEMA schema to username; GRANT SELECT on ALL SEQUENCES in SCHEMA schema to username; GRANT SELECT on ALL TABLES in SCHEMA schema to username;
בכל מסד נתונים שרוצים להעביר, מריצים את הפקודה הבאה:
GRANT USAGE on SCHEMA pglogical to PUBLIC;
כדי לקבל מידע על הרפליקציה ממסדי הנתונים של המקור, מריצים את הפקודה הבאה בכל מסדי הנתונים:
GRANT SELECT on ALL TABLES in SCHEMA pglogical to username;
אם המקור הוא Amazon RDS, מריצים את הפקודה הבאה:
GRANT rds_replication to username;
אם המקור הוא Microsoft Azure Database for PostgreSQL בגרסה שקודמת ל-14, מריצים את הפקודה הבאה:
GRANT SELECT on ALL TABLES in SCHEMA pglogical to username;
אתם יכולים להתעלם משגיאה שמופיעה בממשק של
pglogical.node.אם המקור הוא Microsoft Azure Database for PostgreSQL מגרסה 14 ואילך, מריצים את הפקודה הבאה:
GRANT pg_read_all_data to username;
אם לא, מריצים את הפקודה הבאה:
ALTER USER username with REPLICATION;
הגדרה של מופע לייצוג מקור
מופע הייצוג של המקור מפנה לשרת החיצוני. הוא מכיל רק את נתוני הבקשה מהשרת החיצוני. יוצרים את נתוני הבקשה ומשתמשים בהם בפקודת curl שיוצרת את המכונה שמייצגת את המקור ב-Cloud SQL.
יצירת נתוני הבקשה
נתוני הבקשה מכילים מידע בסיסי על השרת החיצוני בפורמט JSON. אפשר להגדיר את נתוני הבקשה לרפליקה של Cloud SQL ברשת ציבורית או פרטית, והם צריכים להכיל את המידע הבא:
אם רוצים להעביר קבוצת משנה של מסדי נתונים ממכונת הייצוג של המקור למכונת Cloud SQL של היעד, משתמשים בפרמטר selectedObjects כדי לציין את שמות מסדי הנתונים. אם לא משתמשים בפרמטר הזה או שמספקים רשימה ריקה כערך של הפרמטר, כל מסדי הנתונים מועברים מהמקור ליעד.
source.json
{ "name": "SOURCE_NAME", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "onPremisesConfiguration": { "selectedObjects": "SELECTED_OBJECTS", "hostPort": "SOURCE_HOST", "username": "USERNAME", "password": "PASSWORD", "caCertificate": "SOURCE_CERT", "clientCertificate": "CLIENT_CERT", "clientKey": "CLIENT_KEY" } }
דוגמה לייבוא מנוהל
// 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":"db2"}],
"hostPort": "192.0.2.0:5423",
"username": "replicationUser",
"password": "486#@%*@"
}
}
| מאפיין (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 של היעד. |
| SOURCE HOST | כתובת ה-IPv4 והיציאה של השרת החיצוני, או כתובת ה-DNS של השרת החיצוני. אם השרת החיצוני מתארח ב-Cloud SQL, היציאה היא 5432. |
| USERNAME | חשבון המשתמש של הרפליקציה בשרת החיצוני. |
| PASSWORD | הסיסמה לחשבון המשתמש של הרפליקציה. |
| BUCKET | שם הקטגוריה שמכילה את קובץ ה-dump. צריך לכלול את השדה הזה רק אם מגדירים רפליקציה עם קובץ dump שקיים בקטגוריה של Cloud Storage. |
| DUMP_FILE | קובץ בקטגוריה שמכיל את הנתונים מהשרת החיצוני. |
| CLIENT_CA_CERT | אישור ה-CA בשרת החיצוני. צריך לכלול את ההגדרה רק אם נעשה שימוש ב-SSL/TLS בשרת החיצוני. |
| CLIENT_CERT | אישור הלקוח בשרת החיצוני. נדרש רק עבור אימות שרת-לקוח. צריך לכלול את זה רק אם משתמשים ב-SSL או ב-TLS בשרת החיצוני. |
| CLIENT_KEY | קובץ המפתח הפרטי של אישור הלקוח בשרת החיצוני. נדרש רק לאימות שרת-לקוח. ההגדרה הזו רלוונטית רק אם נעשה שימוש ב-SSL/TLS בשרת החיצוני. |
| SSL_OPTION | אם נעשה שימוש בהצפנת SSL/TLS כדי ליצור חיבור בין מסד הנתונים של Microsoft Azure במקור לבין מסד הנתונים של Cloud SQL ביעד. אפשר לציין את הערכים הבאים בפרמטר הזה:
ערך ברירת המחדל של הפרמטר הזה הוא |
יצירת מכונה של ייצוג המקור
לפני שמתחילים את השלב הזה, יוצרים קובץ JSON שמכיל את נתוני הבקשה של המקור.
לאחר מכן, כדי ליצור את מופע ייצוג המקור ב-Cloud SQL, פותחים טרמינל ומריצים את הפקודות הבאות:
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 POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
לדוגמה
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 POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
| מאפיין (property) | תיאור |
|---|---|
| PROJECT_ID | המזהה של הפרויקט ב- Google Cloud. |
| JSON_PATH | הנתיב לקובץ JSON שמכיל את נתוני הבקשה לשרת החיצוני. |
עדכון מופע של ייצוג מקור
אם מעדכנים את נתוני הבקשה מהשרת החיצוני, אפשר לעדכן את מופע הייצוג הקיים של המקור כדי להשתמש בערכים ששונו.
שינוי נתוני הבקשה
מעדכנים את נתוני הבקשה כך שיכללו את כל השדות שהשתנו. השדות האלה כוללים את hostPort, username, password, caCertificate, clientCertificate ו-clientKey. אחרי שמעדכנים את נתוני הבקשה, משתמשים בהם בפקודה curl כדי לעדכן את המכונה ב-Cloud SQL.
כדי לעדכן את מסדי הנתונים שרוצים להעביר ממופע הייצוג של המקור, מעדכנים את רשימת שמות מסדי הנתונים שמשויכים לפרמטר selectedObjects. אם לא משתמשים בפרמטר הזה או מספקים רשימה ריקה כערך של הפרמטר, כל מסדי הנתונים מועברים מהמקור ליעד.
בדוגמה הבאה מוצג עדכון של השדות username ו-password עם שם משתמש וסיסמה שונים:
source.json
{ "name": "SOURCE_NAME", "region": "REGION", "databaseVersion": "DATABASE_VERSION", "onPremisesConfiguration": { "selectedObjects": "SELECTED_OBJECTS", "username": "NEW_USERNAME", "password": "NEW_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 ביעד. |
| NEW_USERNAME | חשבון המשתמש החדש לשכפול בשרת החיצוני. |
| NEW_PASSWORD | הסיסמה לחשבון החדש. |
שינוי מופע של ייצוג מקור
לפני שמתחילים את השלב הזה, יוצרים קובץ JSON שמכיל את נתוני הבקשה שרוצים לשנות.
כדי לשנות את המכונה שמייצגת את המקור ב-Cloud SQL, פותחים טרמינל ומריצים את הפקודות הבאות:
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) | תיאור |
|---|---|
| PROJECT_ID | המזהה של הפרויקט ב- Google Cloud. |
| JSON_PATH | הנתיב לקובץ JSON שמכיל את נתוני הבקשה לשרת החיצוני. |
| SOURCE_NAME | השם של מופע הייצוג של המקור. |
הגדרת רפליקה של Cloud SQL
בסופו של דבר, הרפליקה של Cloud SQL תכיל את הנתונים מהשרת החיצוני. בשלב הזה יוצרים את נתוני הבקשה ומשתמשים בהם בפקודת curl שיוצרת את הרפליקה של Cloud SQL ב-Cloud SQL.
יצירת נתוני הבקשה
נתוני הבקשה מכילים מידע בסיסי על השרת החיצוני ועל הרפליקה של Cloud SQL בפורמט JSON. אפשר להגדיר את נתוני הבקשה עבור רפליקה של Cloud SQL ברשת ציבורית או פרטית, והם צריכים לכלול את המידע הבא:
replica.json
{ "settings": { "tier": "TIER", "dataDiskSizeGb": "DISK_SIZE", "ipConfiguration": { "ipv4Enabled": "PUBLIC_IP_STATUS", "privateNetwork": "projects/PROJECT_ID/global/networks/NETWORK_NAME" }, "availabilityType": "AVAILABILITY_TYPE" }, "masterInstanceName": "SOURCE_REPRESENTATION_INSTANCE_NAME", "region": "SOURCE_REGION", "databaseVersion": "DATABASE_VERSION", "name": "REPLICA_NAME" }
דוגמה
{ "settings": { "tier": "db-custom-4-15360", "dataDiskSizeGb": "100" }, "masterInstanceName": "source-instance", "region": "us-central1", "databaseVersion": "POSTGRES_16", "name": "replica-instance" }
| מאפיין (property) | תיאור |
|---|---|
| TIER | סוג המכונה שבה תתארח מופע הרפליקה. אם אתם לא יודעים באיזה סוג מכונה להשתמש, התחילו עם db-custom-2-7680. אם צריך, אפשר לשנות את הגודל שלו וערכים נתמכים אחרים בהמשך. |
| DISK_SIZE | נפח האחסון של הרפליקה ב-Cloud SQL, ב-GB. |
| PUBLIC_IP_STATUS | ההגדרה קובעת אם למכונה מוקצית כתובת IP ציבורית. ערך ברירת המחדל של המאפיין הזה הוא true.
כדי להשבית את ההקצאה של כתובת IP ציבורית לרפליקה, מגדירים את הערך ל-false.
אם בפרויקט מופעלת מדיניות הארגון constraints/sql.restrictPublicIp, כדי ליצור את העותק המשוכפל של Cloud SQL, צריך להגדיר את הערך של המאפיין ipv4Enabled ל-false. מידע נוסף על השבתת ההקצאה של כתובות IP ציבוריות זמין במאמר השבתה של כתובת IP ציבורית. |
| PROJECT_ID | אם הרפליקה של Cloud SQL נמצאת ברשת פרטית, צריך לכלול את המאפיין privateNetwork בקובץ replica.json.
בשדה PROJECT_ID, מציינים את מזהה הפרויקט ב- Google Cloud. |
| NETWORK_NAME | השם של הרשת הפרטית שבה רוצים להשתמש עם הרפליקה של Cloud SQL. |
| AVAILABILITY_TYPE | סוג הזמינות של הרפליקה ב-Cloud SQL. ערך ברירת המחדל הוא ZONAL. כדי להגדיר את הרפליקה כ-HA, מגדירים את הערך כ-REGIONAL. כדי לראות את הערכים המותרים, עיינו ב-SqlAvailabilityType.
אחרי שיוצרים העתק HA של שרת חיצוני, אי אפשר לשנות אותו להעתק שאינו HA. הדבר נכון גם בכיוון ההפוך. אי אפשר לשנות רפליקה של שרת חיצוני שאינו HA לרפליקה של HA. אם מנסים לבצע מעבר ידני לגיבוי בזמן שהמכונה עדיין טוענת את הנתונים הראשוניים, יכול להיות שההעברה לא תהיה ניתנת לשחזור. אם המכונה כבר משכפלת מהמקור, יכול להיות שיהיה זמן השבתה זמני. בודקים את סטטוס הרפליקציה. |
| SOURCE_REPRESENTATION_INSTANCE_NAME | השם של מופע הייצוג של המקור. |
| SOURCE_REGION | האזור שהוקצה למופע של ייצוג המקור. |
| DATABASE_VERSION | גרסת מסד הנתונים שבה רוצים להשתמש עם הרפליקה של Cloud SQL. האפשרויות לגרסה הזו הן POSTGRES_9_6, POSTGRES_10, POSTGRES_11, POSTGRES_12, POSTGRES_13, POSTGRES_14, POSTGRES_15, POSTGRES_16 או POSTGRES_17.
הגרסה צריכה להתאים לגרסת מסד הנתונים שפועלת בשרת החיצוני, או להיות גרסה אחת מאוחרת יותר לכל היותר. |
| REPLICA_NAME | השם של הרפליקה של Cloud SQL שרוצים ליצור. |
יצירת הרפליקה של Cloud SQL
לפני שמתחילים את השלב הזה, יוצרים קובץ JSON שמכיל את נתוני הבקשה לרפליקה. כדי ליצור רפליקה של 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 POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
לדוגמה
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @./replica.json \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/MyProject/instances
| מאפיין (property) | תיאור |
|---|---|
| PROJECT_ID | מזהה הפרויקט ב- Google Cloud, שצריך להיות זהה למזהה של מכונת המקור. |
| JSON_PATH | הנתיב לקובץ JSON שמכיל את נתוני הבקשה של הרפליקה של Cloud SQL. |
אימות ההגדרה
כדי לוודא שהמכונות הווירטואליות הוגדרו בצורה נכונה, עוברים אל הדף Cloud SQL Instances.
אמורים לראות את המכונה שמייצגת את המקור ואת הרפליקה של Cloud SQL, ברשימה שדומה לזו:
| מזהה מופע | סוג | כתובת IP ציבורית |
|---|---|---|
| (-) source-representation-instance | מסד נתונים חיצוני ראשי | 10.68.48.3:5432 |
| replica-instance | רפליקה לקריאה של מסד נתונים | 34.66.48.59 |
חשוב גם לוודא שיש לכם הרשאה מסוג cloudsql.instances.migrate על הרפליקה של Cloud SQL. ההרשאה הזו כלולה בתפקידי ה-IAM cloudsql.admin או cloudsql.editor.
הגדרת סיסמת ברירת המחדל של המשתמש והוספת חשבונות משתמשים אחרים לרפליקה של Cloud SQL
אחרי שיוצרים את הרפליקה של Cloud SQL, מגדירים את הסיסמה למשתמש ברירת המחדל. אם צריך, אתם יכולים גם להוסיף חשבונות משתמשים אחרים לרפליקה. אי אפשר לייבא חשבונות משתמשים של מסד נתונים מהשרת החיצוני, אבל אפשר ליצור מחדש את חשבונות המשתמשים ברפליקה של Cloud SQL. צריך לבצע את הפעילויות האלה לפני השכפול מהשרת החיצוני.
כדי להגדיר את הסיסמה למשתמש ברירת המחדל, משתמשים בפקודה
gcloud sql users set-password באופן הבא:
gcloud sql users set-password postgres \ --instance=INSTANCE_NAME \ --password=PASSWORD
לפני שמריצים את הפקודה, מחליפים את INSTANCE_NAME בשם המכונה ואת PASSWORD בסיסמה שבחרתם.
כדי ליצור חשבונות משתמשים ברפליקה, קראו את המאמר יצירה וניהול של משתמשים.איך מוצאים את כתובת ה-IP היוצאת של הרפליקה ב-Cloud SQL
אתם יכולים להשתמש בכתובת ה-IP היוצאת של הרפליקה של Cloud SQL כדי ליצור חיבור מאובטח בין השרת החיצוני לבין הרפליקה של Cloud SQL. לא תחויבו על כתובת ה-IP הזו.
המסוף
כדי לקבל את כתובת ה-IP היוצאת של הרפליקה, בצע את הפעולות הבאות:
-
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
ליד כתובת ה-IP הציבורית של הרפליקה של Cloud SQL, מעבירים את הסמן מעל ההסבר הקצר More info ומאחזרים את כתובת ה-IP היוצאת.
שימו לב שכתובת ה-IP היוצאת היא לא כתובת ה-IP שמוצגת ברשימה הראשית של הרפליקה במסוף Google Cloud .
gcloud
כדי לקבל את כתובת ה-IP היוצאת של הרפליקה, מריצים את הפקודה הבאה:
gcloud sql instances describe REPLICA_NAME --format="default(ipAddresses)"
| מאפיין (property) | תיאור |
|---|---|
| REPLICA_NAME | השם של רפליקת Cloud SQL שרוצים לאחזר את כתובת ה-IP הציבורית היוצאת שלה. |
התרת חיבורים נכנסים בשרת החיצוני
כדי שהרפליקציה תצליח, הרפליקה של Cloud SQL צריכה להתחבר לשרת החיצוני. צריך להגדיר את חומת האש של הרשת בשרת החיצוני כך שתקבל חיבורים מכתובת ה-IP היוצאת של הרפליקה של Cloud SQL, אם מתקיימים התנאים הבאים:
- השרת החיצוני נמצא מאחורי חומת אש או מגבלת רשת אחרת.
- הרפליקה של Cloud SQL משתמשת בכתובת IP ציבורית.
כדי להתחבר לרפליקה של Cloud SQL, משתמשים בכתובת ה-IP הראשית של הרפליקה. כתובת ה-IP הזו מוצגת במסוף Google Cloud .
עדכון מכונת הייצוג של המקור כדי לאפשר רפליקציה לרפליקה של Cloud SQL
אחרי שמגדירים את מכונת הייצוג של המקור לרפליקה של Cloud SQL, יכול להיות שיהיה צורך לעדכן את מכונת הייצוג של המקור. לדוגמה, צריך לעדכן את ההגדרות במקרים הבאים:
- המארח, היציאה או כתובת ה-IP של השרת החיצוני משתנים.
- אתם רוצים להשתמש במשתמש אחר של רפליקציית PostgreSQL.
- הסיסמה של משתמש הרפליקציה של PostgreSQL משתנה.
- אישורי ה-SSL שמשמשים לחיבור מאובטח לשרת החיצוני משתנים.
הוספת נתונים למכונת ה-replica של Cloud SQL
כדי לטעון נתונים מהשרת החיצוני אל רפליקת Cloud SQL בפעם הראשונה, משתמשים בייבוא מנוהל. הוא משתמש בשירות שמחלץ נתונים מהשרת החיצוני ומייבא אותם ישירות למכונה של Cloud SQL. מידע נוסף זמין במאמר שימוש בייבוא מנוהל כדי להגדיר שכפול ממסדי נתונים חיצוניים.
מעקב אחרי הרפליקציה
כשהרפליקה של Cloud SQL מסיימת את טעינת הנתונים הראשונית, היא מתחברת לשרת החיצוני ומחילה את כל העדכונים שבוצעו אחרי פעולת הייצוא. איך בודקים את סטטוס השכפול
חשוב לבדוק את סטטוס הרפליקציה לפני הפיכת העותק למופע עצמאי. אם תהליך השכפול לא הושלם, הרפליקה שקודמה לא תכלול את כל השינויים מהשרת החיצוני.
אם מגמת ההשהיה בשכפול לא מתקרבת ל-0, צריך לנקוט צעדים כדי לטפל בבעיה.
כדאי לבדוק את המדדים הבאים: /postgresql/external_sync/initial_sync_complete, postgresql/external_sync/max_replica_byte_lag ו-database/replication/state. אפשר לעיין ברשימת המדדים של Cloud SQL.
אם אתם רוצים להעביר קבוצת משנה של מסדי נתונים ממכונת הייצוג של המקור למכונת היעד ב-Cloud SQL, בדקו את המדדים הבאים לכל מסד נתונים:
| מדד | תיאור |
|---|---|
per_database/postgresql/external_sync/initial_sync_complete |
להבין את שלב ההעברה של מסד נתונים. אם הערך של המדד הזה הוא 0, מסד הנתונים עדיין חלק מהעברת הנתונים הראשונית. אם הערך הוא 1, מסד הנתונים סיים את ה-dump הראשוני של הנתונים והוא נמצא בשלב של סימון נתונים שהשתנו (CDC). |
per_database/postgresql/external_sync/replication_byte_lag |
לדעת את זמן ההשהיה של השכפול במסד נתונים (בבייטים). |
אחרי שהרפליקה של Cloud SQL תתעדכן בהתאם לשרת החיצוני ולא יהיה עיכוב ברפליקציה ברפליקה של Cloud SQL, מתחברים למסד הנתונים. מריצים את פקודות מסד הנתונים המתאימות כדי לוודא שהתוכן תואם לתוכן בשרת החיצוני. שמרו את השרת החיצוני עד לסיום האימותים הנדרשים.
הגדרה של רפליקה מדורגת
אחרי ההעברה, אפשר ליצור רפליקות לקריאה מדורגות מתחת לרפליקה של Cloud SQL לפני קידום הרפליקה של Cloud SQL.
כדי ליצור רפליקה מדורגת, מריצים את הפקודות הבאות:
המסוף
-
נכנסים לדף Cloud SQL Instances במסוף Google Cloud .
- לוחצים על הכרטיסייה Replicas של הרפליקה שתשמש כהורה של הרפליקה שרוצים ליצור.
- לוחצים על יצירת העתק.
- בדף Create read replica, מעדכנים את מזהה המכונה ואת כל אפשרויות ההגדרה האחרות, כולל השם, האזור והתחום.
- לוחצים על יצירה.
מערכת Cloud SQL יוצרת רפליקה. חוזרים לדף המכונה של הרפליקה הראשית.
- חוזרים על שלבים 4 עד 6 לכל רפליקה מדורגת חדשה שרוצים ליצור.
gcloud
- כדי ליצור את הרפליקה החדשה, מציינים את רפליקת Cloud SQL כמכונה הראשית באמצעות הדגל
--master-instance-name: מחליפים את הערכים הבאים:gcloud sql instances create REPLICA_NAME \ --master-instance-name=PARENT_REPLICA_NAME \
- REPLICA_NAME: המזהה הייחודי של הרפליקה שיוצרים
- PARENT_REPLICA_NAME: השם של הרפליקה ב-Cloud SQL
אחרי שיוצרים את הרפליקה, אפשר לראות שהשינויים שבוצעו במכונה הראשית משוכפלים בכל הרפליקות בשרשרת הרפליקות המדורגות.
curl
- כדי ליצור רפליקה מתחת לרפליקת ההורה, עורכים את דוגמת הקוד הבאה ב-JSON ושומרים אותה בקובץ בשם
request.json:{ "masterInstanceName": "EXTERNAL_SERVER_REPLICA_NAME", "project": "PROJECT_ID", "name": "REPLICA_NAME", "region": "REPLICA_REGION", "settings": { "tier": "MACHINE_TYPE", } }
- מריצים את הפקודה הבאה:
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"
קידום הרפליקה
כדי לקדם את הרפליקה:
- קידום הרפליקה למכונה ראשית.
- הוספת רפליקות לקריאה למכונה.
- אופציונלי: מגדירים את המכונה לזמינות גבוהה (HA).
כדי למנוע זמן השבתה נוסף, אתם יכולים להפעיל זמינות גבוהה בזמן הגדרת רפליקה על ידי הגדרת
AVAILABILITY_TYPEל-REGIONAL.
מגבלות
אם תתקינו במסדי הנתונים החיצוניים תוספים שלא נתמכים ב-Cloud SQL, כשתעבירו את מסדי הנתונים למכונה ביעד, Cloud SQL לא יעביר את התוספים האלה. כדי להבטיח מעבר חלק, צריך לוודא שאף אובייקט או אפליקציה לא מפנים לתוספים. לפני שמתחילים בהעברה, מומלץ להסיר את התוספים ואת כל ההפניות לתוספים ממסדי הנתונים שנבחרו במכונה של המקור.
מידע נוסף על התוספים שנתמכים ב-Cloud SQL זמין במאמר הגדרת תוספים של PostgreSQL.
אם מתקינים את התוסף
pg_cronבמסדי הנתונים של המקור החיצוני, כשמעבירים את מסדי הנתונים למכונה ביעד, Cloud SQL לא מעביר את התוסף או את הגדרותcronשמשויכות לתוסף. אחרי שמעבירים את מסדי הנתונים ומקדמים את הרפליקה, מומלץ להפעיל מחדש את התוסףpg_cronבכל מסד נתונים שהועבר.אי אפשר להעביר נתונים מגרסה 11 של שרת מקור ב-Microsoft Azure לגרסה 11 של מכונה ב-Cloud SQL for PostgreSQL. כדי לפתור את הבעיה, צריך להעביר את הנתונים למכונת Cloud SQL עם גרסה 12 או גרסה מתקדמת יותר.
אי אפשר לקדם ישירות רפליקה לקריאה מדורגת ברפליקת שרת חיצוני. קודם צריך לקדם את הרפליקה של השרת החיצוני למכונה ראשית, ואז לקדם את הרפליקה המשורשרת לקריאה בלבד.