גיבוי ושחזור של AlloyDB Omni RPM באחסון שתואם ל-S3 באמצעות pgBackRest

1. מבוא

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

הערה: בשיעור Codelab הזה, תפרסו קובץ בינארי עצמאי של MinIO במכונה הווירטואלית כדי שישמש כנקודת קצה (endpoint) מקומית וקלה לשימוש לאחסון שתואמת ל-S3, למטרות הדרכה ובדיקה. עבור עומסי עבודה של ייצור, תמיד צריך להשתמש בפתרון אחסון תואם ל-S3 שנתמך ומתוחזק באופן פעיל, או באחסון אובייקטים בענן.

דרישות מוקדמות

  • גישה לפרויקט ב-Google Cloud ול-Cloud Shell מ-Cloud Console.
  • ה-SDK של Google Cloud‏ (gcloud) מותקן ומוגדר.

מה תלמדו

  • איך מגדירים מכונה וירטואלית ב-Compute Engine ל-AlloyDB Omni RPM.
  • איך מגדירים שרת מקומי לאחסון אובייקטים שתואם ל-S3 במכונה הווירטואלית.
  • איך מגדירים את pgBackRest לשימוש באחסון אובייקטים שתואם ל-S3 כמאגר גיבוי.
  • איך מבצעים גיבויים, מציגים אותם ומאמתים אותם.
  • איך משחזרים נתונים מגיבוי

מה תצטרכו

  • קבלת קישור לכתובת URL של חבילות RPM של AlloyDB Omni. הקישורים נשלחים לאימייל שלכם, שכולל את שרת כתובת ה-URL של המאגר. מאתחלים את משתנה הסביבה הבא כדי שכתובת ה-URL תהיה מוכנה לשימוש במהלך ה-codelab.
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    
  • טרמינל פעיל עם גישה ל-Google Cloud. למטרה הזו אפשר להשתמש ב-Cloud Shell.

2. הגדרה ודרישות

הגדרת פרויקט

יצירת פרויקט ב-Google Cloud

  1. במסוף Google Cloud, בדף לבחירת הפרויקט, בוחרים פרויקט ב-Google Cloud או יוצרים פרויקט.
  2. הקפידו לוודא שהחיוב מופעל בפרויקט שלכם ב-Cloud. כך בודקים אם החיוב מופעל בפרויקט

מפעילים את Cloud Shell

אפשר להפעיל את Google Cloud מרחוק מהמחשב הנייד, אבל בשיעור Codelab הזה משתמשים ב-Google Cloud Shell, סביבת שורת פקודה שפועלת בענן.

סמל להפעלת Cloud Shell

  1. פותחים את מסוף Google Cloud ולוחצים על סמל Cloud Shell בסרגל הכלים שבפינה הימנית העליונה.אפשר גם לפתוח את Cloud Shell באחת מהדרכים הבאות:

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

טרמינל Google Cloud Shell שמראה שהסביבה מחוברת{: width="624"}

3. איך יוצרים מכונה וירטואלית ב-Compute Engine?

בקטע הזה, יוצרים מכונה וירטואלית (VM) בודדת ב-Compute Engine ‏ (GCE) באמצעות כלי שורת הפקודה gcloud. אתם משתמשים בתמונה של Rocky Linux 9, שתואמת באופן מלא ל-RPM של AlloyDB Omni.

  1. מגדירים משתני סביבה למזהה הפרויקט, לשם המכונה הווירטואלית, לסוג המכונה, לאזור ולמדינה.
    export PROJECT="your-project-id"
    export INSTANCE_NAME="alloydb-omni-pgbackrest"
    export MACHINE_TYPE="e2-standard-4"
    export ZONE="us-central1-c"
    export REGION="us-central1"
    
  2. נכנסים באמצעות המשתמש בחשבון Google Cloud ומגדירים את פרויקט ברירת המחדל.
    gcloud auth login
    gcloud config set project $PROJECT
    
  3. יוצרים כלל חומת אש שמאפשר חיבורי SSH למכונה הווירטואלית.
    gcloud compute firewall-rules create allow-ssh-alloydb-omni \
        --project=$PROJECT \
        --direction=INGRESS \
        --action=allow \
        --rules=tcp:22 \
        --source-ranges="0.0.0.0/0"
    
  4. מכיוון שהמכונה הווירטואלית נוצרת ללא כתובת IP ציבורית, צריך להגדיר Cloud Router ושער Cloud NAT כדי לאפשר למכונה הווירטואלית לגשת למאגרי חבילות חיצוניים ולהוריד את התוכנה הנדרשת.
    gcloud compute routers create alloydb-omni-router \
        --project=$PROJECT \
        --network=default \
        --region=$REGION
    
    gcloud compute routers nats create alloydb-omni-nat \
        --project=$PROJECT \
        --router=alloydb-omni-router \
        --region=$REGION \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips
    
  5. מוודאים שלרשת ה-VPC יש נתיב שער אינטרנט תקף שמוגדר כברירת מחדל. בסביבות משותפות או בסביבות ארגז חול מסוימות, סקריפטים לניקוי מסירים מדי פעם מסלולים שמוגדרים כברירת מחדל. המסלול הזה נדרש כדי ש-Cloud NAT יעביר תנועה יוצאת לאינטרנט.
    gcloud compute routes create default-internet-route \
        --project=$PROJECT \
        --network=default \
        --destination-range=0.0.0.0/0 \
        --next-hop-gateway=default-internet-gateway
    
  6. יוצרים מכונת וירטואלית ב-Compute Engine עם Rocky Linux 9 ודיסק אחסון מתמיד מאוזן בנפח 20GB. כדי לשפר את האבטחה, משתמשים בדגל --no-address כדי שלא תוקצה למכונה הווירטואלית כתובת IP ציבורית.
    gcloud compute instances create $INSTANCE_NAME \
        --project=$PROJECT \
        --zone=$ZONE \
        --machine-type=$MACHINE_TYPE \
        --image-family=rocky-linux-9 \
        --image-project=rocky-linux-cloud \
        --boot-disk-size=20GB \
        --boot-disk-type=pd-balanced \
        --no-address
    
  7. אחרי שיוצרים את המכונה הווירטואלית, מאמתים את הסטטוס שלה.
    gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
    

4. הגדרת אחסון אובייקטים שתואם ל-S3

בקטע הזה מתחברים למכונה הווירטואלית, מכינים את הסביבה ומגדירים שרת מקומי לאחסון אובייקטים שתואם ל-S3 ‏ (minio) יחד עם לקוח S3 ‏ (mc) כדי לארח את קטגוריית הגיבוי.

  1. מתחברים למכונה הווירטואלית באמצעות SSH באמצעות שרת proxy לאימות זהויות (IAP). מכיוון שלמכונה הווירטואלית אין כתובת IP ציבורית, gcloud ינהל באופן אוטומטי את חיבור ה-SSH דרך IAP.
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. מתקינים את חבילת policycoreutils-python-utils כדי שאפשר יהיה להגדיר את מדיניות SELinux בהמשך, אם יהיה צורך.
    sudo dnf install -y policycoreutils-python-utils
    
  3. מורידים את הקובץ הבינארי של השרת שתואם ל-S3 ‏ (minio).
    curl -L -o minio \
        https://github.com/minio/minio/releases/download/RELEASE.2024-05-10T01-41-38Z/minio.linux-amd64.RELEASE.2024-05-10T01-41-38Z
    chmod +x minio
    sudo mv minio /usr/local/bin/
    
  4. יוצרים ספריית נתונים לשרת אחסון האובייקטים.
    sudo mkdir -p /var/lib/s3-storage/data
    
  5. מפעילים ברקע את השרת שתואם ל-S3 עם פרטי כניסה לדוגמה. שימו לב שהמפתח הסודי צריך להיות באורך של 8 תווים לפחות.
    export MINIO_ROOT_USER="s3admin"
    export MINIO_ROOT_PASSWORD="s3password"
    
    nohup sudo env MINIO_ROOT_USER="$MINIO_ROOT_USER" \
        MINIO_ROOT_PASSWORD="$MINIO_ROOT_PASSWORD" \
        /usr/local/bin/minio server /var/lib/s3-storage/data \
        --console-address ":9001" \
        > s3-server.log 2>&1 &
    
  6. מוודאים שהשרת שתואם ל-S3 פועל.
    ps aux | grep minio
    
  7. מורידים ומתקינים את לקוח S3 ‏ (mc) כדי לנהל קטגוריות.
    curl -L -o mc \
        https://github.com/minio/mc/releases/download/RELEASE.2024-05-09T17-04-24Z/mc.linux-amd64.RELEASE.2024-05-09T17-04-24Z
    chmod +x mc
    sudo mv mc /usr/local/bin/
    
  8. מגדירים את הכינוי של לקוח S3 ‏ (s3repo) ויוצרים קטגוריה בשם alloydb-backups.
    mc alias set s3repo http://localhost:9000 s3admin s3password
    mc mb s3repo/alloydb-backups
    

5. התקנה של AlloyDB Omni

בקטע הזה, מתקינים ומגדירים את AlloyDB Omni.

  1. מגדירים משתני סביבה במכונה הווירטואלית לספריית הנתונים, לכתובת ה-URL של מאגר AlloyDB Omni ולסיסמה חזקה למשתמש האדמין של PostgreSQL postgres. מחליפים את כתובת ה-URL בכתובת שקיבלתם מטופס ההרשמה.
    export PGDATA="/var/lib/alloydbomni"
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    export PGPASSWORD="YourStrongPassword123!"
    
    הערה: במעבדת הקוד הזו, העברת סיסמאות באמצעות משתני סביבה בשורת הפקודה (למשל, PGPASSWORD=$PGPASSWORD) משמשת כדי לפשט את התהליך, אבל היא עלולה לחשוף את הסיסמה ברשימות של תהליכים. בסביבת ייצור, מומלץ להשתמש בשיטות מאובטחות יותר כמו .pgpassקובץ או מנהל סודות.
  2. יוצרים את ספריית הנתונים שבה AlloyDB Omni יאחסן את קובצי מסד הנתונים שלו.
    sudo mkdir -p $PGDATA
    
  3. מגדירים את מאגר YUM ב-VM על ידי יצירת קובץ תצורת המאגר.
    sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF
    [alloydbomni]
    name=alloydbomni
    baseurl=$ALLOYDB_OMNI_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=1
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
  4. מעדכנים את המטמון של YUM.
    sudo yum makecache
    
  5. מתקינים את גרסה 18 של חבילת ה-RPM של AlloyDB Omni.
    sudo dnf install -y alloydbomni18
    
  6. מאתחלים את מכונת מסד הנתונים של AlloyDB Omni.
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  7. כדי להקל על ההגדרה, משביתים באופן זמני את מצב האכיפה של SELinux, בהתאם לשיטות המומלצות של Codelab.
    sudo setenforce 0
    
  8. מכינים את מכונת מסד הנתונים של AlloyDB Omni.
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    
  9. מפעילים ומתחילים את שירות AlloyDB Omni systemd.
    sudo systemctl enable alloydbomni18
    sudo systemctl start alloydbomni18
    
  10. מוודאים ששירות AlloyDB Omni פעיל ופועל בצורה תקינה.
    sudo systemctl status alloydbomni18
    

6. הגדרת pgBackRest

בקטע הזה נסביר איך להתקין את pgBackRest ממאגר AlloyDB Omni Common, להגדיר את /etc/pgbackrest/pgbackrest.conf כך שישתמש בקטגוריית אחסון אובייקטים שתואמת ל-S3 כמאגר גיבוי, ולהפעיל את הארכיון של WAL ב-AlloyDB Omni.

  1. מגדירים משתנה סביבה במכונה הווירטואלית לכתובת ה-URL של מאגר AlloyDB Omni Common. מחליפים את כתובת ה-URL בכתובת שקיבלתם מטופס ההרשמה.
    export ALLOYDB_OMNI_COMMON_REPOSITORY_URL="..."
    
  2. מגדירים את מאגר ה-YUM של pgBackRest ומתקינים את pgbackrest-2.58.0.
    sudo tee /etc/yum.repos.d/pgbackrest.repo <<EOF
    [pgbackrest]
    name=Google Alloydb Omni Orchestrator
    baseurl=$ALLOYDB_OMNI_COMMON_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=0
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
    sudo dnf install -y pgbackrest-2.58.0
    
  3. יוצרים את ספריות התור להדפסה והיומן עבור pgBackRest ומקצים את הבעלות למשתמש postgres.
    sudo mkdir -p /var/log/pgbackrest
    sudo mkdir -p /var/lib/pgbackrest
    
    sudo chown -R postgres:postgres /var/log/pgbackrest
    sudo chown -R postgres:postgres /var/lib/pgbackrest
    
  4. יוצרים /etc/pgbackrest/pgbackrest.conf ומגדירים הרשאות קפדניות לקבצים.
    sudo mkdir -p /etc/pgbackrest/conf.d
    
    sudo tee /etc/pgbackrest/pgbackrest.conf <<EOF
    [global]
    spool-path=/var/lib/pgbackrest
    lock-path=/var/lib/pgbackrest
    
    # S3 Repository details
    repo1-type=s3
    repo1-s3-endpoint=http://localhost:9000
    repo1-s3-bucket=alloydb-backups
    repo1-s3-key=s3admin
    repo1-s3-key-secret=s3password
    repo1-s3-region=us-east-1
    repo1-s3-uri-style=path
    repo1-path=/pgbackrest
    
    # Retention policy
    repo1-retention-full=3
    repo1-retention-full-type=count
    repo1-retention-diff=16
    
    # Force immediate checkpoint during backup start
    start-fast=y
    
    # Logging
    log-path=/var/log/pgbackrest
    log-level-console=info
    log-level-file=info
    
    # Compression
    compress-type=zst
    
    # Asynchronous WAL archiving
    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=$PGDATA
    EOF
    
    sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
    sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
    
  5. מאתחלים את ה-stanza של pgBackRest בתור המשתמש postgres.
    ‫
    sudo -u postgres pgbackrest --stanza=omni stanza-create
    
    מוודאים ש-stanza-create command end: completed successfully מוצג בפלט.
  6. הגדרת פרמטרים לארכיון ב-AlloyDB Omni באמצעות psql.
    sudo -u postgres /usr/lib/postgresql/18/bin/psql \
        -c "ALTER SYSTEM SET archive_mode = 'on';" \
        -c "ALTER SYSTEM SET archive_command = 'pgbackrest --stanza=omni archive-push %p';" \
        -c "ALTER SYSTEM SET wal_level = 'replica';" \
        -c "ALTER SYSTEM SET max_wal_senders = 10;"
    
  7. מפעילים מחדש את שירות AlloyDB Omni כדי להחיל את השינויים בארכיון.
    sudo systemctl restart alloydbomni18
    
  8. אימות התקינות והקישוריות של ההגדרות של pgBackRest.
    ‫
    sudo -u postgres pgbackrest --stanza=omni check
    
    מוודאים ש-check command end: completed successfully מוצג בפלט.

7. ביצוע גיבוי

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

  1. מפעילים גיבוי מלא באמצעות pgbackrest.
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=full backup
    
  2. מפעילים גיבוי דיפרנציאלי באמצעות pgbackrest.
    ‫
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=diff backup
    
    הערה: סוגי גיבוי נתמכים אחרים כוללים incr (מצטבר).

8. רשימה ואימות של גיבויים

בסעיף הזה, תפרטו את הגיבויים ותאמתו שהם הושלמו בהצלחה.

  1. מריצים את הפקודה pgbackrest info כדי לראות את רשימת הגיבויים.
    ‫
    sudo -u postgres pgbackrest \
        --stanza=omni info
    
    מוודאים שהפלט מציג את status: ok יחד עם פרטי הגיבוי של כל פקודת גיבוי שהפעלתם:
    • גיבוי מלא: full backup: F (לדוגמה, 20260908-093545F)
    • גיבוי דיפרנציאלי: diff backup: F_D (לדוגמה, 20260908-093545F_20260908-094016D)
  2. מאמתים את קובצי הגיבוי שמאוחסנים בדלי באמצעות לקוח S3 ‏ (mc).
    ‫
    mc ls s3repo/alloydb-backups/pgbackrest/
    
    הפלט אמור לכלול את backup,‏ archive ו-stanza.info.

9. שחזור נתונים מגיבוי

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

זהירות: השחזור מפסיק את פעולת מסד הנתונים ודורך על כל הנתונים במסד הנתונים.

  1. מגדירים משתנה סביבה למזהה הגיבוי שרוצים לשחזר ממנו. מחליפים את הערך במזהה הגיבוי שמוצג בפלט של pgbackrest info.
    export BACKUPID="20260908-093545F"
    
  2. מפסיקים את שירות AlloyDB Omni ומוודאים שהוא לא פעיל.
    ‫
    sudo systemctl stop alloydbomni18
    sudo systemctl status alloydbomni18
    
    מוודאים שהפלט מציג Active: inactive.
  3. מריצים את הפקודה pgbackrest restore עם האפשרות --delta כדי לשחזר את מסד הנתונים מהגיבוי שנבחר.
    ‫
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --set=$BACKUPID \
        --delta restore
    
    מוודאים ש-restore command end: completed successfully מוצג בפלט.
  4. מפעילים את שירות AlloyDB Omni ומוודאים שהוא פעיל ופועל.
    ‫
    sudo systemctl start alloydbomni18
    sudo systemctl status alloydbomni18
    
    מוודאים שהפלט מציג Active: active (running).

10. ניקוי וסקר

אחרי שמסיימים את ה-codelab, אפשר למחוק את המשאבים של Google Cloud כדי להימנע מחיובים לא רצויים.

  1. מתנתקים מהסשן של SSH במכונה הווירטואלית כדי לחזור לטרמינל המקומי של Cloud Shell.
    exit
    
  2. מוחקים את המכונה הווירטואלית ב-Compute Engine.
    gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet
    
  3. מוחקים את כלל חומת האש שנוצר לגישת SSH.
    gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet
    
  4. מוחקים את שער Cloud NAT ואת Cloud Router.
    gcloud compute routers nats delete alloydb-omni-nat --router=alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    gcloud compute routers delete alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    
  5. מוחקים את המסלול המותאם אישית.
    gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
    

11. מזל טוב

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

מה נכלל

  • איך מגדירים מכונה וירטואלית ב-Compute Engine ל-AlloyDB Omni RPM.
  • איך מגדירים קטגוריית אחסון אובייקטים שתואמת ל-S3.
  • איך מגדירים את pgBackRest עם מאגר שתואם ל-S3.
  • איך מבצעים גיבויים מלאים וגיבויים דיפרנציאליים, איך מציגים אותם ואיך מאמתים אותם.
  • איך משחזרים נתונים מגיבוי באמצעות pgBackRest.

מידע נוסף מופיע במאמר סקירה כללית על AlloyDB Omni.

12. סקר

איך תשתמשו במדריך הזה?

רק קוראים את הטקסט קוראים את הטקסט ומבצעים את התרגילים