10장. 백업 및 복원

중요
  • 백업과 동일한 작동 이미지 버전으로 복원해야 합니다.
  • Ansible Automation Platform 배포를 백업하고 복원하려면 기존 Ansible Automation Platform 관리 시크릿 이름과 값을 안전한 곳에 보관해야 합니다.
  • 또한 Cloud SQL 데이터베이스 인스턴스 및 파일 저장소 백업의 정기적인 수동 백업을 수행하여 배포가 이전 작동 상태에 최대한 가깝게 복원할 수 있도록 하는 것이 중요합니다.

Playbook 백업 및 복원은 GCP Marketplace 기반 배포에서 Ansible Automation Platform에 대한 백업 및 복원 지원을 제공합니다.

참고

복원 프로세스는 파일 저장소 및 SQL 데이터베이스 인스턴스가 지정된 백업으로 복원되는 새로운 Ansible Automation Platform을 배포합니다.

10.1. 백업 프로세스

백업을 사용하면 데이터베이스와 공유 파일 시스템을 저장하여 환경을 백업할 수 있습니다. 저장된 공유 파일 시스템을 사용하여 복원 중에 새 환경이 생성됩니다. 새 환경이 배치되면 프로세스는 데이터베이스를 복원합니다.

백업 및 복원 프로세스에서는 동일한 버전을 사용해야 합니다. 이전 버전으로 백업을 수행한 경우 해당 버전의 복원 프로세스를 사용해야 합니다. 필요한 경우 업그레이드를 실행할 수 있습니다.

또한 업그레이드하기 전에 백업을 수행해야 합니다. 자세한 내용은 배포 업그레이드를 참조하십시오.

백업 프로세스에는 지정된 시점에서 Cloud SQL 데이터베이스 및 파일 저장소 인스턴스의 백업을 수행해야 합니다. 백업 플레이북에는 GCP Marketplace 기반 배포의 활성 Ansible Automation Platform이 실행되고 있어야 합니다.

복원 정보가 해당 버킷에 저장되므로 프로젝트에 버킷을 생성해야 합니다.

버킷은 동일한 배포 또는 다른 배포에서 여러 백업을 포함할 수 있습니다. 백업은 <prefix>-<deployment_name>-<timestamp>라는 디렉토리와 <prefix>-<deployment_name>-<timestamp>.json이라는 파일을 생성합니다. 디렉터리에는 awx 및 pulp 데이터베이스 백업, 배포 구성 및 시크릿이 포함되어 있습니다. json 파일에는 복원 절차에 대한 정보가 포함되어 있습니다.

CLI를 통해 플레이북이 제공되어 백업을 나열하고 삭제합니다.

다음 절차에서는 GCP Marketplace 배포에서 Ansible Automation Platform을 백업하는 방법을 설명합니다.

10.1.1. ansible-on-clouds-ops 컨테이너 이미지 가져오기

절차

  • 기본 배포와 동일한 태그를 사용하여 ansible-on-clouds-ops 컨테이너의 Docker 이미지를 가져옵니다.

    참고

    docker 이미지를 가져오기 전에 docker를 사용하여 registry.redhat.io에 로그인했는지 확인합니다. 다음 명령을 사용하여 registry.redhat.io에 로그인합니다.

    $ docker login registry.redhat.io

    레지스트리 로그인에 대한 자세한 내용은 레지스트리 인증을 참조하십시오.

    $ export IMAGE=registry.redhat.io/ansible-on-clouds/ansible-on-clouds-ops-rhel9:2.4.20230630
    $ docker pull $IMAGE --platform=linux/amd64

10.1.2. 필요한 권한

스택을 백업하려면 다음 GCP IAM 권한이 있어야 합니다.

required-roles:

Service Account User
Compute Instance Admin (v1)
required-permissions:

compute.instances.list
deploymentmanager.deployments.get
deploymentmanager.manifests.get
deploymentmanager.manifests.list
deploymentmanager.resources.list
file.backups.create
file.operations.get
iap.tunnelInstances.accessViaIAP
storage.objects.create
storage.objects.list

10.1.3. 환경 설정

절차

  • 구성 파일을 저장할 폴더를 생성합니다.

    $ mkdir command_generator_data

10.1.4. 백업 요구 사항

클라우드 배포 백업에 Ansible을 저장하려면 버킷을 생성해야 합니다. 버킷에는 백업 정보, 시크릿 및 데이터베이스 백업이 포함되어 있습니다.

절차

  1. Google Cloud 콘솔에서 Cloud StorageBuckets로 이동합니다.
  2. 프로젝트를 선택합니다.
  3. 생성을 클릭합니다.
  4. 이름을 입력합니다.
  5. 가장 요구 사항에 맞는 데이터 위치를 입력합니다. 멀티 및 듀얼 리전을 사용하면 다른 지역으로의 복원을 실행할 수 있습니다.
  6. 요구 사항에 가장 적합한 스토리지 클래스를 입력합니다.
  7. 요구 사항에 가장 적합한 제어 액세스를 입력합니다.
  8. 가장 많은 요구 사항에 맞는 데이터 보호를 입력합니다.
  9. 생성을 클릭합니다.

문제 해결

버킷 이름이 다른 프로젝트에서 이미 사용된 경우 오류가 발생합니다.

10.1.5. 백업 데이터 파일 생성

절차

  1. generator command_generator_vars 명령을 실행하여 backup.yml 을 생성합니다.

    참고

    Linux에서 명령 생성기가 생성한 모든 파일 또는 디렉터리는 기본적으로 root:root 에 의해 소유됩니다. 파일과 디렉터리의 소유권을 변경하려면 파일이 생성된 후 sudo chmod 명령을 실행할 수 있습니다. 자세한 내용은 root가 소유한 명령 생성기 - Linux 파일을 참조하십시오.

    docker run --rm -v $(pwd)/command_generator_data/:/data $IMAGE command_generator_vars gcp_backup_deployment --output-data-file /data/backup.yml
  2. 명령을 실행하면 $(pwd)/command_generator_data/backup.yml 템플릿 파일이 생성됩니다. 이 템플릿 파일은 다음과 유사합니다.

    gcp_backup_deployment:
      cloud_credentials_path:
      deployment_name:
      extra_vars:
        backup_prefix: aoc-backup
        gcp_bucket_backup_name:
        gcp_compute_region:
        gcp_compute_zone:

10.1.6. backup.yml 파일의 매개변수

백업을 트리거하기 전에 데이터 파일을 채워야 합니다. 다음 변수는 데이터 파일에 나열된 매개 변수입니다.

  • cloud_credentials_path 는 Google Cloud 서비스 계정 자격 증명 파일의 경로입니다. 이는 절대 경로여야 합니다.
  • deployment_name 은 백업하려는 AAP 배포 관리자 배포의 이름입니다.
  • backup_prefix 는 백업 이름에 추가할 접두사입니다(기본값: aoc-backup).
  • gcp_bucket_backup_name 은 이전에 백업에 사용하도록 생성된 버킷입니다.
  • gcp_compute_region 은 기반 배포가 배포된 GCP 리전입니다. Deployment Manager에서 Deployments config를 확인하여 검색할 수 있습니다.
  • gcp_compute_zone 은 기반 배포가 배포된 GCP 영역입니다. Deployment Manager에서 Deployments config를 확인하여 검색할 수 있습니다.

10.1.7. 백업 플레이북 실행

절차

  1. 백업을 실행하려면 명령 생성기를 실행하여 backup 명령을 생성합니다.

    docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator gcp_backup_deployment --data-file /data/backup.yml

    그 결과 다음과 같은 이점을 얻을 수 있습니다.

    -----------------------------------------------
    Command to run playbook:
    
    docker run --rm --env PLATFORM=GCP -v  </path/to/gcp/service-account.json>:/home/runner/.gcp/credentials:ro \
    --env ANSIBLE_CONFIG=../gcp-ansible.cfg --env DEPLOYMENT_NAME=<deployment_name --env GENERATE_INVENTORY=true  \
    $IMAGE redhat.ansible_on_clouds.gcp_backup_deployment \
    -e 'gcp_service_account_credentials_json_path=/home/runner/.gcp/credentials  \
    gcp_deployment_name=<deployment_name> gcp_compute_region=<region> gcp_compute_zone=<zone> \
    gcp_bucket_backup_name=<bucket> backup_prefix=aoc-backup'
  2. 제공된 backup 명령을 실행하여 백업을 트리거합니다.

    $ docker run --rm --env PLATFORM=GCP -v  </path/to/gcp/service-account.json>:/home/runner/.gcp/credentials:ro \
    --env ANSIBLE_CONFIG=../gcp-ansible.cfg --env DEPLOYMENT_NAME=<deployment_name --env GENERATE_INVENTORY=true  \
    $IMAGE redhat.ansible_on_clouds.gcp_backup_deployment \
    -e 'gcp_service_account_credentials_json_path=/home/runner/.gcp/credentials  \
    gcp_deployment_name=<deployment_name> gcp_compute_region=<region> gcp_compute_zone=<zone> \
    gcp_bucket_backup_name=<bucket> backup_prefix=aoc-backup'
  3. Playbook 실행이 완료되면 출력은 다음과 유사합니다.

    TASK [redhat.ansible_on_clouds.standalone_gcp_backup : [backup_deployment] Print the variable required to restore deployment my-deployment] ***
    ok: [localhost] => {
        "msg": [
            "AAP on GCP Backup successful. Please note below the bucket name and backup name which are required for restore process.",
            "gcp_bucket_backup_name: my-bucket",
            "backup_name: aoc-backup-my-deployment-20230616T134002"
        ]
    }
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=38   changed=6    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0

10.1.8. 백업 목록

이 플레이북을 사용하면 기존 백업을 특정 버킷에 나열할 수 있습니다.

절차

  1. command_generator_data 디렉터리를 구성 파일 템플릿으로 채웁니다.

    참고

    Linux에서 명령 생성기가 생성한 모든 파일 또는 디렉터리는 기본적으로 root:root 에 의해 소유됩니다. 파일과 디렉터리의 소유권을 변경하려면 파일이 생성된 후 sudo chmod 명령을 실행할 수 있습니다. 자세한 내용은 기술 노트를 참조하십시오.

    docker run --rm -v $(pwd)/command_generator_data/:/data $IMAGE command_generator_vars gcp_backup_list --output-data-file /data/backups_list.yml
  2. 명령을 실행하면 $(pwd)/command_generator_data/backups_list.yml 템플릿 파일이 생성됩니다. 이 템플릿 파일은 다음과 유사합니다.

    gcp_backup_list:
      cloud_credentials_path:
      extra_vars:
        gcp_bucket_backup_name:
  3. 백업을 실행하려면 명령 생성기를 실행하여 backup 명령을 생성합니다.

    docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator gcp_backup_list --data-file /data/backups_list.yml

    그 결과 다음과 같은 이점을 얻을 수 있습니다.

    -----------------------------------------------
    Command to run playbook:
    
    docker run --rm --env PLATFORM=GCP -v </path/to/gcp/service-account.json>:/home/runner/.gcp/credentials:ro \
    --env ANSIBLE_CONFIG=../gcp-ansible.cfg  $IMAGE redhat.ansible_on_clouds.gcp_backup_list \
    -e 'gcp_service_account_credentials_json_path=/home/runner/.gcp/credentials  gcp_bucket_backup_name=<bucket>'
  4. 제공된 백업 명령을 실행하여 백업 목록을 트리거합니다.
  5. Playbook 실행이 완료되면 출력은 다음과 유사합니다.

    TASK [redhat.ansible_on_clouds.standalone_gcp_backup_list : [list_backup] Display list of backups] ***
    ok: [localhost] => {
        "msg": [
            "aoc-backup-deployment1-20230614T203926",
            "aoc-backup-deployment1-20230616T114134",
            "aoc-backup-deployment1-20230616T134002",
            "aoc-backup-deployment2-20230613T124127"
        ]
    }
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=11   changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

10.1.9. 백업 삭제

백업을 삭제하는 두 개의 플레이북이 있습니다.

  • gcp_backup_delete 플레이북을 사용하여 단일 백업을 삭제합니다.
  • gcp_backups_delete 플레이북을 사용하여 한 번에 여러 백업을 삭제합니다.

gcp_backups_delete 는 문자열 ["backup1","backup2",…​]의 배열을 사용하지만 gcp_backup_delete 는 특정 백업의 이름인 하나의 문자열만 사용합니다.

gcp_backups_delete 의 사용은 이 섹션에 설명되어 있습니다.

절차

  1. command_generator_data 디렉터리를 구성 파일 템플릿으로 채웁니다.

    참고

    Linux에서 명령 생성기가 생성한 모든 파일 또는 디렉터리는 기본적으로 root:root 에 의해 소유됩니다. 파일과 디렉터리의 소유권을 변경하려면 파일이 생성된 후 sudo chmod 명령을 실행할 수 있습니다. 자세한 내용은 root가 소유한 명령 생성기 - Linux 파일을 참조하십시오.

    docker run --rm -v $(pwd)/command_generator_data/:/data $IMAGE command_generator_vars gcp_backups_delete --output-data-file /data/backups_delete.yml
  2. 명령을 실행하면 $(pwd)/command_generator_data/backups_delete.yml 템플릿 파일이 생성됩니다. 이 템플릿 파일은 다음과 유사합니다.

    gcp_backups_delete:
      cloud_credentials_path:
      extra_vars:
        backup_names:
        delete:
        gcp_bucket_backup_name:

backup_names 매개 변수는 문자열 배열을 지정해야 합니다(예: ["backup1","backup2"] ). 성공적으로 삭제하려면 delete 매개변수를 true 로 설정해야 합니다.

  1. 백업을 삭제하려면 명령 생성기를 실행하여 gcp_backups_delete' 명령을 생성합니다.

    docker run --rm -v $(pwd)/command_generator_data:/data $IMAGE command_generator gcp_backups_delete --data-file /data/backups_delete.yml

    그 결과 다음과 같은 이점을 얻을 수 있습니다.

    -----------------------------------------------
    Command to run playbook:
    
    docker run --rm --env PLATFORM=GCP -v </path/to/gcp/service-account.json>:/home/runner/.gcp/credentials:ro \
    --env ANSIBLE_CONFIG=../gcp-ansible.cfg  $IMAGE redhat.ansible_on_clouds.gcp_backups_delete \
    -e 'gcp_service_account_credentials_json_path=/home/runner/.gcp/credentials  gcp_bucket_backup_name=<bucket> \
    backup_names=<backup_names> delete=True'
  2. 제공된 backup 명령을 실행하여 백업을 삭제합니다.
  3. Playbook 실행이 완료되면 출력은 다음과 유사합니다.

    TASK [redhat.ansible_on_clouds.standalone_gcp_backup_delete : [delete_backup] Dry-run message] ***
    skipping: [localhost]
    
    PLAY RECAP *********************************************************************
    localhost                  : ok=23   changed=2    unreachable=0    failed=0    skipped=2    rescued=0    ignored=0

10.1.10. 백업 삭제 실패

백업 삭제에 실패한 경우 다음 작업을 수행합니다.

절차

  1. 백업을 포함하는 버킷으로 이동합니다.
  2. 백업의 이름이 있는 디렉터리를 찾습니다.
  3. 백업 디렉터리를 엽니다.
  4. 백업 이름이 있는 디렉터리를 삭제합니다.
  5. 백업 이름이 .json 인 파일을 확장자로 삭제합니다.
  6. Filestore백업 으로 이동합니다.
  7. 백업과 동일한 이름으로 Filestore 백업을 삭제합니다.