Как создать резервную копию AlloyDB Omni и восстановить ее из хранилища, совместимого с S3, с помощью оркестратора RPM

1. Введение

В этой практической работе рассказывается, как создать резервную копию кластера с высокой доступностью в совместимом с S3 хранилище объектов для AlloyDB Omni с помощью оркестратора RPM.

В этой практической работе используется кластер из практической работы Развертывание кластера высокой доступности AlloyDB Omni на виртуальных машинах GCE с помощью оркестратора RPM для создания кластера высокой доступности на виртуальных машинах Compute Engine. В этой практической работе вы добавите на одну из ВМ сервер хранения объектов, совместимый с S3. Сервер хранения объектов используется для резервного копирования данных кластера высокой доступности и восстановления кластера с сервера.

Cloud Shell подключается к управляющей ВМ. На управляющей ВМ запущены Ansible и MinIO. psql подключается к кластеру через виртуальный IP-адрес ВМ HAProxy. Виртуальные машины базы данных отправляют резервные копии в MinIO через порт 9000.

Требования

  • Проект Google Cloud с включенной оплатой.
  • Роли IAM, указанные в практической работе по обеспечению высокой доступности.
  • Базовые знания команд Linux и SQL.

Что вы узнаете

  • Как установить и запустить сервер объектного хранилища, совместимый с S3, для резервных копий.
  • Как создать план резервного копирования, который записывает резервные копии в хранилище, совместимое с S3.
  • Как создать резервную копию по запросу.
  • Как восстановить кластер из резервной копии на определенный момент времени.

Что вам понадобится

2. Настройка и требования

  1. На этом шаге вы создадите кластер с высокой доступностью, используя практическую работу Deploy AlloyDB Omni high availability cluster on GCE VMs using RPM Orchestrator (Развертывание кластера с высокой доступностью AlloyDB Omni на виртуальных машинах GCE с помощью оркестратора RPM). Выполните следующие действия: Если у вас уже есть кластер из лаборатории, перейдите к следующему шагу.
  2. Примечание. Не выполняйте очистку ресурсов на этом этапе. Вы выполните этот шаг в конце практической работы.
  3. Вернуться к этой практической работе

3. Как подключиться к кластеру и добавить примеры данных

На этом шаге вы загрузите настройки кластера на управляющую виртуальную машину. Затем вы подключаетесь к кластеру и добавляете таблицу с образцами данных.

  1. Если вы не подключены к управляющей ВМ, подключитесь к ней из Cloud Shell:
    gcloud compute ssh "$CLUSTER-control" --zone="$ZONE" --project="$PROJECT"
    
    Переменные CLUSTER, ZONE и PROJECT взяты из шага Подготовьте виртуальные машины к развертыванию практической работы Развертывание кластера AlloyDB Omni с высокой доступностью на виртуальных машинах GCE с помощью оркестратора RPM. Если в Cloud Shell нет этих переменных, задайте их снова.
  2. На управляющей виртуальной машине перейдите в домашний каталог и загрузите переменные среды. Затем добавьте название кластера и пользователя 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.
  3. Добавьте настройки подключения в файл среды. Когда команда read запросит пароль, введите пароль пользователя postgres. Вы задаете этот пароль на шаге Bootstrap AlloyDB Omni Cluster (Загрузка кластера AlloyDB Omni) в практической работе Deploy AlloyDB Omni high availability cluster on GCE VMs using RPM Orchestrator (Развертывание кластера AlloyDB Omni с высокой доступностью на виртуальных машинах GCE с помощью оркестратора RPM).
    cat >> ~/.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)='
    
  4. Создайте таблицу и добавьте 1000 строк:
    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
    
  5. Посчитайте строки:
    psql -c "SELECT pg_catalog.count(*) FROM public.orders;"
    
    Убедитесь, что в выходных данных возвращается значение 1000.

4. Как установить и запустить хранилище объектов, совместимое с S3

На этом шаге вы напишете плейбук Ansible, который установит сервер MinIO на управляющей виртуальной машине. Плейбук также создает сегмент и пользователя для резервных копий и обеспечивает подключение ВМ базы данных к MinIO. Выполните все команды на управляющей виртуальной машине.

  1. На управляющей виртуальной машине добавьте настройки хранилища в файл среды. Команды openssl позволяют создавать случайные пароли.
    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"
    
    Убедитесь, что в выходных данных указаны имя и внутренний IP-адрес управляющей виртуальной машины, например my-cluster-control 10.1.0.2. Виртуальные машины базы данных используют это имя хоста и IP-адрес для подключения к MinIO. IP-адрес предоставляет сервер метаданных виртуальной машины. Дополнительную информацию можно найти в документации по метаданным ВМ.Значения MINIO_URL и MC_URL – это URL для скачивания сервера MinIO и клиента MinIO (mc).
  2. Установите на управляющей ВМ необходимую коллекцию Ansible community.crypto:
    ansible-galaxy collection install community.crypto
    
  3. Создайте руководство по 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
    EOF
    
    Переменная MINIO_DOMAIN позволяет MinIO принимать запросы в стиле виртуального хоста. Оркестратор RPM использует пользователя alloydb-backup для записи резервных копий. Правило readwrite – это встроенное правило MinIO.
  4. Запустите сценарий:
    ansible-playbook s3_server.yaml -i deployment_spec.yaml
    
    Убедитесь, что в выходных данных команды PLAY RECAP для localhost и каждой виртуальной машины базы данных указано значение failed=0.
  5. Убедитесь, что сегмент существует:
    mc --insecure ls s3repo
    
    Убедитесь, что в выходных данных указана корзина alloydb-backups/.

5. Как создать план резервного копирования

План резервного копирования содержит информацию о месте хранения, расписании и периоде хранения резервных копий кластера. На этом этапе вы создадите план резервного копирования для сегмента MinIO.

  1. На управляющей ВМ создайте плейбук резервного копирования и плейбук статуса. Вы используете резервный план для ресурсов Secret, BackupPlan и Backup. Статус ресурса можно посмотреть в плейбуке статуса.
    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
    
  2. Создайте ресурс 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.yaml
    
    Названия ключей в разделе data должны быть access-key-id и access-key. Ресурс Secret необходимо применить до ресурса BackupPlan.
  3. Создайте ресурс 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.yaml
    
    Значение key – это путь к резервным копиям в сегменте. Путь должен начинаться с косой черты (/). В поле caBundle содержится сертификат ЦС в кодировке PEM, который проверяет сертификат сервера хранилища S3.
  4. Убедитесь, что план резервного копирования готов:
    ansible-playbook status.yaml -i deployment_spec.yaml \
        -e resource_type=BackupPlan -e resource_name=s3-backup-plan
    
    Убедитесь, что в поле phase указано значение Ready. Если фаза не Ready, подождите минуту и снова выполните команду.
  5. После создания резервного плана оркестратор RPM автоматически запускает первоначальное полное резервное копирование. Убедитесь, что первоначальное копирование в облако завершено, прежде чем создавать резервную копию по запросу:
    ansible-playbook status.yaml -i deployment_spec.yaml \
        -e resource_type=Backup
    
    Убедитесь, что начальный этап резервного копирования выполнен успешно.

6. Как создать резервную копию по запросу

На этом этапе вы создадите резервную копию кластера по запросу.

  1. На управляющей ВМ создайте ресурс 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.yaml
    
    Поле backupPlanRef – это название плана резервного копирования. Поле dbclusterRef – это название кластера.
  2. Убедитесь, что копирование в облако завершено:
    ansible-playbook status.yaml -i deployment_spec.yaml \
        -e resource_type=Backup -e resource_name=s3-backup-1
    
    Убедитесь, что в поле phase указано значение Succeeded. Если фаза не Succeeded, подождите минуту и снова выполните команду.
  3. Убедитесь, что файлы резервных копий находятся в сегменте:
    mc --insecure tree "s3repo/$S3_BUCKET"
    
    Убедитесь, что в выходных данных есть папка backup, в которой находится папка db.

7. Как восстановить кластер из резервной копии

Оркестратор RPM восстанавливает кластер на месте. На этом шаге вы удалите таблицу и восстановите ее из резервной копии. Затем при необходимости можно восстановить кластер на определенный момент времени.

Внимание! При восстановлении все данные в кластере базы данных будут перезаписаны.

Восстановить из резервной копии

  1. На управляющей виртуальной машине удалите таблицу orders. Затем посчитайте строки:
    psql -c "DROP TABLE public.orders;"
    psql -c "SELECT pg_catalog.count(*) FROM public.orders;"
    
    Убедитесь, что вторая команда завершается с ошибкой. В сообщении об ошибке указано, что связь не существует. Пример: "ERROR: table "orders" does not exist' (ОШИБКА: таблица "orders" не существует).
  2. Создайте руководство по восстановлению:
    cat > restore.yaml <<EOF
    - name: Restore AlloyDB Omni cluster
      hosts: localhost
      roles:
        - role: google.alloydbomni_orchestrator.restore
    EOF
    
  3. Создайте ресурс 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
    
  4. Убедитесь, что восстановление завершено:
    ansible-playbook status.yaml -i deployment_spec.yaml \
        -e resource_type=Restore -e resource_name=s3-restore-1
    
    Убедитесь, что в поле phase указано значение ProvisionSucceeded. Если фаза не ProvisionSucceeded, подождите минуту и снова выполните команду.
  5. Посчитайте строки в восстановленной таблице:
    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 файла CRD BackupPlan.

Чтобы посмотреть текущее время в формате RFC 3339, выполните следующую команду:

date -u +%Y-%m-%dT%H:%M:%SZ

Чтобы преобразовать местное время в этот формат, добавьте к команде date смещение UTC. Например, следующая команда изменяет значение параметра 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.

Как восстановить данные на определенный момент времени

В этой процедуре вы добавите строки в таблицу и запишете время. Когда вы записываете время, вы добавляете в закладки точный момент,когда база данных полностью исправна (содержит ровно 1500 строк).Затем вы удаляете строки и восстанавливаете кластер до записанного времени.

  1. Добавьте в таблицу 500 строк:
    psql <<'SQL'
    INSERT INTO public.orders (id, item)
    SELECT g, 'item-' || g FROM pg_catalog.generate_series(1001, 1500) AS g;
    SQL
    
  2. Запишите время. В таблице 1500 строк.
    sleep 5
    PITR_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)
    echo "export PITR_TIME=$PITR_TIME" >> ~/.codelab.env
    echo "$PITR_TIME"
    sleep 5
    
    Убедитесь, что в выходных данных указано время в формате YYYY-MM-DDThh:mm:ssZ, например 2026-10-05T11:16:02Z.
  3. Удалите строки из таблицы, чтобы имитировать случайное удаление данных. Затем запустите новый файл 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, содержащий ваши изменения.
  4. Убедитесь, что в окне восстановления плана резервного копирования указано время записи:
    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-plan
    
    Убедитесь, что значение PITR_TIME указано после значения begin в поле recoveryWindow.
  5. Создайте ресурс 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
    
  6. Убедитесь, что восстановление завершено:
    ansible-playbook status.yaml -i deployment_spec.yaml \
        -e resource_type=Restore -e resource_name=s3-restore-pitr
    
    Убедитесь, что в поле phase указано значение ProvisionSucceeded. Если фаза не ProvisionSucceeded, подождите минуту и снова выполните команду.
  7. Посчитайте строки:
    psql -c "SELECT pg_catalog.count(*) FROM public.orders;"
    
    Убедитесь, что в выходных данных указано 1500.

8. Очистка

Чтобы избежать списания средств с аккаунта Google Cloud, удалите ресурсы из этой практической работы и практической работы по развертыванию кластера высокой доступности AlloyDB Omni на виртуальных машинах GCE с помощью оркестратора RPM. Сначала удалите ресурсы резервных копий, а затем кластер и вычислительную среду.

  1. На виртуальной машине управления создайте сценарий удаления:
    cat > delete.yaml <<EOF
    - name: Delete AlloyDB Omni resources
      hosts: localhost
      roles:
        - role: google.alloydbomni_orchestrator.delete
    EOF
    
  2. Чтобы посмотреть список резервных копий:
    ansible-playbook status.yaml -i deployment_spec.yaml -e resource_type=Backup
    
    Убедитесь, что в выходных данных указана резервная копия s3-backup-1.
  3. Чтобы удалить резервную копию s3-backup-1:
    ansible-playbook delete.yaml -i deployment_spec.yaml \
        -e resource_type=Backup -e resource_name=s3-backup-1
    
  4. Удалите план резервного копирования:
    ansible-playbook delete.yaml -i deployment_spec.yaml \
        -e resource_type=BackupPlan -e resource_name=s3-backup-plan
    
  5. Удалите кластер и вычислительную среду, выполнив шаг Clean up Resources (Удаление ресурсов) из практической работы Deploy AlloyDB Omni high availability cluster on GCE VMs using RPM Orchestrator (Развертывание кластера высокой доступности AlloyDB Omni на виртуальных машинах GCE с помощью оркестратора RPM). Сервер MinIO и его резервные копии находятся на контрольной ВМ. При удалении вычислительной среды удаляются и сервер, и резервные копии.

9. Поздравляю!

Поздравляем! Вы создали резервную копию кластера с высокой доступностью в объектном хранилище, совместимом с S3, для AlloyDB Omni с помощью оркестратора RPM. Затем вы восстановили кластер из резервных копий.

Что мы обсудили

  • Как установить и запустить MinIO в качестве хранилища объектов, совместимого с S3.
  • Как создать план резервного копирования и выполнить резервное копирование по запросу.
  • Как восстановить кластер из резервной копии на определенный момент времени.

Подробную информацию можно найти в следующих статьях:

10. Опрос

Как вы будете использовать это руководство?

Просто прочитайте Прочитайте и выполните упражнения