logical decoding עם תוסף pglogical.
מידע נוסף על רפליקציה זמין במאמר מידע על רפליקציה ב-Cloud SQL.
הגדרת התצורה של הרפליקה החיצונית
לפני שמתחילים
לפני שמתחילים במשימה הזו, צריך לוודא שיש לכם מכונת Cloud SQL ומכונת PostgreSQL חיצונית.
הדרישות לגבי מופעים של מקורות
מופע המקור של העתק לקריאה חיצוני חייב להיות מופע ראשי או מופע עצמאי. אי אפשר להשתמש בעותק לקריאה ב-Cloud SQL בתור מופע המקור של עותק חיצוני לקריאה. לפעמים משכפלים רפליקות לקריאה מחדש מהשיבוט של הדיסק של המופע הראשי שלהם, ומצב הרפליקציה שלהם לא יכול להישמר על ידי הרפליקה לקריאה.
הגדרת המכונה הראשית
- נכנסים לדף המכונות של Cloud SQL במסוף Google Cloud .
- הפעלת הגישה במופע הראשי לכתובת ה-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:
pglogical _node_ מייצג מכונת 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, סימן שההגדרה הושלמה בהצלחה. - מכניסים נתונים למקור הראשי ובודקים את הרפליקה כדי לוודא שהנתונים מופיעים גם שם.
פתרון בעיות
פתרון בעיות ב-pglogicalהמאמרים הבאים
- איך מנהלים רפליקות
- מידע נוסף על רפליקציה ב-Cloud SQL
- מידע נוסף על שכפול של PostgreSQL
- מידע נוסף על הגדרות של רפליקציה
- מידע נוסף על שכפול משרת חיצוני