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

בוחרים גרסה של התיעוד:

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

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

‫pgBackRest כותב את נתוני הגיבוי למאגרים מקומיים, מרוחקים או מבוססי-ענן. אחרי שיוצרים לפחות מאגר אחד, אפשר להשתמש ב-pgBackRest כדי לשחזר את הנתונים של AlloyDB Omni בשיטות שונות, כולל שחזור מערכת מנקודה מסוימת בזמן (PITR).

‫AlloyDB Omni כולל את pgBackRest בקונטיינר Docker שלו. זה אומר שאתם יכולים להשתמש ב-pgBackRest כדי לגבות ולשחזר את הנתונים של AlloyDB Omni בלי להתקין תוכנה נוספת.

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

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

לפני שמגדירים את AlloyDB Omni לעבודה עם pgBackrest, צריך להתקין את AlloyDB Omni ולהפעיל אותו בשרת שבשליטתכם.

הערה לגבי נתיבים של מערכת קבצים

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

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

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

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

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

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

הגדרת אימות מהימן של שקע Unix

מאפשרים למחשב המארח של AlloyDB Omni לאמת את המשתמש postgres של שרת מסד הנתונים בלי לדרוש סיסמה. כך השלבים הבאים יהיו פשוטים יותר.

  1. מוסיפים את השורה הבאה לקובץ /var/alloydb/config/pg_hba.conf:

    local       all      postgres       trust
    
  2. מפעילים מחדש את AlloyDB Omni:

    sudo alloydb database-server stop
    sudo alloydb database-server start

יצירה והגדרה של מאגר גיבוי

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

  1. יוצרים ספריית משנה בשם backups בספריית הנתונים של AlloyDB Omni:

    mkdir DATA_DIR/backups

    מחליפים את DATA_DIR בנתיב של מערכת הקבצים לספריית הנתונים, לדוגמה /home/$USER/alloydb-data.

  2. יוצרים קובץ בשם pgbackrest.conf בתוך ספריית הנתונים ומעתיקים אליו את התוכן הבא:

    # Paths (all mandatory):
    repo1-path=/mnt/disks/pgsql/backups
    spool-path=/mnt/disks/pgsql
    lock-path=/mnt/disks/pgsql
    
    # 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=/mnt/disks/pgsql/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=/mnt/disks/pgsql
    pg1-path=/mnt/disks/pgsql/data
    
  3. מאתחלים את מיקום הגיבוי באמצעות הפקודה pgbackrest stanza-create:

    docker exec pg-service pgbackrest --config-path=/mnt/disks/pgsql --stanza=omni stanza-create

הגדרת מסד הנתונים לגיבויים רציפים

  1. כדי להפעיל גיבויים רציפים, מריצים את הפקודה הבאה כדי להגדיר כמה פרמטרים של PostgreSQL:

    docker exec pg-service psql -h localhost -U postgres \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/mnt/disks/pgsql --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=on;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
  2. מפעילים מחדש את AlloyDB Omni:

    sudo alloydb database-server stop
    sudo alloydb database-server start

הרצת פקודות pgBackRest

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

השיטה המומלצת היא להריץ פקודות pgBackRest ישירות מהמכונה המארחת שבה מותקן קונטיינר AlloyDB Omni, באמצעות הפקודה docker exec. לדוגמה, כדי ליצור גיבוי ידני, משתמשים בפקודה pgbackrest backup. משנים אותו כך שהוא יפעל בתוך פקודת docker exec, ויפנה לקובץ התצורה שיצרתם קודם:

docker exec pg-service pgbackrest --config-path=/mnt/disks/pgsql --stanza=omni --type=full backup

הערך של הדגל --config-path הוא /mnt/disks/pgsql כי זה תמיד המיקום של ספריית הנתונים במערכת הקבצים של מאגר AlloyDB Omni. אם פעלתם לפי השלבים שבקטע הקודם, ספריית הנתונים שלכם מכילה את הקובץ pgbackrest.conf שהפקודות של pgBackRest צריכות כדי לפעול בצורה תקינה. מידע נוסף זמין במאמר בנושא הערה לגבי נתיבים במערכת הקבצים.

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

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

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

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

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

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

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

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

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

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

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

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

  2. מוסיפים את השורות הבאות לקובץ 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=/pgbackrest
    
    # Cloud Storage backup retention parameters:
    repo2-retention-full=8
    repo2-retention-full-type=count
    

    מחליפים את BUCKET_NAME בשם של הקטגוריה ב-Cloud Storage שבה רוצים ש-pgBackRest יאחסן את הגיבויים.

  3. מאתחלים את מיקום הגיבוי בענן באמצעות הפקודה pgbackrest stanza-create:

    docker exec pg-service pgbackrest --config-path=/mnt/disks/pgsql --stanza=omni stanza-create

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

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

  • הקטגוריה של Cloud Storage, שמוגדרת באמצעות הוראות ההגדרה של repo2- שמופיעות בדוגמה הזו.

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