logical decoding.
מידע נוסף על רפליקציה זמין במאמר מידע על רפליקציה ב-Cloud SQL.
הגדרת התצורה של העותק החיצוני
לפני שמתחילים
לפני שמתחילים במשימה הזו, צריך לוודא שיש לכם מכונת Cloud SQL ומכונת PostgreSQL חיצונית.
הדרישות לגבי מופע של מקור
מופע המקור של העתק לקריאה חיצוני חייב להיות מופע ראשי או מופע עצמאי. אי אפשר להשתמש בעותק לקריאה של Cloud SQL כמופע המקור לעותק חיצוני לקריאה. לפעמים, העתקים לקריאה נוצרים מחדש משיבוט הדיסק של המופע הראשי וממצב השכפול שלו, והעתק לקריאה לא יכול לשמור על מצב השכפול שלו.
הגדרת המכונה הראשית
- נכנסים לדף המכונות של Cloud SQL במסוף Cloud de Confiance .
- מאפשרים גישה במופע הראשי לכתובת ה-IP של העותק החיצוני.
מידע על הפעלת גישה לפי כתובת IP זמין במאמר הגדרת גישה לחיבורי IP.
- שומרים את כתובת ה-IP הציבורית ואת כתובת ה-IP הציבורית היוצאת של המכונה הראשית לשימוש בהמשך. הערכים האלה מופיעים בדף סקירה כללית של המופע.
- לוחצים על סמל Cloud Shell
בפינה השמאלית העליונה. - בשורת הפקודה של Cloud Shell, משתמשים בלקוח המובנה של PostgreSQL כדי להתחבר למופע הראשי:
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=postgres
- מזינים את סיסמת הבסיס. אחרי זה אמורה להופיע ההודעה של postgres.
- יוצרים משתמש PostgreSQL עם המאפיין
REPLICATION.CREATE USER REPLICATION_USER WITH REPLICATION IN ROLE cloudsqlsuperuser LOGIN PASSWORD 'REPLICATION_USER_PASSWORD'; - מתקינים ומגדירים את התוסף pglogical:
עורכים את המכונה של Cloud SQL כדי להוסיף ולהגדיר את הדגלים הבאים:
cloudsql.enable_pglogicalcloudsql.logical_decodingmax_replication_slotsmax_worker_processesmax_wal_senders
מידע נוסף על הדגלים האלה זמין בדף מקורות מידע על PostgreSQL.
מפעילים מחדש את מסד הנתונים, מתחברים, עוברים אל replication_user ויוצרים את התוסף
pglogical:CREATE EXTENSION pglogical;
- יוצרים צומת pglogical:
_node_ של pglogical מייצג מכונת PostgreSQL פיזית, ומאחסן את פרטי החיבור למכונה הזו.
SELECT pglogical.create_node( node_name := 'provider', dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD' );
- אם מתחילים עם מסד נתונים חדש, צריך ליצור את אותו מסד נתונים ואת אותן טבלאות גם במופע הראשי וגם במופע המשוכפל. לדוגמה:
CREATE DATABASE test; \connect test; CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text); INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry'); CREATE EXTENSION pglogical;
- אם כבר יש לכם מסד נתונים במופע הראשי, אתם צריכים ליצור את אותו מסד נתונים בעותק המשוכפל. כדי לעשות את זה, מייצאים את מסד הנתונים מהמופע הראשי לקטגוריה של Cloud Storage ומייבאים אותו אל העותק המשוכפל. מידע נוסף על ייצוא נתונים מ-Cloud SQL לקובץ SQL מוכן לשימוש ב-Cloud Storage
-
כדי לתמוך בשכפול של קבוצות שונות של נתונים ליעדים שונים, ב-pglogical יש מושג שנקרא 'קבוצת שכפול'. לדוגמה, כדי להוסיף טבלה
לסט השכפול שמוגדר כברירת מחדל:
SELECT pglogical.replication_set_add_table('default', 'replica_test', true);
הגדרת העותק החיצוני
- יוצרים משתמש מיוחד לשכפול ומעניקים לו הרשאות שכפול:
CREATE USER REPLICATION_USER WITH REPLICATION SUPERUSER LOGIN PASSWORD 'REPLICATION_USER_PASSWORD'; - אם מתחילים עם מסד נתונים חדש, משתמשים ב-REPLICATION_USER כדי ליצור את אותו מסד נתונים ואת אותן טבלאות גם במופע הראשי וגם במופע המשוכפל. לדוגמה:
CREATE DATABASE test; \connect test; CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text); INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
- אם אתם מאכלסים את מופע הרפליקה החיצוני בקובץ שייצאתם מהמופע הראשי, אתם צריכים להוריד את הקובץ המיוצא מ-Cloud Storage. אם העותק החיצוני נמצא במכונה של Compute Engine, אפשר להוריד את הקובץ באמצעות הפקודה
gcloud storage:gcloud storage cp gs://BUCKET_NAME/DUMP_FILE_NAME .
- מייבאים את הקובץ למסד הנתונים.
psql --user=postgres --password < DUMP_FILE_NAME.
- מתקינים את
pglogicalבהתאם למערכת ההפעלה. לדוגמה, במערכות Debian שמופעלת בהן גרסה 13 של PostgreSQL,sudo apt-get install postgresql-13-pglogical. - מתחברים למסד הנתונים בתור replication_user ומגדירים את הפרמטרים הבאים:
ALTER SYSTEM SET shared_preload_libraries = 'pglogical'; ALTER SYSTEM SET max_replication_slots = #; (where # is the same as you set on the primary). ALTER SYSTEM SET max_worker_processes = #; (where # is the same as you set on the primary). # Logout of the database and restart it. For example, #
sudo /etc/init.d/postgresql restart# Log back in the database as the replication_user. # Since the pglogical extension is created local to each database, you need to # executeCREATE EXTENSION pglogicalin each database you create, so if you # haven't already done that: CREATE EXTENSION pglogical;For more information about these flags, see the PostgreSQL resources page.
- יוצרים צומת pglogical:
SELECT pglogical.create_node( node_name := 'subscriber', dsn := 'host=REPLICA_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD' );
- יצירת מינוי pglogical:
SELECT pglogical.create_subscription( subscription_name := 'SUBSCRIPTION_NAME', provider_dsn := 'host=PRIMARY_PUBLIC_IP_ADDRESS port=5432 dbname=DATABASE_NAME user=REPLICATION_USER password=REPLICATION_USER_PASSWORD' );
- בודקים את סטטוס המינוי:
SELECT * FROM pglogical.show_subscription_status('SUBSCRIPTION_NAME');
- אם הסטטוס הוא
replicating, סימן שההגדרה הושלמה בהצלחה. - מכניסים נתונים למקור הראשי ובודקים את העותק כדי לוודא שהנתונים מופיעים גם שם.