קטעי הקוד בדף הזה הם דוגמאות שאפשר להשתמש בהן כמודלים, ולהחליף את הערכים בערכים של משאבי AlloyDB Omni.
לפני שמתחילים
- איך מתקינים את Omni Operator ב-Kubernetes
- חשוב לוודא שאתם יוצרים משבצת שכפול, אשכול של בעלי תוכן דיגיטלי ופרסום. מידע נוסף זמין במאמר יצירת משבצות רפליקציה ופרסום.
יצירה והגדרה של אשכול המינויים
יוצרים אשכול מנויים.
$ cat << EOF | kubectl apply -f - apiVersion: v1 kind: Secret metadata: name: db-pw-DB_CLUSTER_NAME type: Opaque data: DB_CLUSTER_NAME: "ENCODED_PASSWORD" # Password is odspassword --- apiVersion: alloydbomni.dbadmin.goog/v1 kind: DBCluster metadata: name: subscriber spec: databaseVersion: "17.9.0" primarySpec: adminUser: passwordRef: name: db-pw-DB_CLUSTER_NAME resources: memory: MEMORY_SIZE cpu: CPU_COUNT disks: - name: DataDisk size: DISK_SIZE EOFמחליפים את מה שכתוב בשדות הבאים:
-
DB_CLUSTER_NAME: השם של אשכול מסד הנתונים הזה, לדוגמהsubscriber-cluster.
ENCODED_PASSWORD: סיסמת ההתחברות למסד הנתונים של תפקיד המשתמשpostgresשמוגדר כברירת מחדל, מקודדת כמחרוזת base64. לדוגמה,Q2hhbmdlTWUxMjM=בשבילChangeMe123.
CPU_COUNT: מספר המעבדים שזמינים לכל מכונה של מסד נתונים באשכול מסדי הנתונים הזה.
MEMORY_SIZE: כמות הזיכרון לכל מכונה של מסד נתונים באשכול מסדי הנתונים הזה. מומלץ להגדיר את הערך הזה ל-8GB לכל מעבד (CPU). לדוגמה, אם הגדרתם אתcpuל-2מוקדם יותר במניפסט הזה, מומלץ להגדיר אתmemoryל-16Gi.
DISK_SIZE: גודל הדיסק לכל מופע של מסד נתונים, לדוגמה10Gi.
-
מאתרים את הפוד שרוצים.
$ kubectl get pod -l "alloydbomni.internal.dbadmin.goog/dbcluster=DB_CLUSTER_NAME, alloydbomni.internal.dbadmin.goog/task-type=database, dbs.internal.dbadmin.goog/ha-role=Primary"מתחברים ל-pod של מסד הנתונים של אשכול המנויים.
$ kubectl get pod NAME READY STATUS RESTARTS AGE al-2bce-publisher-0 3/3 Running 0 20h $ kubectl exec -ti SUBSCRIBER_POD_NAME -- /bin/bash Defaulted container "database" out of: database, logrotate-agent, memoryagent, dbinit (init) postgres@al-3513-subscriber-0:/$מחליפים את
SUBSCRIBER_POD_NAMEבשם של pod המנוי.מאתרים את כתובת ה-IP של מאזן העומסים באשכול מסד הנתונים של המפרסם, למשל
10.116.14.190.$ kubectl get service NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE al-publisher-rw-ilb ClusterIP 10.116.14.190 <none> 5432/TCP 21hמגבים את הסכימה מהמפרסם כעותק ראשוני של הנתונים שפורסמו במסד הנתונים של המפרסם. רפליקציה לוגית לא תומכת ברפליקציה של DDL. לפני שמתחילים ברפליקציה לוגית, הסכימה או הטבלה שרוצים לשכפל צריכה להיות קיימת ביעד (אשכול המנויים).
postgres@al-3513-subscriber-0:/$ pg_dump -h PUBLISHER_IP_ADDRESS -U postgres --create --schema-only customer > /tmp/customer.schema-only.sqlמחליפים את
PUBLISHER_IP_ADDRESSבכתובת ה-IP של מאזן העומסים ב-DBcluster של בעל האתר.מחילים את הגיבוי במסד הנתונים של המנויים.
postgres@al-3513-subscriber-0:/$ psql -h localhost -U postgres < /tmp/customer.schema-only.sqlאופציונלי: מוודאים שאין נתונים בטבלה.
# There is no data in table company customer=# select * from company; id | name | age | salary ----+------+-----+-------- (0 rows)יוצרים מינוי למסד הנתונים. מוודאים שהפרסום כבר נוצר ב-DBCluster של בעל התוכן הדיגיטלי.
postgres@al-3513-subscriber-0:/$ CREATE SUBSCRIPTION sub_customer CONNECTION 'host=PUBLISHER_IP_ADDRESS port=5432 user=REPLICATION_USER dbname=DATABASE_NAME password=PUBLISHER_CLUSTER_PASSWORD sslmode=require' PUBLICATION PUBLICATION_NAME WITH (slot_name='REPLICATION_SLOT_NAME');מחליפים את מה שכתוב בשדות הבאים:
- REPLICATION_USER: השם של המשתמש שמתחבר למקום השכפול.
- DATABASE_NAME: השם של מסד הנתונים שאת השינויים שלו רוצים להעביר בסטרימינג מחריץ הרפליקציה.
- PUBLISHER_CLUSTER_PASSWORD: סיסמת הכניסה למסד הנתונים של המשתמש
postgresב-DBCluster של בעל התוכן הדיגיטלי. - PUBLICATION_NAME: שם אתר החדשות שהמנוי נרשם אליו.
- REPLICATION_SLOT_NAME: השם של משבצת השכפול שנוצרה ב-DBCluster של המפרסם.
אופציונלי: מאמתים את השכפול באשכול המנויים.
postgres@al-3513-subscriber-0:/$ psql -h localhost -U postgres DATABASE_NAME customer=# select * from public.company; id | name | age | salary ----+-------+-----+-------- 1 | Quinn | 25 | 65000 2 | Kim | 22 | 72250 3 | Bola | 31 | 53000 4 | Sasha | 33 | 105000 5 | Yuri | 27 | 85000 (5 rows)באשכול של בעל האפליקציה, מוסיפים שורה לטבלה.
# On the publisher database $ kubectl exec -ti al-2bce-publisher-0 -- /bin/bash Defaulted container "database" out of: database, logrotate-agent, memoryagent, dbinit (init) postgres@al-2bce-publisher-0:/$ psql -h localhost -U postgres DATABASE_NAME customer=# insert into TABLE_NAME (id, name, age, salary) values (6, 'Alex', 39, 100000);מחליפים את TABLE_NAME בשם הטבלה ב-DBCluster של בעל התוכן הדיגיטלי שהמנוי רשום אליה.
ב-subscriber cluster, מוודאים שהשורה שנוספה לטבלה ב-publisher cluster שוכפלה לטבלה ב-subscriber cluster.
# On the subscriber database, data is synced. postgres@al-3513-subscriber-0:/$ psql -h localhost -U postgres DATABASE_NAME customer=# select * from TABLE_NAME; id | name | age | salary ----+-------+-----+-------- 1 | Quinn | 25 | 65000 2 | Kim | 22 | 72250 3 | Bola | 31 | 53000 4 | Sasha | 33 | 105000 5 | Yuri | 27 | 85000 6 | Alex | 39 | 100000 (6 rows)
יצירת טבלאות נוספות באופן ידני
שכפול לוגי לא מסנכרן אוטומטית שינויים ב-DDL, בניגוד ל-replicate_ddl_command ב-pglogical. הכלי בקוד פתוח pgl_ddl_deploy מציע פתרון, אבל אתם יכולים גם להריץ פקודות DDL באופן ידני במנוי.
כדי להדגים את זה, יוצרים טבלה חדשה בשם
financeבמסד הנתוניםcustomerבאשכול המפרסם.# On the publisher database $ kubectl exec -ti al-2bce-publisher-0 -- /bin/bash Defaulted container "database" out of: database, logrotate-agent, memoryagent, dbinit (init) postgres@al-2bce-publisher-0:/$ psql -h localhost -U postgres customer customer=# create table finance (row text); CREATE TABLE customer=# insert into finance values ('critical data'); INSERT 0 1 customer=# ALTER PUBLICATION pub_customer ADD TABLE finance; ALTER PUBLICATIONכשמוסיפים טבלה חדשה לאשכול של בעל התוכן הדיגיטלי, צריך להחיל ידנית את ה-DDL (יצירת הטבלה) במנוי, ואז לאמת את השכפול על ידי הפעלת הפקודה הבאה באשכול של המנוי.
postgres@al-3513-subscriber-0:/$ psql -h localhost -U postgres customer customer=# create table finance (row text); CREATE TABLE customer=# ALTER SUBSCRIPTION sub_customer REFRESH PUBLICATION; ALTER SUBSCRIPTION customer=# select * from finance; row --------------- critical data (1 row)