الاحتفاظ بنسخة احتياطية من حزمة AlloyDB Omni RPM واستعادتها إلى مساحة تخزين متوافقة مع S3 باستخدام pgBackRest

1. مقدمة

يوضّح هذا الدرس التطبيقي حول الترميز كيفية ضبط pgBackRest لإنشاء نسخة احتياطية من عملية نشر AlloyDB Omni RPM واستعادتها باستخدام خدمة تخزين الكائنات المتوافقة مع S3.

ملاحظة: في هذا الدرس التطبيقي حول الترميز، ستنشر ملفًا ثنائيًا مستقلاً من MinIO على الجهاز الظاهري ليعمل كنقطة نهاية تخزين محلية وخفيفة الوزن ومتوافقة مع S3 لأغراض تعليمية واختبارية. بالنسبة إلى أحمال العمل في مرحلة الإنتاج، استخدِم دائمًا حل تخزين متوافقًا مع S3 أو تخزينًا سحابيًا للكائنات، ويجب أن يكونا متوافقَين ويتم صيانتهما بشكل نشط.

المتطلبات الأساسية

  • الوصول إلى مشروع Google Cloud وCloud Shell من Cloud Console
  • تم تثبيت Google Cloud SDK (gcloud) وإعداده.

ما ستتعلمه

  • كيفية إعداد جهاز Compute Engine الافتراضي لحزمة AlloyDB Omni RPM
  • كيفية إعداد خادم تخزين كائنات محلي متوافق مع S3 على الجهاز الافتراضي
  • كيفية ضبط pgBackRest لاستخدام وحدة تخزين كائنات متوافقة مع S3 كمستودع للنسخ الاحتياطية
  • كيفية إجراء النُسخ الاحتياطية وإدراجها والتحقّق منها
  • كيفية استعادة البيانات من نسخة احتياطية

المتطلبات

  • الحصول على رابط عنوان URL لحِزم AlloyDB Omni RPM يتم إرسال الروابط إلى بريدك الإلكتروني الذي يتضمّن خادم عنوان URL للمستودع. اضبط قيمة متغير البيئة التالي لإبقاء عنوان URL جاهزًا للاستخدام أثناء درس تطبيقي حول الترميز.
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    
  • جهاز طرفي يعمل مع إمكانية الوصول إلى Google Cloud يمكنك استخدام Cloud Shell لهذا الغرض.

2. الإعداد والمتطلبات

إعداد المشروع

إنشاء مشروع على Google Cloud

  1. في وحدة تحكّم Google Cloud، في صفحة اختيار المشروع، اختَر مشروع Google Cloud أو أنشِئه.
  2. تأكَّد من تفعيل الفوترة لمشروعك على السحابة الإلكترونية. كيفية التحقّق من تفعيل الفوترة في مشروع

بدء Cloud Shell

على الرغم من إمكانية تشغيل Google Cloud عن بُعد من الكمبيوتر المحمول، ستستخدم في هذا الدرس التطبيقي حول الترميز Google Cloud Shell، وهي بيئة سطر أوامر تعمل في السحابة الإلكترونية.

رمز لتفعيل Cloud Shell

  1. افتح وحدة تحكّم Google Cloud وانقر على رمز Cloud Shell في شريط الأدوات أعلى يسار الصفحة.يمكنك أيضًا فتح Cloud Shell بإحدى الطرق التالية:

يستغرق توفير البيئة والاتصال بها عادةً بضع لحظات. عند اكتمال هذه العملية، سيظهر لك ما يلي:

وحدة طرفية في Google Cloud Shell توضّح أنّه تم ربط البيئة{: width="624"}

3- إنشاء جهاز Compute Engine الافتراضي

في هذا القسم، ستنشئ جهازًا افتراضيًا واحدًا على Compute Engine (GCE) باستخدام أداة سطر الأوامر gcloud. يمكنك استخدام صورة Rocky Linux 9 المتوافقة تمامًا مع حِزم AlloyDB Omni RPM.

  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 gateway للسماح للجهاز الافتراضي بالوصول إلى مستودعات الحِزم الخارجية وتنزيل البرامج المطلوبة.
    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. أنشئ مثيل الجهاز الافتراضي (VM) في Compute Engine باستخدام Rocky Linux 9 وقرص دائم متوازن بسعة 20 غيغابايت. لتعزيز الأمان، استخدِم العلامة --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 باستخدام خدمة Identity-Aware 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 client (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 على جهازك الافتراضي من خلال إنشاء ملف إعدادات المستودع.
    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 من حزمة AlloyDB Omni RPM.
    sudo dnf install -y alloydbomni18
    
  6. تهيئة مثيل قاعدة بيانات AlloyDB Omni
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  7. أوقِف وضع فرض SELinux مؤقتًا لتسهيل عملية الإعداد، وذلك وفقًا لممارسات الدرس التطبيقي حول الترميز المعتادة.
    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. اضبط مستودع pgBackRest YUM وثبِّت 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. ابدأ بتفعيل مقطع 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. التنظيف والاستطلاع

بعد الانتهاء من درس تطبيقي حول الترميز، يمكنك تنظيف موارد 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. تهانينا

تهانينا على إكمال الدرس العملي. لقد أعددت pgBackRest بنجاح لإجراء نسخ احتياطي لعملية نشر حزمة AlloyDB Omni RPM واستعادتها باستخدام خدمة تخزين الكائنات المتوافقة مع S3.

المواضيع التي تناولناها

  • كيفية إعداد جهاز Compute Engine الافتراضي لحزمة AlloyDB Omni RPM
  • كيفية إعداد حزمة تخزين بيانات متوافقة مع S3
  • كيفية ضبط pgBackRest باستخدام مستودع متوافق مع S3
  • كيفية إجراء النسخ الاحتياطية الكاملة والتفاضلية وإدراجها والتحقّق منها
  • كيفية استعادة البيانات من نسخة احتياطية باستخدام pgBackRest

لمزيد من المعلومات، اطّلِع على نظرة عامة على AlloyDB Omni.

12. استطلاع

كيف ستستخدم هذا البرنامج التعليمي؟

قراءة المحتوى فقط قراءة المحتوى وإكمال التمارين