AlloyDB Omni용 pgBackRest 설정

이 페이지에서는 오픈소스 데이터베이스 백업 서버인 pgBackRest와 호환되도록 AlloyDB Omni를 구성하여 데이터를 보호하는 방법을 설명합니다.

Kubernetes 기반 정보는 Kubernetes에서 백업 및 복원을 참고하세요.

pgBackRest에 관한 자세한 내용은 사용자 가이드를 참고하세요.

시작하기 전에

pgBackRest와 호환되도록 AlloyDB Omni를 구성하기 전에 다음 기본 요건을 완료합니다.

로컬 백업을 사용한 기본 구성

이 섹션의 단계에서는 pgBackRest의 기본 설정을 안내합니다. 기본 구성에서는 일정에 따라 백업을 사용 설정할 수 없습니다. 자세한 내용은 예약된 백업 설정하기를 참고하세요.

pgBackRest는 AlloyDB Omni와 호환되는 유연한 서드 파티 제품이므로 필요와 환경에 따라 이러한 단계를 수정할 수 있습니다.

컨테이너에 백업 볼륨 마운트

조직 목적으로 pgBackRest 백업을 위한 별도의 볼륨을 만들고 마운트하는 것이 좋습니다. 새 볼륨을 설정하려면 다음 단계를 완료하세요.

  1. 컨테이너가 실행 중이면 중지하고 삭제합니다.

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Docker

    docker stop CONTAINER_NAME
    docker rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    Podman

    podman stop CONTAINER_NAME
    podman rm CONTAINER_NAME

    다음 변수를 바꿉니다.

    • CONTAINER_NAME: 컨테이너에 사용한 이름입니다.
  2. 컨테이너의 파일 시스템에 백업 디렉터리를 만듭니다.

    Docker

    mkdir -p BACKUP_DIR
    

    Docker

    mkdir -p BACKUP_DIR
    

    Podman

    mkdir -p BACKUP_DIR
    

    Podman

    mkdir -p BACKUP_DIR
    

    다음 변수를 바꿉니다.

    • BACKUP_DIR: 백업이 저장될 호스트 디렉터리입니다.
  3. 새 백업 볼륨으로 컨테이너를 다시 만듭니다.

    Docker

    docker run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Docker

    docker run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    Podman

    podman run -d --name CONTAINER_NAME \
    -e POSTGRES_PASSWORD=NEW_PASSWORD \
    -v DATA_DIR:/var/lib/postgresql/data \
    -v BACKUP_DIR:/var/lib/postgresql/backups \
    -p HOST_PORT:5432 \
    --restart=always \
    docker.io/google/alloydbomni:latest
    

    다음 변수를 바꿉니다.

    • CONTAINER_NAME: 컨테이너에 사용한 이름입니다.
    • NEW_PASSWORD: 새 컨테이너의 postgres 사용자 생성 후 할당된 비밀번호입니다. NEW_PASSWORDDATA_DIR가 새 위치인 경우에만 새 비밀번호를 설정합니다.
    • DATA_DIR: 데이터가 저장된 호스트 디렉터리 경로입니다.
    • DATA_DIR: 데이터가 저장된 호스트 디렉터리 경로입니다.
    • BACKUP_DIR: 백업이 저장될 호스트 디렉터리입니다.
    • HOST_PORT: 컨테이너가 자체 포트 5432를 게시해야 하는 호스트 머신의 TCP 포트입니다. 호스트 머신에서도 PostgreSQL 기본 포트를 사용하려면 5432를 지정합니다.
  4. 컨테이너의 백업 디렉터리를 postgres에서 읽을 수 있도록 합니다.

    Docker

    docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Docker

    docker exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Podman

    podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    Podman

    podman exec CONTAINER_NAME chown -R postgres:postgres /var/lib/postgresql/backups
    

    다음 변수를 바꿉니다.

    • CONTAINER_NAME: 컨테이너에 사용한 이름입니다.

로컬 백업 구성

pgBackRest는 수행된 각 백업의 하위 디렉터리를 만들고 일반 텍스트 매니페스트 파일을 포함합니다.

pgBackRest는 스탠자라는 용어를 사용하여 PostgreSQL 데이터베이스 클러스터의 구성을 참조합니다. 스탠자 이름은 임의로 지정할 수 있으며 호스트 서버, PostgreSQL 클러스터 또는 데이터베이스 이름과 일치할 필요가 없습니다. pgBackRest 문서에서는 클러스터의 함수 이름을 따서 스탠자의 이름을 지으라고 제안합니다.

저장소는 백업이 작성되는 위치입니다. pgBackRest는 지정된 스탠자에서 두 개 이상의 저장소에 쓰기를 지원합니다. 저장소와 관련된 대부분의 구성 매개변수는 숫자 값으로 색인이 생성됩니다. 예를 들면 repo1-입니다. PostgreSQL 클러스터와 관련된 매개변수도 독립적으로 색인이 생성됩니다. 예를 들면 pg1-입니다.

pgBackRest는 pgbackrest.conf라는 구성 파일을 활용하여 전역 및 스탠자별 매개변수를 보관합니다.

AlloyDB Omni 클러스터 백업을 위한 구성 파일을 빌드하고 초기화하려면 컨테이너에 백업 볼륨 마운트에서 만든 호스트 측 백업 디렉터리에 pgbackrest.conf 파일을 만듭니다.

[global]
# Paths (all mandatory):
repo1-path=/var/lib/postgresql/backups
spool-path=/var/lib/postgresql/backups/spool
lock-path=/var/lib/postgresql/backups

# Retention details:
repo1-retention-full=3
repo1-retention-full-type=count
repo1-retention-diff=16

# Force a checkpoint to start backup immediately:
start-fast=y

# Logging parameters:
log-path=/var/lib/postgresql/backups
log-level-console=info
log-level-file=info

# Recommended ZSTD compression:
compress-type=zst

# Other performance parameters:
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=/var/lib/postgresql/data

일부 매개변수는 필수이지만, 필요한 경우 다음과 같이 특정 요구사항을 충족하도록 조정할 수 있는 매개변수도 있습니다.

  • repo1-path: 백업이 쓰여지는 디렉터리 위치입니다. 호스트 서버와 컨테이너 모두에 표시되는 위치를 사용하는 것이 좋습니다.

  • log-path: 로그 파일이 쓰여지는 디렉터리 위치입니다. 백업 자체와 혼합되지 않도록 로그 파일을 별도의 위치에 쓰려면 이 매개변수를 조정하세요.

  • repo1-retention-full: 보관할 전체 백업 수입니다.

  • repo1-retention-full-type: 유지율을 횟수 또는 기간 (일)으로 측정할지 여부입니다.

  • repo1-retention-diff: 보관할 차등 백업 수입니다.

구성 파일에서 AlloyDB Omni과 호환되는 중요하지 않지만 권장되는 기타 매개변수 설정은 다음과 같습니다.

  • log-level-console: pgBackup 명령어를 실행할 때 화면 (STDOUT)에 기록되는 로깅 수준입니다. 구성 파일에서 필요에 맞게 조정하거나 --log-level-console 명령줄 인수로 이 값을 재정의할 수 있습니다. 기본값은 warn입니다.

  • start-fast: 백업을 빠르게 시작하도록 체크포인트를 강제합니다. 기본값은 n입니다.

  • archive-async: 성능을 위해 WAL 세그먼트 파일을 비동기식으로 푸시합니다. 기본값은 n입니다.

  • process-max: 압축 및 전송에 사용할 최대 프로세스 수입니다. 이는 일반적으로 기본 클러스터에서는 max_cpu/4로, 대기 클러스터에서는 max_cpu/2로 설정됩니다. 기본값은 1입니다.

  • compress-type: 사용할 압축 알고리즘입니다. 기본값은 gz입니다.

다른 많은 pgBackRest 구성 매개변수가 있으며 조정할 수 있습니다. 이 문서에서는 기본 AlloyDB Omni 구성에 필수인 매개변수와 몇 가지 권장 매개변수 설정만 다룹니다. 구성 매개변수의 전체 목록은 pgBackRest 구성 참조 온라인 문서를 참고하세요.

pgBackRest를 구성한 후에는 백업이 작성되는 대상 저장소를 초기화해야 합니다. 이를 위해 구성 파일에 설정된 매개변수를 사용하는 스탠자를 만들어야 합니다.

백업을 위해 데이터베이스를 구성하려면 다음 단계를 완료하세요.

  1. stanza-create 명령어를 사용하여 스탠자를 만듭니다.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni stanza-create
    

    다음 변수를 바꿉니다.

    • CONTAINER_NAME: 컨테이너에 사용한 이름입니다.
  2. 백업을 위해 데이터베이스를 구성합니다.

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "ALTER SYSTEM SET archive_command='pgbackrest --config-path=/var/lib/postgresql/backups --stanza=omni archive-push %p';" \
    -c "ALTER SYSTEM SET archive_mode=on;" \
    -c "ALTER SYSTEM SET max_wal_senders=10;" \
    -c "ALTER SYSTEM SET wal_level=replica;"
    

    다음 변수를 바꿉니다.

    • CONTAINER_NAME: 컨테이너에 사용한 이름입니다.
  3. 컨테이너를 다시 시작합니다.

    Docker

    docker restart CONTAINER_NAME
    

    Docker

    docker restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    Podman

    podman restart CONTAINER_NAME
    

    다음 변수를 바꿉니다.

    • CONTAINER_NAME: 컨테이너에 사용한 이름입니다.
  4. 백업 구성을 확인합니다.

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Docker

    docker exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    Podman

    podman exec -u postgres CONTAINER_NAME psql \
    -c "SELECT name, setting
        FROM pg_catalog.pg_settings
        WHERE name IN ('archive_command',
                       'archive_mode',
                       'max_wal_senders',
                       'wal_level')
        ORDER BY name"
    

    다음 변수를 바꿉니다.

    • CONTAINER_NAME: 컨테이너에 사용한 이름입니다.
  5. pgBackRest 검사를 실행합니다.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    check
    

    다음 변수를 바꿉니다.

    • CONTAINER_NAME: 컨테이너에 사용한 이름입니다.

백업 실행

  1. 전체 백업을 실행합니다.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full \
    backup
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full \
    backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full \
    backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=full \
    backup
    

    다음 변수를 바꿉니다.

    • CONTAINER_NAME: 컨테이너에 사용한 이름입니다.
  2. 차등 백업을 실행합니다.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff \
    backup
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff \
    backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff \
    backup
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    --type=diff \
    backup
    

    다음 변수를 바꿉니다.

    • CONTAINER_NAME: 컨테이너에 사용한 이름입니다.
  3. 백업을 보고합니다.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    info
    

    다음 변수를 바꿉니다.

    • CONTAINER_NAME: 컨테이너에 사용한 이름입니다.

예약된 백업 설정

예약된 백업을 설정하려면 필요한 빈도로 pgbackrest backup 명령어를 실행하는 크론 작업을 만듭니다. 자세한 내용은 백업 예약을 참고하세요.

맞춤 구성 및 원격 백업

기본 구성이 작동하면 pgBackRest 구성 참조에 설명된 옵션을 사용하여 필요와 환경설정에 맞게 구성 파일을 조정할 수 있습니다.

여기에는 원격 머신 또는 클라우드에 있는 추가 백업 저장소를 지정하는 작업이 포함됩니다. 저장소를 여러 개 정의하면 pgBackRest는 기본 백업 작업으로 모든 저장소에 동시에 씁니다.

예를 들어 pgBackRest는 다양한 관련 구성 옵션을 사용하여 Cloud Storage 버킷을 백업 저장소로 사용합니다. 다음 섹션에서는 이러한 옵션을 사용하는 한 가지 방법을 보여줍니다.

Cloud Storage를 사용한 구성 예시

이 섹션의 단계에서는 로컬 백업이 포함된 기본 구성에서 소개된 구성 파일을 기반으로 합니다. 이 파일의 수정사항은 Cloud Storage 버킷의 두 번째 백업 저장소를 정의하며, 이 저장소는 ID 및 액세스 관리 (IAM)를 통해 액세스됩니다.

이 예시의 자동 인증 스타일을 사용하려면 Compute Engine VM 인스턴스에서 AlloyDB Omni 클러스터를 실행해야 합니다. Compute Engine VM 인스턴스에서 AlloyDB Omni를 실행하지 않는 경우에도 로컬 파일 시스템에 저장된 Google Cloud 서비스 계정 키와 같은 다른 인증 방법을 사용하여 Cloud Storage 버킷에 백업할 수 있습니다.

이전 구성 파일을 확장하여 Cloud Storage 기반 pgBackRest 저장소를 정의하려면 다음 단계를 따르세요.

  1. VM 인스턴스에 연결된 서비스 계정이 버킷에 쓸 수 있도록 버킷 권한을 구성합니다. 이렇게 하려면 해당 서비스 계정에 스토리지 객체 사용자 IAM 역할을 설정해야 합니다.

  2. pgbackrest.conf 파일의 [global] 섹션에 다음 줄을 추가합니다.

    # Cloud Storage access details:
    repo2-type=gcs
    repo2-gcs-key-type=auto
    repo2-storage-verify-tls=n
    
    # Cloud Storage bucket and path details:
    repo2-gcs-bucket=BUCKET_NAME
    repo2-path=PATH_IN_BUCKET
    
    # Cloud Storage backup retention parameters:
    repo2-retention-full=8
    repo2-retention-full-type=count
    

    다음 변수를 바꿉니다.

    • BUCKET_NAME: pgBackRest에서 백업을 저장할 Cloud Storage 버킷의 이름입니다.
    • PATH_IN_BUCKET: pgBackRest가 백업을 저장할 Cloud Storage 버킷의 디렉터리 경로입니다.
  3. pgbackrest stanza-create 명령어를 사용하여 클라우드 기반 백업 위치를 초기화합니다.

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Docker

    docker exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    Podman

    podman exec -u postgres CONTAINER_NAME pgbackrest \
    --config-path=/var/lib/postgresql/backups \
    --stanza=omni \
    stanza-create
    

    다음 변수를 바꿉니다.

    • CONTAINER_NAME: 컨테이너에 사용한 이름입니다.

pgbackrest stanza-create 명령어를 사용하여 Cloud Storage 버킷에서 백업 저장소를 초기화하면 pgBackRest는 다음 두 위치에 백업할 수 있습니다.

  • 로컬 파일 시스템의 위치로, 구성 파일의 다른 위치에 repo1-path로 정의되어 있습니다. pgbackrest 명령어에 --repo가 지정되지 않은 경우의 기본 위치입니다.

  • 이 예시에서 설정된 repo2-gcs-bucket 구성 디렉티브를 사용하여 정의된 Cloud Storage 버킷입니다. Cloud Storage 버킷을 사용하려면 pgbackrest 명령어에 --repo=2를 지정합니다.

다음 단계