הגדרה של pgBackRest ל-AlloyDB Omni

בוחרים גרסה של מאמר העזרה:

בדף הזה מוסבר איך להגן על הנתונים באמצעות הגדרת AlloyDB Omni לעבודה עם pgBackRest, שרת גיבוי מסד נתונים בקוד פתוח.

אשכולות עם TDE תומכים בגיבויים ושחזורים שקופים באמצעות pgBackRest, ולא צריך לבצע פעולות נוספות. מידע נוסף זמין במאמר בנושא יצירת אשכול עם TDE.

למידע על Kubernetes, אפשר לעיין במאמר בנושא גיבוי ושחזור ב-Kubernetes.

מידע נוסף על pgBackRest זמין במדריך למשתמש.

לפני שמתחילים

לפני שמגדירים את AlloyDB Omni לעבודה עם pgBackRest, צריך לוודא שמתקיימות הדרישות המוקדמות הבאות:

הגדרה בסיסית עם גיבויים מקומיים

בקטע הזה מפורטים השלבים להגדרה בסיסית של pgBackRest. הגדרות בסיסיות לא מאפשרות גיבויים לפי לוח זמנים. מידע נוסף זמין במאמר בנושא הגדרה של גיבויים מתוזמנים.

‫pgBackRest הוא מוצר גמיש של צד שלישי שתואם ל-AlloyDB Omni, ולכן אתם יכולים לשנות את השלבים האלה בהתאם לצרכים ולהעדפות שלכם.

צירוף נפח גיבוי למאגר

למטרות ארגון, מומלץ מאוד ליצור ולצרף נפח אחסון נפרד לגיבויים של pgBackRest. כדי להגדיר נפח אחסון חדש, מבצעים את השלבים הבאים:

  1. אם הקונטיינר פועל, צריך לעצור אותו ולהסיר אותו.

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    מחליפים את המשתנה הבא:

    • ‫CONTAINER_NAME: השם שבו השתמשתם עבור מאגר התגים.
  2. יוצרים ספריית גיבוי במערכת הקבצים של הקונטיינר.

    Docker

    mkdir -p BACKUP_DIR
    

    Docker

    mkdir -p BACKUP_DIR
    

    Podman

    mkdir -p BACKUP_DIR
    

    Podman

    mkdir -p BACKUP_DIR
    

    מחליפים את המשתנה הבא:

    • ‫BACKUP_DIR: ספריית המארח שבה יישמרו הגיבויים.
  3. יוצרים מחדש את הקונטיינר עם אמצעי האחסון החדש של הגיבויים.

    Docker

    docker run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Docker

    docker run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    מחליפים את המשתנים הבאים:

    • ‫CONTAINER_NAME: השם שבו השתמשתם עבור מאגר התגים.
    • ‫NEW_PASSWORD: הסיסמה שמוקצית למשתמש postgres של מאגר התגים החדש אחרי שהוא נוצר. שימו לב: NEW_PASSWORD תגדיר סיסמה חדשה רק אם DATA_DIR הוא מיקום חדש.
    • ‫DATA_DIR: הנתיב לספריית המארח שבה הנתונים מאוחסנים.
    • ‫BACKUP_DIR: ספריית המארח שבה יישמרו הגיבויים.
    • ‫HOST_PORT: יציאת TCP במחשב המארח שאליה הקונטיינר צריך לפרסם את היציאה שלו 5432. כדי להשתמש ביציאת ברירת המחדל של PostgreSQL במחשב המארח, מציינים 5432.
  4. הופכים את ספריית הגיבויים במאגר התגים לקריאה על ידי postgres.

    Docker

    docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Docker

    docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Podman

    podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Podman

    podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    מחליפים את המשתנה הבא:

    • ‫CONTAINER_NAME: השם שבו השתמשתם עבור מאגר התגים.

הגדרת גיבויים מקומיים

‫pgBackRest יוצר ספריות משנה לכל גיבוי שמתבצע, וכולל קובץ מניפסט בטקסט פשוט.

ב-pgBackRest, המונח stanza מתייחס להגדרה של אשכול מסדי נתונים של PostgreSQL. שם ה-stanza הוא שרירותי ולא צריך להיות זהה לשם של שרת המארח, אשכול PostgreSQL או מסד הנתונים. במסמכי התיעוד של pgBackRest מומלץ לתת ל-stanza שם לפי הפונקציה של האשכול.

המאגר הוא המקום שבו הגיבויים נשמרים. pgBackRest תומך בכתיבה ליותר ממאגר אחד בקטע נתון. רוב פרמטרי ההגדרה שקשורים למאגרי מידע עוברים אינדוקס עם ערך מספרי. לדוגמה, repo1-. פרמטרים שקשורים לאשכולות PostgreSQL גם הם עוברים אינדוקס בנפרד. לדוגמה, פרמטרים שספציפיים לאשכול הראשון של PostgreSQL בפסקה מתחילים בקידומת pg1-.

‫pgBackRest משתמש בקובץ תצורה בשם pgbackrest.conf כדי לאחסן פרמטרים גלובליים ופרמטרים ספציפיים ל-stanza.

כדי ליצור קובץ הגדרות לגיבוי של אשכול AlloyDB Omni, צריך ליצור את הקובץ pgbackrest.conf בספריית הגיבויים בצד המארח שיצרתם במאמר הוספת נפח גיבוי למאגר או יצירת ספריית גיבוי.

[global]
# Paths (all mandatory):



repo1-path=/var/lib/postgresql/backups
spool-path=/var/lib/postgresql/backups/spool
lock-path=/var/lib/postgresql/backups


# Retention details:
repo1-retention-full=3
repo1-retention-full-type=count
repo1-retention-diff=16

# Force a checkpoint to start backup immediately:
start-fast=y

# Logging parameters:



log-path=/var/lib/postgresql/backups

log-level-console=info
log-level-file=info

# Recommended ZSTD compression:
compress-type=zst

# Other performance parameters:
archive-async=y
archive-push-queue-max=1024MB
archive-get-queue-max=256MB
archive-missing-retry=y

[global:archive-push]
process-max=2

[global:archive-get]
process-max=2

[omni]
pg1-user=postgres
pg1-socket-path=/tmp



pg1-path=/var/lib/postgresql/data


חלק מהפרמטרים הם חובה, אבל אפשר לשנות אחרים כדי להתאים אותם לדרישות הספציפיות שלכם, למשל:

  • ‫repo1-path: מיקום הספרייה שאליה נכתבות הגיבויים. מומלץ לבחור מיקום שגלוי גם לשרת המארח וגם למאגר התגים.

  • ‫log-path: מיקום הספרייה שאליה נכתבים קובצי היומן. אם רוצים לכתוב את קובצי היומן למיקום נפרד, ולא לערבב אותם עם הגיבויים עצמם, צריך לשנות את הפרמטר הזה.

  • ‫repo1-retention-full: מספר הגיבויים המלאים שיישארו.

  • ‫repo1-retention-full-type: האם תקופת השמירה נמדדת לפי מספר או לפי תקופת זמן (ימים).

  • ‫repo1-retention-diff: מספר הגיבויים הדיפרנציאליים שיישארו.

הגדרות מומלצות נוספות של פרמטרים שאינן קריטיות, אבל תואמות ל-AlloyDB Omni בקובץ ההגדרות:

  • ‫log-level-console: רמת הרישום ביומן שנכתבת למסך (STDOUT) כשמריצים פקודות של pgBackup. אפשר לשנות את הערך הזה בקובץ ההגדרות, או להחליף אותו באמצעות ארגומנט שורת הפקודה --log-level-console. ערך ברירת המחדל הוא warn.

  • ‫start-fast: מפעיל נקודת ביקורת כדי להתחיל את הגיבויים במהירות. ערך ברירת המחדל הוא n.

  • ‫archive-async: דחיפה אסינכרונית של קובצי מקטעי WAL לשיפור הביצועים. ערך ברירת המחדל הוא n.

  • ‫process-max: המספר המקסימלי של תהליכים לשימוש בדחיסה ובהעברה. בדרך כלל, ההגדרה הזו היא max_cpu/4 באשכול ראשי או max_cpu/2 באשכול בהמתנה. ערך ברירת המחדל הוא 1.

  • ‫compress-type: אלגוריתם הדחיסה שבו יש להשתמש. ערך ברירת המחדל הוא gz.

יש עוד הרבה פרמטרים להגדרה של pgBackRest שאפשר לשנות. במסמכי התיעוד האלה מוסבר רק על הפרמטרים שחובה להשתמש בהם בהגדרות ברירת המחדל של AlloyDB Omni, ועל כמה הגדרות מומלצות של פרמטרים. רשימה מלאה של פרמטרי ההגדרה מופיעה במסמכי העזרה באינטרנט בנושא pgBackRest Configuration Reference.

אחרי שמגדירים את pgBackRest, צריך לאתחל את מאגרי היעד שבהם נכתבות הגיבויים על ידי יצירת ה-stanza, שמשתמשת בפרמטרים שהוגדרו בקובץ ההגדרות.

כדי להגדיר את מסד הנתונים לגיבויים, פועלים לפי השלבים הבאים:

  1. יוצרים את ה-stanza באמצעות הפקודה stanza-create.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    מחליפים את המשתנה הבא:

    • ‫CONTAINER_NAME: השם שבו השתמשתם עבור מאגר התגים.
  2. מגדירים את מסד הנתונים לגיבויים.

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    מחליפים את המשתנים הבאים:

    • ‫CONTAINER_NAME: השם שבו השתמשתם עבור מאגר התגים.
  3. מפעילים מחדש את מאגר התגים.

    Docker

    docker restart CONTAINER_NAME
    

    Docker

    docker restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    מחליפים את המשתנים הבאים:

    • ‫CONTAINER_NAME: השם שבו השתמשתם עבור מאגר התגים.
  4. מאמתים את הגדרות הגיבוי.

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    מחליפים את המשתנים הבאים:

    • ‫CONTAINER_NAME: השם שבו השתמשתם עבור מאגר התגים.
  5. ביצוע בדיקה של pgBackRest.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    מחליפים את המשתנים הבאים:

    • ‫CONTAINER_NAME: השם שבו השתמשתם עבור מאגר התגים.

ביצוע גיבוי

  1. מבצעים גיבוי מלא.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full backup
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full backup
    

    מחליפים את המשתנים הבאים:

    • ‫CONTAINER_NAME: השם שבו השתמשתם עבור מאגר התגים.
  2. מבצעים גיבוי דיפרנציאלי.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff backup
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff backup
    

    מחליפים את המשתנים הבאים:

    • ‫CONTAINER_NAME: השם שבו השתמשתם עבור מאגר התגים.
  3. דיווח על גיבויים.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    מחליפים את המשתנים הבאים:

    • ‫CONTAINER_NAME: השם שבו השתמשתם עבור מאגר התגים.

הגדרת גיבויים מתוזמנים

כדי להגדיר גיבויים מתוזמנים, יוצרים משימת cron שמריצה את הפקודה pgbackrest backup בתדירות הרצויה. מידע נוסף זמין במאמר בנושא תזמון גיבוי.

הגדרות בהתאמה אישית וגיבויים מרחוק

אחרי שמוודאים שההגדרה הבסיסית פועלת, אפשר לשנות את קובץ ההגדרות בהתאם לצרכים ולהעדפות שלכם באמצעות האפשרויות שמפורטות בהפניה להגדרות של pgBackRest.

זה כולל ציון מאגרי גיבוי נוספים שנמצאים במחשבים מרוחקים או בענן. אם מגדירים כמה מאגרי נתונים, pgBackRest כותב לכולם בו-זמנית כפעולת הגיבוי שמוגדרת כברירת מחדל.

לדוגמה, pgBackRest תומך בשימוש בקטגוריה של Cloud Storage כמאגר גיבוי, עם מספר אפשרויות הגדרה קשורות. בקטע הבא מוצגת דרך אחת להשתמש באפשרויות האלה.

דוגמה להגדרה באמצעות Cloud Storage

השלבים בסעיף הזה מבוססים על קובץ ההגדרות שהוצג בהגדרה בסיסית עם גיבויים מקומיים. השינויים האלה בקובץ מגדירים מאגר גיבוי שני בדלי של Cloud Storage, שאפשר לגשת אליו באמצעות ניהול זהויות והרשאות גישה (IAM).

סגנון האימות האוטומטי בדוגמה הזו מחייב הפעלה של אשכול AlloyDB Omni במכונה וירטואלית של Compute Engine. אם אתם לא מריצים את AlloyDB Omni במכונה וירטואלית ב-Compute Engine, אתם עדיין יכולים לגבות לקטגוריה של Cloud Storage באמצעות שיטת אימות אחרת, כמו Google Cloud מפתח של חשבון שירות שנשמר במערכת הקבצים המקומית.

כדי להרחיב את קובץ התצורה הקודם ולהגדיר מאגר pgBackRest שמבוסס על Cloud Storage, מבצעים את השלבים הבאים:

  1. מגדירים את ההרשאות של הקטגוריה כדי לאפשר לחשבון השירות שמחובר למכונה הווירטואלית לכתוב לקטגוריה. לשם כך, צריך להגדיר בחשבון השירות את התפקיד 'משתמש באובייקט אחסון' ב-IAM.

  2. מוסיפים את השורות האלה לקטע [global] בקובץ pgbackrest.conf:

    # Cloud Storage access details:
    repo2-type=gcs
    repo2-gcs-key-type=auto
    repo2-storage-verify-tls=n
    
    # Cloud Storage bucket and path details:
    repo2-gcs-bucket=BUCKET_NAME
    repo2-path=PATH_IN_BUCKET
    
    # Cloud Storage backup retention parameters:
    repo2-retention-full=8
    repo2-retention-full-type=count
    

    מחליפים את המשתנה הבא:

    • ‫BUCKET_NAME: שם הקטגוריה ב-Cloud Storage שבה רוצים ש-pgBackRest ישמור את הגיבויים.
    • ‫PATH_IN_BUCKET: נתיב הספרייה בקטגוריה של Cloud Storage שבה רוצים ש-pgBackRest ישמור את הגיבויים.
  3. מאתחלים את מיקום הגיבוי בענן באמצעות הפקודה pgbackrest stanza-create:

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    מחליפים את המשתנה הבא:

    • ‫CONTAINER_NAME: השם שבו השתמשתם עבור מאגר התגים.

אחרי שמאחלים את מאגר הגיבוי בקטגוריה של Cloud Storage באמצעות הפקודה pgbackrest stanza-create, יכול להיות ש-pgBackRest יגבה את הנתונים לשני מיקומים:

  • המיקום במערכת הקבצים המקומית, שמוגדר במקום אחר בקובץ ההגדרות כ-repo1-path. זהו מיקום ברירת המחדל כשלא מציינים את --repo בפקודה pgbackrest.

  • קטגוריה של Cloud Storage, מוגדרת באמצעות הנחיות ההגדרה repo2-gcs-bucket שמוגדרות בדוגמה הזו. כדי להשתמש בקטגוריה של Cloud Storage, מציינים את --repo=2 בפקודה pgbackrest.

המאמרים הבאים