1. מבוא
ב-Codelab הזה נסביר איך מגבים אשכול בזמינות גבוהה (HA) למאגר אובייקטים שתואם ל-S3 ב-AlloyDB Omni באמצעות כלי תזמור RPM.
בשיעור Codelab הזה נשתמש באשכול מתוך שיעור ה-Codelab Deploy AlloyDB Omni high availability cluster on GCE VMs using RPM Orchestrator כדי ליצור אשכול זמינות גבוהה במכונות וירטואליות (VM) של Compute Engine. בשיעור Codelab הזה תוסיפו שרת מאגר אובייקטים שתואם ל-S3 לאחת מהמכונות הווירטואליות. אתם משתמשים בשרת מאגר אובייקטים עבור אשכול ה-HA כדי לגבות את הנתונים ולשחזר את האשכול מהשרת.

דרישות מוקדמות
- פרויקט ב-Google Cloud שהחיוב בו מופעל.
- תפקידי ה-IAM שמפורטים ב-Codelab של HA.
- ידע בסיסי בפקודות Linux ו-SQL.
מה תלמדו
- איך להתקין ולהפעיל שרת מאגר אובייקטים שתואם ל-S3 לגיבויים.
- איך יוצרים תוכנית גיבוי שכותבת גיבויים לאחסון שתואם ל-S3.
- איך יוצרים גיבוי על פי דרישה.
- איך משחזרים אשכול מגיבוי ומנקודת זמן מסוימת.
מה תצטרכו
- כתובות ה-URL של מאגרי התוכנה של AlloyDB Omni ושל אוסף Ansible של כלי התזמור. כדי לקבל את כתובות ה-URL, צריך למלא את טופס ההרשמה ל-AlloyDB Omni. מידע נוסף זמין במאמר סקירה כללית על AlloyDB Omni באמצעות RPM. אתם משתמשים בכתובות ה-URL ב-codelab של HA.
- אשכול AlloyDB Omni HA מתוך ה-Codelab Deploy AlloyDB Omni high availability cluster on GCE VMs using RPM Orchestrator.
- טרמינל עם גישה ל-Google Cloud ול-Cloud Shell.
2. הגדרה ודרישות
- בשלב הזה יוצרים אשכול זמינות גבוהה באמצעות שיעור ה-Codelab Deploy AlloyDB Omni high availability cluster on GCE VMs using RPM Orchestrator. מבצעים את השלבים הבאים. אם כבר יש לכם אשכול מ-codelab, ממשיכים לשלב הבא.
- הערה: בשלב הזה לא מבצעים את השלב "ניקוי המשאבים". תבצעו את השלב הזה בסוף ה-Codelab.
- חזרה ל-Codelab הזה
3. חיבור לאשכול והוספת נתונים לדוגמה
בשלב הזה, טוענים את הגדרות האשכול במכונה הווירטואלית של הבקרה. לאחר מכן מתחברים לאשכול ומוסיפים טבלה עם נתונים לדוגמה.
- אם אתם לא מחוברים למכונת ה-VM של הבקרה, מתחברים אליה מ-Cloud Shell:
המשתניםgcloud compute ssh "$CLUSTER-control" --zone="$ZONE" --project="$PROJECT"CLUSTER,ZONEו-PROJECTמגיעים מהשלב Prepare the VMs for the deployment ב-Codelab Deploy AlloyDB Omni high availability cluster on GCE VMs using RPM Orchestrator. אם המשתנים האלה לא מוגדרים ב-Cloud Shell, צריך להגדיר אותם מחדש. - ב-VM של הבקרה, עוברים לספריית הבית וטוענים את משתני הסביבה. לאחר מכן מוסיפים את שם האשכול ואת משתמש ה-SSH לקובץ הסביבה:
מוודאים שהפלט מציג את הערכיםcd ~ source /tmp/cluster.conf cat >> ~/.codelab.env <<EOF export CLUSTER="$cluster" export SSH_USER="$service_account" EOF source ~/.codelab.env env | grep -E '^(CLUSTER|SSH_USER|VIRTUAL_IP)='CLUSTER,SSH_USERו-VIRTUAL_IP. הערה: אם מתחברים שוב למכונה הווירטואלית של הבקרה מאוחר יותר, צריך להריץ את הפקודותcd ~ו-source ~/.codelab.envלפני שממשיכים. - מוסיפים את הגדרות החיבור לקובץ הסביבה. כשמריצים את הפקודה
readומתבקשים להזין סיסמה, מזינים את הסיסמה של המשתמשpostgres. הסיסמה הזו מוגדרת בשלב Bootstrap AlloyDB Omni Cluster ב-Codelab Deploy AlloyDB Omni high availability cluster on GCE VMs using RPM Orchestratorcat >> ~/.codelab.env <<'EOF' export PATH="/usr/pgsql-18/bin:$PATH" export PGHOST="$VIRTUAL_IP" export PGUSER="postgres" EOF read -rsp "Password of the postgres user: " PGPASSWORD; echo printf 'export PGPASSWORD=%q\n' "$PGPASSWORD" >> ~/.codelab.env source ~/.codelab.env env | grep -E '^(PGHOST|PGUSER|PGPASSWORD)=' - ליצור טבלה ולהוסיף 1,000 שורות:
psql <<'SQL' CREATE TABLE public.orders ( id integer PRIMARY KEY, item text NOT NULL, created_at timestamptz NOT NULL DEFAULT pg_catalog.now() ); INSERT INTO public.orders (id, item) SELECT g, 'item-' || g FROM pg_catalog.generate_series(1, 1000) AS g; SQL - ספירת השורות:
מוודאים שהפלט מחזירpsql -c "SELECT pg_catalog.count(*) FROM public.orders;"1000.
4. התקנה והפעלה של מאגר אובייקטים שתואם ל-S3
בשלב הזה, כותבים קובץ Ansible playbook שמתקין שרת MinIO במכונת הבקרה. בנוסף, ה-playbook יוצר את ה-bucket ואת המשתמש לגיבויים, ומוודא שמכונות ה-VM של מסד הנתונים יכולות להתחבר ל-MinIO. מריצים את כל הפקודות בשלב הזה במכונה הווירטואלית של הבקרה.
- ב-VM של הבקרה, מוסיפים את הגדרות האחסון לקובץ הסביבה. הפקודות
opensslיוצרות סיסמאות אקראיות. מוודאים שהפלט מציג את השם ואת כתובת ה-IP הפנימית של מכונת ה-VM של אמצעי הבקרה, לדוגמהMD=http://metadata.google.internal/computeMetadata/v1/instance S3_IP=$(curl -s -H "Metadata-Flavor: Google" "$MD/network-interfaces/0/ip") cat >> ~/.codelab.env <<EOF export S3_IP="$S3_IP" export S3_HOST="$CLUSTER-control" export S3_BUCKET="alloydb-backups" export S3_REGION="us-east-1" export MINIO_ROOT_USER="s3admin" export MINIO_ROOT_PASSWORD="$(openssl rand -hex 16)" export S3_ACCESS_KEY_ID="alloydb-backup" export S3_SECRET_ACCESS_KEY="$(openssl rand -hex 16)" export MINIO_URL="https://github.com/minio/minio/releases/download/RELEASE.2024-05-10T01-41-38Z/minio.linux-amd64.RELEASE.2024-05-10T01-41-38Z" export MC_URL="https://github.com/minio/mc/releases/download/RELEASE.2024-05-09T17-04-24Z/mc.linux-amd64.RELEASE.2024-05-09T17-04-24Z" EOF source ~/.codelab.env echo "$S3_HOST $S3_IP"my-cluster-control 10.1.0.2. המכונות הווירטואליות של מסד הנתונים משתמשות בשם המארח ובכתובת ה-IP האלה כדי להתחבר ל-MinIO. כתובת ה-IP מופיעה בשרת המטא-נתונים של המכונה הווירטואלית. מידע נוסף זמין במסמכי התיעוד בנושא מטא-נתונים של מכונות וירטואליות.הערכיםMINIO_URLו-MC_URLהם כתובות ה-URL להורדה של שרת MinIO ושל לקוח MinIO (mc). - מתקינים את אוסף
community.cryptoAnsible הנדרש במכונת הבקרה:ansible-galaxy collection install community.crypto - יוצרים את ספר ההפעלה
s3_server.yaml: המשתנהcat > s3_server.yaml <<EOF - name: Install and run MinIO on the control VM hosts: localhost connection: local become: true gather_facts: false tasks: - name: Create MinIO directories ansible.builtin.file: path: "{{ item }}" state: directory mode: "0755" loop: - /var/lib/minio/data - /var/lib/minio/certs - name: Download MinIO server and client ansible.builtin.get_url: url: "{{ item.url }}" dest: "{{ item.dest }}" mode: "0755" loop: - url: "$MINIO_URL" dest: /usr/local/bin/minio - url: "$MC_URL" dest: /usr/local/bin/mc - name: Generate MinIO TLS private key community.crypto.openssl_privatekey: path: /var/lib/minio/certs/private.key size: 2048 mode: "0600" - name: Generate MinIO certificate signing request community.crypto.openssl_csr_pipe: privatekey_path: /var/lib/minio/certs/private.key common_name: "$S3_HOST" subject_alt_name: - "DNS:$S3_HOST" - "DNS:$S3_BUCKET.$S3_HOST" - "DNS:localhost" - "IP:127.0.0.1" - "IP:$S3_IP" register: minio_csr - name: Generate self-signed MinIO TLS certificate community.crypto.x509_certificate: path: /var/lib/minio/certs/public.crt csr_content: "{{ minio_csr.csr }}" privatekey_path: /var/lib/minio/certs/private.key provider: selfsigned selfsigned_not_after: "+365d" mode: "0644" - name: Create MinIO systemd service unit ansible.builtin.copy: dest: /etc/systemd/system/minio.service mode: "0600" content: | [Unit] Description=MinIO Object Storage After=network.target [Service] Environment="MINIO_ROOT_USER=$MINIO_ROOT_USER" Environment="MINIO_ROOT_PASSWORD=$MINIO_ROOT_PASSWORD" Environment="MINIO_DOMAIN=$S3_HOST" ExecStart=/usr/local/bin/minio server /var/lib/minio/data --certs-dir /var/lib/minio/certs Restart=on-failure [Install] WantedBy=multi-user.target - name: Start and enable MinIO service ansible.builtin.systemd_service: name: minio daemon_reload: true state: started enabled: true - name: Add storage host names to /etc/hosts on the control VM ansible.builtin.lineinfile: path: /etc/hosts line: "$S3_IP $S3_HOST $S3_BUCKET.$S3_HOST" state: present - name: Wait for MinIO health endpoint ansible.builtin.uri: url: "https://$S3_HOST:9000/minio/health/live" ca_path: /var/lib/minio/certs/public.crt status_code: 200 register: minio_health until: minio_health.status == 200 retries: 6 delay: 5 - name: Create backup bucket and user in MinIO ansible.builtin.command: argv: "{{ item }}" loop: - - /usr/local/bin/mc - --insecure - alias - set - s3repo - "https://$S3_HOST:9000" - "$MINIO_ROOT_USER" - "$MINIO_ROOT_PASSWORD" - - /usr/local/bin/mc - --insecure - mb - --ignore-existing - "s3repo/$S3_BUCKET" - - /usr/local/bin/mc - --insecure - admin - user - add - s3repo - "$S3_ACCESS_KEY_ID" - "$S3_SECRET_ACCESS_KEY" - - /usr/local/bin/mc - --insecure - admin - policy - attach - s3repo - readwrite - --user - "$S3_ACCESS_KEY_ID" become: false no_log: true - name: Configure database VMs for MinIO hosts: primary_instance_nodes become: true gather_facts: false vars: ansible_user: $SSH_USER ansible_ssh_private_key_file: $HOME/ssh-key-cluster-sa tasks: - name: Set SELinux to permissive mode ansible.builtin.command: cmd: setenforce 0 - name: Add storage host names to /etc/hosts ansible.builtin.lineinfile: path: /etc/hosts line: "$S3_IP $S3_HOST $S3_BUCKET.$S3_HOST" state: present - name: Verify storage host resolution ansible.builtin.getent: database: hosts key: "$S3_BUCKET.$S3_HOST" - name: Verify connection to MinIO ansible.builtin.uri: url: "https://$S3_HOST:9000/minio/health/live" validate_certs: false status_code: 200 EOFMINIO_DOMAINמאפשר ל-MinIO לקבל בקשות בסגנון של מארח וירטואלי. הכלי לניהול הרשאות RPM משתמש במשתמשalloydb-backupכדי לכתוב את הגיבויים. המדיניותreadwriteהיא מדיניות מובנית של MinIO. - מריצים את הפלייבוק:
מוודאים שהפלט שלansible-playbook s3_server.yaml -i deployment_spec.yamlPLAY RECAPמציגfailed=0עבורlocalhostועבור כל מכונת VM של מסד נתונים. - מוודאים שהקטגוריה קיימת:
מוודאים שהפלט מציג את מאגרmc --insecure ls s3repoalloydb-backups/.
5. יצירת תוכנית גיבוי
תוכנית גיבוי מכילה את מיקום האחסון, את לוח הזמנים ואת תקופת השמירה של הגיבויים של אשכול. בשלב הזה יוצרים תוכנית גיבוי לקטגוריית MinIO.
- ב-VM של הבקרה, יוצרים את מדריך הגיבוי ואת מדריך הסטטוס. אתם משתמשים במדריך הגיבוי למשאבים
Secret,BackupPlanו-Backup. משתמשים ב-status playbook כדי להציג את הסטטוס של משאב.cat > backup.yaml <<EOF - name: Manage AlloyDB Omni backups hosts: localhost roles: - role: google.alloydbomni_orchestrator.backup EOF cat > status.yaml <<EOF - name: Get resource status hosts: localhost roles: - role: google.alloydbomni_orchestrator.status EOF - יוצרים משאב
Secretלפרטי הכניסה של S3. ואז מחילים את המשאב: שמות המפתחות בקטעS3_KEY_ID_B64=$(printf '%s' "$S3_ACCESS_KEY_ID" | base64 -w 0) S3_KEY_B64=$(printf '%s' "$S3_SECRET_ACCESS_KEY" | base64 -w 0) cat > s3_secret.yaml <<EOF Secret: metadata: name: s3-backup-secret spec: type: Opaque data: access-key-id: "$S3_KEY_ID_B64" access-key: "$S3_KEY_B64" EOF ansible-playbook backup.yaml -i deployment_spec.yaml \ -e resource_spec=s3_secret.yamldataצריכים להיותaccess-key-idו-access-key. צריך להחיל את משאבSecretלפני שמחילים את משאבBackupPlan. - יוצרים את המשאב
BackupPlanואז מחילים את המשאב: הערךcat > backup_plan.yaml <<EOF BackupPlan: metadata: name: s3-backup-plan spec: dbclusterRef: $CLUSTER backupLocation: type: S3 s3Options: bucket: $S3_BUCKET key: /backups endpoint: https://$S3_HOST:9000 region: $S3_REGION secretRef: name: s3-backup-secret caBundle: - | $(sed 's/^/ /' /var/lib/minio/certs/public.crt) EOF ansible-playbook backup.yaml -i deployment_spec.yaml \ -e resource_spec=backup_plan.yamlkeyהוא הנתיב של הגיבויים בקטגוריה. הנתיב הזה חייב להתחיל בלוכסן (/). השדהcaBundleמכיל את אישור ה-CA בקידוד PEM שמאמת את האישור של שרת האחסון ב-S3. - מוודאים שתוכנית הגיבוי מוכנה:
מוודאים שבשדהansible-playbook status.yaml -i deployment_spec.yaml \ -e resource_type=BackupPlan -e resource_name=s3-backup-planphaseמופיעReady. אם השלב לאReady, ממתינים דקה ומריצים את הפקודה שוב. - כשיוצרים תוכנית גיבוי, כלי התיאום של RPM מתחיל באופן אוטומטי גיבוי מלא ראשוני. ודא שהגיבוי הראשוני הזה הושלם לפני שתיצור גיבוי על פי דרישה:
מוודאים ששלב הגיבוי הראשוני מצליח.ansible-playbook status.yaml -i deployment_spec.yaml \ -e resource_type=Backup
6. יצירת גיבוי על פי דרישה
בשלב הזה יוצרים גיבוי על פי דרישה של האשכול.
- במכונה הווירטואלית של הבקרה, יוצרים את המשאב
Backup. ואז מחילים את המשאב: השדהcat > create_backup.yaml <<EOF Backup: metadata: name: s3-backup-1 spec: backupPlanRef: s3-backup-plan dbclusterRef: $CLUSTER EOF ansible-playbook backup.yaml -i deployment_spec.yaml \ -e resource_spec=create_backup.yamlbackupPlanRefהוא השם של תוכנית הגיבוי. השדהdbclusterRefהוא שם האשכול. - בודקים שהגיבוי הושלם:
מוודאים שבשדהansible-playbook status.yaml -i deployment_spec.yaml \ -e resource_type=Backup -e resource_name=s3-backup-1phaseמופיעSucceeded. אם השלב לאSucceeded, ממתינים דקה ומריצים את הפקודה שוב. - מוודאים שקבצי הגיבוי נמצאים בדלי:
מוודאים שהפלט מציג תיקייה בשםmc --insecure tree "s3repo/$S3_BUCKET"backupשמכילה תיקייה בשםdb.
7. שחזור האשכול מגיבוי
מתאם ה-RPM משחזר אשכול במקום. בשלב הזה, מוחקים טבלה ומשחזרים אותה מהגיבוי. אחר כך תוכלו לשחזר את האשכול לנקודת זמן מסוימת.
זהירות: פעולת שחזור מחליפה את כל הנתונים באשכול מסד הנתונים.
שחזור מהגיבוי
- במכונה הווירטואלית של קבוצת הבקרה, מוחקים את הטבלה
orders. אחר כך סופרים את השורות: מוודאים שהפקודה השנייה נכשלת עם שגיאה. בהודעת השגיאה מוצג שהקשר לא קיים. לדוגמה, 'ERROR: table "orders" does not exist'psql -c "DROP TABLE public.orders;" psql -c "SELECT pg_catalog.count(*) FROM public.orders;" - יוצרים את תוכנית הפעולה לשחזור:
cat > restore.yaml <<EOF - name: Restore AlloyDB Omni cluster hosts: localhost roles: - role: google.alloydbomni_orchestrator.restore EOF - יוצרים משאב
Restoreלגיבויs3-backup-1. ואז מחילים את המשאב:cat > restore_backup.yaml <<EOF Restore: metadata: name: s3-restore-1 spec: sourceDBCluster: $CLUSTER backup: s3-backup-1 EOF ansible-playbook restore.yaml -i deployment_spec.yaml \ -e resource_spec=restore_backup.yaml - מוודאים שפעולת השחזור הושלמה:
מוודאים שבשדהansible-playbook status.yaml -i deployment_spec.yaml \ -e resource_type=Restore -e resource_name=s3-restore-1phaseמופיעProvisionSucceeded. אם השלב לאProvisionSucceeded, ממתינים דקה ומריצים את הפקודה שוב. - ספירת השורות בטבלה המשוחזרת:
מוודאים שהפלט מציגpsql -c "SELECT pg_catalog.count(*) FROM public.orders;"1000.
(אופציונלי) שחזור לנקודת זמן מסוימת
שחזור לנקודת זמן מסוימת מתבצע באמצעות גיבוי ויומן WAL בארכיון. אפשר לשחזר את האשכול לכל נקודת זמן בחלון השחזור של תוכנית הגיבוי.
כללים לגבי שעת היעד
כדי לבחור את הערך והפורמט של שעת היעד, צריך לפעול לפי כל הכללים:
- משתמשים בפורמט RFC 3339 ב-UTC:
YYYY-MM-DDThh:mm:ssZ. לדוגמה,2026-06-19T14:30:00Zהוא 14:30:00 UTC ב-19 ביוני 2026. האותTמפרידה בין התאריך לבין השעה. האותZמציינת שעון UTC. - להשתמש בשעה שכבר עברה.
- משתמשים בזמן שמאוחר יותר מהערך
beginבשדהrecoveryWindowשל CRDBackupPlan.
כדי להציג את השעה הנוכחית בפורמט RFC 3339, מריצים את הפקודה הבאה:
date -u +%Y-%m-%dT%H:%M:%SZ
כדי לשנות שעה מקומית לפורמט הזה, מוסיפים את ההפרש משעון UTC של השעה המקומית לפקודה date. לדוגמה, הפקודה הבאה משנה את 16:30:00 ב-19 June 2026 בשעה UTC+02:00:
date -u -d "2026-06-19 16:30:00 +0200" +%Y-%m-%dT%H:%M:%SZ
הפקודה מחזירה 2026-06-19T14:30:00Z.
שחזור לשעת מדידה
בשלב הזה מוסיפים שורות לטבלה ומתעדים את הזמן. כשמקליטים זמן, מסמנים את הרגע המדויק שבו מסד הנתונים שלם לחלוטין (עם בדיוק 1,500 שורות).לאחר מכן מוחקים שורות ומשחזרים את האשכול לזמן המוקלט.
- הוספת 500 שורות לטבלה:
psql <<'SQL' INSERT INTO public.orders (id, item) SELECT g, 'item-' || g FROM pg_catalog.generate_series(1001, 1500) AS g; SQL - מציינים את השעה. בשלב הזה, הטבלה כוללת 1,500 שורות.
מוודאים שהפלט מציג שעה בפורמטsleep 5 PITR_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ) echo "export PITR_TIME=$PITR_TIME" >> ~/.codelab.env echo "$PITR_TIME" sleep 5YYYY-MM-DDThh:mm:ssZ, לדוגמה2026-10-05T11:16:02Z. - מוחקים שורות מהטבלה כדי לדמות מחיקה של נתונים בטעות. ואז מתחילים קובץ WAL חדש:
מוודאים ששאילתתpsql -c "DELETE FROM public.orders WHERE id > 1000;" psql -c "SELECT pg_catalog.count(*) FROM public.orders;" psql -c "SELECT pg_catalog.pg_switch_wal();"countמציגה1000. הפונקציהpg_switch_walגורמת לשרת להתחיל קובץ WAL חדש. לאחר מכן השרת יכול לארכב את קובץ ה-WAL שמכיל את השינויים. - מוודאים שחלון השחזור של תוכנית הגיבוי כולל את הזמן שתועד:
מוודאים שהערךtest -n "$PITR_TIME" || { echo "PITR_TIME is not set. Run step 2 again."; exit 1; } echo "$PITR_TIME" ansible-playbook status.yaml -i deployment_spec.yaml \ -e resource_type=BackupPlan -e resource_name=s3-backup-planPITR_TIMEמאוחר מהערךbeginבשדהrecoveryWindow. - יוצרים משאב
Restoreלזמן המוקלט. ואז מחילים את המשאב:cat > restore_pitr.yaml <<EOF Restore: metadata: name: s3-restore-pitr spec: sourceDBCluster: $CLUSTER pointInTime: "$PITR_TIME" EOF ansible-playbook restore.yaml -i deployment_spec.yaml \ -e resource_spec=restore_pitr.yaml - מוודאים שפעולת השחזור הושלמה:
מוודאים שבשדהansible-playbook status.yaml -i deployment_spec.yaml \ -e resource_type=Restore -e resource_name=s3-restore-pitrphaseמופיעProvisionSucceeded. אם השלב לאProvisionSucceeded, ממתינים דקה ומריצים את הפקודה שוב. - ספירת השורות:
מוודאים שהפלט מציגpsql -c "SELECT pg_catalog.count(*) FROM public.orders;"1500.
8. הסרת המשאבים
כדי להימנע מחיובים בחשבון Google Cloud, צריך למחוק את המשאבים של ה-Codelab הזה ושל ה-Codelab Deploy AlloyDB Omni high availability cluster on GCE VMs using RPM Orchestrator. קודם מוחקים את משאבי הגיבוי, ואז מוחקים את האשכול ואת סביבת המחשוב.
- ב-VM של הבקרה, יוצרים את פלייבוק המחיקה:
cat > delete.yaml <<EOF - name: Delete AlloyDB Omni resources hosts: localhost roles: - role: google.alloydbomni_orchestrator.delete EOF - מציינים את הגיבויים:
מוודאים שהפלט מציג את הגיבוי שלansible-playbook status.yaml -i deployment_spec.yaml -e resource_type=Backups3-backup-1. - מחיקת הגיבוי של
s3-backup-1:ansible-playbook delete.yaml -i deployment_spec.yaml \ -e resource_type=Backup -e resource_name=s3-backup-1 - מחיקת תוכנית הגיבוי:
ansible-playbook delete.yaml -i deployment_spec.yaml \ -e resource_type=BackupPlan -e resource_name=s3-backup-plan - מוחקים את האשכול ואת סביבת המחשוב באמצעות השלב Clean up Resources (ניקוי משאבים) מתוך שיעור ה-Codelab Deploy AlloyDB Omni high availability cluster on GCE VMs using RPM Orchestrator (פריסת אשכול זמינות גבוהה של AlloyDB Omni במכונות וירטואליות של GCE באמצעות RPM Orchestrator). שרת MinIO והגיבויים שבו נמצאים במכונה הווירטואלית של הבקרה. כשמוחקים את סביבת המחשוב, נמחקים גם השרת וגם הגיבויים.
9. מזל טוב
מעולה. ביצעתם גיבוי של אשכול לזמינות גבוהה (HA) למאגר אובייקטים שתואם ל-S3 עבור AlloyDB Omni באמצעות כלי התזמור RPM. לאחר מכן שחזרתם את האשכול מהגיבויים.
מה למדנו
- איך מתקינים ומריצים את MinIO כמאגר אובייקטים שתואם ל-S3.
- איך יוצרים תוכנית גיבוי וגיבוי על פי דרישה.
- איך משחזרים אשכול מגיבוי ומנקודת זמן מסוימת.
מידע נוסף זמין בדפים הבאים: