alloydbctl 和 Ansible 与 pgBackRest 和 Cloud Storage 进行交互,以管理备份。
AlloyDB Omni 通过自定义资源定义 (CRD) 管理备份:
BackupPlan:每个数据库集群都可以有一个或多个具有不同配置和时间表的BackupPlanCRD。Backup:根据您的BackupPlanCRD 启动备份。
准备工作
在设置和配置 pgBackRest 之前,请确保您拥有以下内容:
- Cloud Storage 存储桶: AlloyDB Omni 将备份存储在 Cloud Storage 存储分区中。如需了解如何创建存储桶,请参阅 创建存储桶。
创建备份方案
如需创建备份方案,请完成以下步骤:
使用以下格式创建
BackupPlanCRD:BackupPlan: metadata: name: BACKUP_PLAN_NAME spec: dbclusterRef: DBCLUSTER_NAME backupLocation: type: GCS gcsOptions: bucket: BUCKET_NAME key: BUCKET_FOLDER执行以下变量替换操作:
如果您使用的是 Ansible,请为您的
BackupPlanCRD 创建一个策略方案。- name: BACKUP_PLAN_PLAYBOOK_NAME hosts: localhost vars: ansible_user: ANSIBLE_USER ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE ansible_become: true roles: - role: google.alloydbomni_orchestrator.backup执行以下变量替换操作:
BACKUP_PLAN_PLAYBOOK_NAME:Ansible 策略方案的名称。例如,My BackupPlan。ANSIBLE_USER:Ansible 用于登录 AlloyDB Omni 节点的操作系统用户。ANSIBLE_SSH_PRIVATE_KEY_FILE:Ansible 用于使用 SSH 连接到 AlloyDB Omni 节点的私钥。
应用
BackupPlan资源。alloydbctlalloydbctl apply -d "DEPLOYMENT_SPEC" -r "BACKUP_PLAN_CRD"执行以下变量替换操作:
DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。BACKUP_PLAN_CRD:您在第一步中创建的BackupPlanCRD 的路径。
Ansible
ansible-playbook BACKUP_PLAN_PLAYBOOK -i "DEPLOYMENT_SPEC" \ -e resource_spec="BACKUP_PLAN_CRD"执行以下变量替换操作:
BACKUP_PLAN_PLAYBOOK:您在第二步中为BackupPlanCRD 创建的策略方案的路径。DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。BACKUP_PLAN_CRD:您在第一步中创建的BackupPlanCRD 的路径。
确认
BackupPlanCRD 的状态字段status.phase为Ready。如果 CRD 未准备就绪,请等待其准备就绪。alloydbctlalloydbctl get -d "DEPLOYMENT_SPEC" -t BackupPlan -n BACKUP_PLAN_NAME -o yamlAnsible
ansible-playbook status.yaml -i "DEPLOYMENT_SPEC" -e resource_type=BackupPlan \ -e resource_name=BACKUP_PLAN_NAME
删除备份方案
如需删除备份方案,请使用以下任一方法:
alloydbctl
alloydbctl delete -d "DEPLOYMENT_SPEC" -t BackupPlan -n BACKUP_PLAN_NAME执行以下变量替换操作:
DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。BACKUP_PLAN_NAME:要删除的BackupPlanCRD 的名称。
Ansible
创建一个用于删除
BackupPlanCRD 的策略方案。- name: BACKUP_PLAN_DELETE_PLAYBOOK_NAME hosts: localhost vars: ansible_user: ANSIBLE_USER ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE ansible_become: true roles: - role: google.alloydbomni_orchestrator.delete执行以下变量替换操作:
BACKUP_PLAN_DELETE_PLAYBOOK_NAME:Ansible 策略方案的名称。ANSIBLE_USER:Ansible 用于登录 AlloyDB Omni 节点的操作系统用户。ANSIBLE_SSH_PRIVATE_KEY_FILE:Ansible 用于使用 SSH 连接到 AlloyDB Omni 节点的私钥。
运行
ansible-playbook以删除BackupPlanCRD。ansible-playbook BACKUP_PLAN_DELETE_PLAYBOOK_NAME -i "DEPLOYMENT_SPEC" -e resource_type=BackupPlan \ -e resource_name=BACKUP_PLAN_NAME执行以下变量替换操作:
BACKUP_PLAN_DELETE_PLAYBOOK_NAME:您在上一步中为删除BackupPlanCRD 而创建的策略方案的路径。DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。BACKUP_PLAN_NAME:要删除的BackupPlanCRD 的名称。
创建备份
如需创建和启动备份,请完成以下步骤:
使用以下格式创建
BackupCRD:Backup: metadata: name: BACKUP_NAME spec: backupPlanRef: BACKUP_PLAN_NAME dbclusterRef: DBCLUSTER_NAME执行以下变量替换操作:
BACKUP_NAME:此BackupCRD 的名称。例如,my-backup-1。BACKUP_PLAN_NAME:此BackupPlanCRD 的名称。例如,my-backup-plan-1。DBCLUSTER_NAME: 您在 创建集群中定义的数据库集群的名称。
如果您使用的是 Ansible,请为您的
BackupCRD 创建一个策略方案。- name: BACKUP_PLAYBOOK_NAME hosts: localhost vars: ansible_user: ANSIBLE_USER ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE ansible_become: true roles: - role: google.alloydbomni_orchestrator.backup执行以下变量替换操作:
BACKUP_PLAYBOOK_NAME:Ansible 策略方案的名称。例如,My Backup。ANSIBLE_USER:Ansible 用于登录 AlloyDB Omni 节点的操作系统用户。ANSIBLE_SSH_PRIVATE_KEY_FILE:Ansible 用于使用 SSH 连接到 AlloyDB Omni 节点的私钥。
应用
BackupCRD。alloydbctlalloydbctl apply -d "DEPLOYMENT_SPEC" -r "BACKUP_CRD"执行以下变量替换操作:
DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。BACKUP_CRD:您在第一步中创建的BackupCRD 的路径。
Ansible
ansible-playbook BACKUP_PLAYBOOK -i "DEPLOYMENT_SPEC" \ -e resource_spec="BACKUP_CRD"执行以下变量替换操作:
BACKUP_PLAYBOOK:您在第二步中为BackupCRD 创建的策略方案的路径。DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。BACKUP_CRD:您在第一步中创建的BackupCRD 的路径。
确认
BackupCRD 的状态字段status.phase为Succeeded。如果 CRD 未成功,请等待其成功。alloydbctlalloydbctl get -d "DEPLOYMENT_SPEC" -t Backup -n BACKUP_NAME -o yamlAnsible
ansible-playbook status.yaml -i "DEPLOYMENT_SPEC" -e resource_type=Backup \ -e resource_name=BACKUP_NAME通过在存储桶中搜索
/backup/db,确认备份文件已存放在 Cloud Storage 存储桶中 。
删除备份
如需删除备份,请运行以下命令之一:
alloydbctl
alloydbctl delete -d "DEPLOYMENT_SPEC" -t Backup -n BACKUP_NAME执行以下变量替换操作:
DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。BACKUP_NAME:要删除的BackupCRD 的名称。
Ansible
创建一个用于删除
BackupCRD 的策略方案。- name: BACKUP_DELETE_PLAYBOOK_NAME hosts: localhost vars: ansible_user: ANSIBLE_USER ansible_ssh_private_key_file: ANSIBLE_SSH_PRIVATE_KEY_FILE ansible_become: true roles: - role: google.alloydbomni_orchestrator.delete执行以下变量替换操作:
Delete Backup:Ansible 策略方案的名称。ANSIBLE_USER:Ansible 用于登录 AlloyDB Omni 节点的操作系统用户。ANSIBLE_SSH_PRIVATE_KEY_FILE:Ansible 用于使用 SSH 连接到 AlloyDB Omni 节点的私钥。
运行
ansible-playbook以删除BackupCRD。ansible-playbook DELETE_BACKUP_PLAYBOOK -i "DEPLOYMENT_SPEC" -e resource_type=Backup \ -e resource_name=BACKUP_NAME执行以下变量替换操作:
DELETE_BACKUP_PLAYBOOK:您在上一步中为删除BackupCRD 而创建的策略方案的路径。DEPLOYMENT_SPEC: 您在 安装 AlloyDB Omni 组件中创建的部署规范的路径。BACKUP_NAME:要删除的BackupCRD 的名称。
使用备份进行恢复
如需将备份中的数据恢复到数据库集群中,请完成以下任一组说明:
在独立集群中恢复。
高可用性集群
如需为高可用性数据库集群恢复数据,请完成以下说明:
如果
DBCluster规范文件中将availability.enableAutoFailover和availability.enableAutoHeal设置为true,请将其设置为false。DBCluster: metadata: my-db-cluster name: spec: databaseVersion: 18.1.0 mode: "" availability: ... enableAutoFailover: false enableAutoHeal: false ...通过显示每个数据库节点上的
db-role文件的内容来识别主节点。主节点包含DATABASE_ROLE_PRIMARY。sudo cat /var/lib/alloydbomni/nm/kvstore/db-role如需为多个节点自动执行此过程并将结果输出到控制节点,请参阅以下 Shell 脚本。
SSH_USER=SSH_USER DB_NODES="DB_NODES" SSH_OPTIONS="SSH_OPTIONS" DB_ROLE=/var/lib/alloydbomni/nm/kvstore/db-role for node in $DB_NODES; do ssh $SSH_OPTIONS ${SSH_USER}@${node} "hostname ; sudo cat ${DB_ROLE}; echo" done执行以下变量替换操作:
SSH_USER:用于连接到数据库节点的 SSH 用户。DB_NODES:以空格分隔的数据库节点的主机名或 IP 地址列表。SSH_OPTIONS:用于连接到数据库节点的 SSH 选项。例如,"-o StrictHostKeyChecking=no -o BatchMode=yes -o ConnectTimeout=5"。
停止所有数据库节点上的 AlloyDB Omni 服务。
sudo systemctl stop alloydbomni18在每个备用节点上,删除数据目录的内容。
sudo rm -rf PGDATA_DIR将
PGDATA_DIR替换为数据目录的路径。这是在名称为DataDisk的DBCluster资源的primarySpec.resources.disks字段中定义的值。在主节点上,执行
pgbackrest命令以从备份恢复。该示例展示了如何通过切换到postgres用户来执行。sudo -u postgres pgbackrest restore \ --log-level-console=info \ --stanza=db \ --delta \ --target-action=promote \ --type=immediate \ --set=BACKUP_ID将
BACKUP_ID替换为备份标识符。您可以在BackupCRD 的status.backupID字段中找到此值。在主节点上启动 AlloyDB Omni 服务。
sudo systemctl start alloydbomni18确认 AlloyDB Omni 服务状态为
active。如果未处于活跃状态,请等待其处于活跃状态。sudo systemctl status alloydbomni18通过从
PGDATA_DIR/PG_VERSION/db/postgresql.auto.conf中移除以下 GUC,在主节点上重置这些 GUC:restore_commandrecovery_targetrecovery_target_actionrecovery_target_timeline
sudo sed -i '/^\(restore_command\|recovery_target\|recovery_target_action\|recovery_target_timeline\)/d' PGDATA_DIR/PG_VERSION/db/postgresql.auto.conf执行以下变量替换操作:
- 将
PGDATA_DIR替换为数据目录的路径。这是在名称为DataDisk的DBCluster资源的primarySpec.resources.disks字段中定义的值。 - 将
PG_VERSION替换为 AlloyDB Omni 安装的主要 PostgreSQL 版本,例如18。
将
availability.enableAutoFailover或availability.enableAutoHeal更新为true,以恢复备用节点上的数据库服务,使其处于活跃状态并与主节点上的数据库服务同步。确认每个备用节点上的 AlloyDB Omni 服务处于
active状态。
独立集群
停止 AlloyDB Omni 服务并屏蔽它,以防止重启。
sudo systemctl stop alloydbomni18sudo systemctl mask alloydbomni18运行
pgbackrest命令以从备份恢复。sudo -u postgres pgbackrest restore \ --log-level-console=info \ --stanza=db \ --delta \ --target-action=promote \ --type=immediate \ --set=BACKUP_ID将
BACKUP_ID替换为备份标识符。取消屏蔽并启动 AlloyDB Omni 服务。
sudo systemctl unmask alloydbomni18sudo systemctl start alloydbomni18验证服务是否正在运行。
sudo systemctl status alloydbomni18
限制
存在以下限制:
仅支持 Cloud Storage 存储分区来备份数据和从中恢复数据。
BackupCRD 支持创建类型为"full"的备份。不支持其他类型,即"incr"和"diff"。不支持计划备份。如需配置计划备份,请使用您选择的自动化系统自动创建
Backup规范。不支持自动恢复。您必须按照手动说明恢复数据。
如需删除备份,请删除
BackupCRD。删除
BackupPlanCRD 不会删除该方案已创建的BackupCRD。如需移除这些备份,请按照删除备份中所述,单独删除每个Backup资源。