pgBackRest를 사용하여 AlloyDB Omni RPM을 S3 호환 스토리지에 백업 및 복원

1. 소개

이 Codelab에서는 S3 호환 객체 스토리지를 사용하여 AlloyDB Omni RPM 배포를 백업하고 복원하도록 pgBackRest를 구성하는 방법을 보여줍니다.

참고: 이 Codelab에서는 튜토리얼 및 테스트 목적으로 로컬 경량 S3 호환 스토리지 엔드포인트 역할을 하는 독립형 MinIO 바이너리를 VM에 배포합니다. 프로덕션 워크로드의 경우 지원되고 활발하게 유지관리되는 S3 호환 스토리지 솔루션 또는 클라우드 객체 스토리지를 항상 사용하세요.

기본 요건

  • Cloud 콘솔에서 Google Cloud 프로젝트 및 Cloud Shell에 액세스할 수 있습니다.
  • Google Cloud SDK (gcloud)가 설치되고 구성되어 있어야 합니다.

학습할 내용

  • AlloyDB Omni RPM용 Compute Engine VM을 설정하는 방법
  • VM에 로컬 S3 호환 객체 스토리지 서버를 설정하는 방법
  • S3 호환 객체 스토리지를 백업 저장소로 사용하도록 pgBackRest를 구성하는 방법
  • 백업을 실행, 나열, 확인하는 방법
  • 백업에서 데이터를 복원하는 방법

필요한 항목

  • AlloyDB Omni RPM의 URL 링크를 가져옵니다. 링크는 저장소 URL 서버가 포함된 이메일로 전송됩니다. Codelab 중에 사용할 수 있도록 다음 환경 변수를 초기화하여 URL을 준비합니다.
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    
  • Google Cloud에 액세스할 수 있는 작동 중인 터미널 이 용도로 Cloud Shell을 사용할 수 있습니다.

2. 설정 및 요구사항

프로젝트 설정

Google Cloud 프로젝트 만들기

  1. Google Cloud 콘솔의 프로젝트 선택기 페이지에서 Google Cloud 프로젝트를 선택하거나 만듭니다.
  2. Cloud 프로젝트에 결제가 사용 설정되어 있는지 확인합니다. 프로젝트에 결제가 사용 설정되어 있는지 확인하는 방법을 알아보세요.

Cloud Shell 시작

노트북에서 Google Cloud를 원격으로 운영할 수 있지만, 이 Codelab에서는 클라우드에서 실행되는 명령줄 환경인 Google Cloud Shell을 사용합니다.

Cloud Shell 활성화 아이콘

  1. Google Cloud 콘솔을 열고 오른쪽 상단 툴바에 있는 Cloud Shell 아이콘을 클릭합니다. 다음 방법 중 하나로 Cloud Shell을 열 수도 있습니다.
    • Google Cloud 콘솔을 사용하는 경우 G 키를 누른 다음 S 키를 누릅니다.
    • 이 링크를 클릭합니다.

일반적으로 환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 이 작업이 완료되면 다음과 비슷한 내용이 표시됩니다.

환경이 연결되었음을 보여주는 Google Cloud Shell 터미널{: width="624"}

3. Compute Engine VM 만들기

이 섹션에서는 gcloud 명령줄 도구를 사용하여 단일 Compute Engine (GCE) 가상 머신 (VM)을 만듭니다. AlloyDB Omni RPM와 완전히 호환되는 Rocky Linux 9 이미지를 사용합니다.

  1. 프로젝트 ID, VM 이름, 머신 유형, 영역, 리전의 환경 변수를 정의합니다.
    export PROJECT="your-project-id"
    export INSTANCE_NAME="alloydb-omni-pgbackrest"
    export MACHINE_TYPE="e2-standard-4"
    export ZONE="us-central1-c"
    export REGION="us-central1"
    
  2. Google Cloud 계정 사용자로 로그인하고 기본 프로젝트를 구성합니다.
    gcloud auth login
    gcloud config set project $PROJECT
    
  3. VM에 대한 SSH 연결을 허용하는 방화벽 규칙을 만듭니다.
    gcloud compute firewall-rules create allow-ssh-alloydb-omni \
        --project=$PROJECT \
        --direction=INGRESS \
        --action=allow \
        --rules=tcp:22 \
        --source-ranges="0.0.0.0/0"
    
  4. VM이 공개 IP 주소 없이 생성되므로 VM이 외부 패키지 저장소에 액세스하고 필요한 소프트웨어를 다운로드할 수 있도록 Cloud Router 및 Cloud NAT 게이트웨이를 구성합니다.
    gcloud compute routers create alloydb-omni-router \
        --project=$PROJECT \
        --network=default \
        --region=$REGION
    
    gcloud compute routers nats create alloydb-omni-nat \
        --project=$PROJECT \
        --router=alloydb-omni-router \
        --region=$REGION \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips
    
  5. VPC 네트워크에 유효한 기본 인터넷 게이트웨이 경로가 있는지 확인합니다. 일부 공유 또는 플레이그라운드 환경에서는 정리 스크립트에 의해 기본 경로가 가끔 삭제됩니다. 이 경로는 Cloud NAT가 아웃바운드 트래픽을 인터넷으로 전달하는 데 필요합니다.
    gcloud compute routes create default-internet-route \
        --project=$PROJECT \
        --network=default \
        --destination-range=0.0.0.0/0 \
        --next-hop-gateway=default-internet-gateway
    
  6. Rocky Linux 9 및 20GB 균형 있는 영구 디스크를 사용하여 Compute Engine VM 인스턴스를 만듭니다. 보안을 강화하려면 VM에 공개 IP 주소가 할당되지 않도록 --no-address 플래그를 사용하세요.
    gcloud compute instances create $INSTANCE_NAME \
        --project=$PROJECT \
        --zone=$ZONE \
        --machine-type=$MACHINE_TYPE \
        --image-family=rocky-linux-9 \
        --image-project=rocky-linux-cloud \
        --boot-disk-size=20GB \
        --boot-disk-type=pd-balanced \
        --no-address
    
  7. VM이 생성된 후 VM의 상태를 확인합니다.
    gcloud compute instances list --filter="name=$INSTANCE_NAME" --project=$PROJECT
    

4. S3 호환 객체 스토리지 설정

이 섹션에서는 VM에 연결하고, 환경을 준비하고, 백업 버킷을 호스팅할 S3 클라이언트 (mc)와 함께 로컬 S3 호환 객체 스토리지 서버 (minio)를 설정합니다.

  1. IAP (Identity-Aware Proxy)를 사용하여 SSH를 통해 VM에 연결합니다. VM에 공개 IP 주소가 없으므로 gcloud는 자동으로 IAP를 통해 SSH 연결을 터널링합니다.
    gcloud compute ssh $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --tunnel-through-iap
    
  2. 필요한 경우 나중에 SELinux 정책을 구성할 수 있도록 policycoreutils-python-utils 패키지를 설치합니다.
    sudo dnf install -y policycoreutils-python-utils
    
  3. S3 호환 서버 바이너리 (minio)를 다운로드합니다.
    curl -L -o minio \
        https://github.com/minio/minio/releases/download/RELEASE.2024-05-10T01-41-38Z/minio.linux-amd64.RELEASE.2024-05-10T01-41-38Z
    chmod +x minio
    sudo mv minio /usr/local/bin/
    
  4. 객체 스토리지 서버의 데이터 디렉터리를 만듭니다.
    sudo mkdir -p /var/lib/s3-storage/data
    
  5. 예시 사용자 인증 정보를 사용하여 백그라운드에서 S3 호환 서버를 시작합니다. 보안 키는 8자 이상이어야 합니다.
    export MINIO_ROOT_USER="s3admin"
    export MINIO_ROOT_PASSWORD="s3password"
    
    nohup sudo env MINIO_ROOT_USER="$MINIO_ROOT_USER" \
        MINIO_ROOT_PASSWORD="$MINIO_ROOT_PASSWORD" \
        /usr/local/bin/minio server /var/lib/s3-storage/data \
        --console-address ":9001" \
        > s3-server.log 2>&1 &
    
  6. S3 호환 서버가 실행 중인지 확인합니다.
    ps aux | grep minio
    
  7. 버킷을 관리하려면 S3 클라이언트 (mc)를 다운로드하고 설치합니다.
    curl -L -o mc \
        https://github.com/minio/mc/releases/download/RELEASE.2024-05-09T17-04-24Z/mc.linux-amd64.RELEASE.2024-05-09T17-04-24Z
    chmod +x mc
    sudo mv mc /usr/local/bin/
    
  8. S3 클라이언트 별칭 (s3repo)을 구성하고 alloydb-backups이라는 버킷을 만듭니다.
    mc alias set s3repo http://localhost:9000 s3admin s3password
    mc mb s3repo/alloydb-backups
    

5. AlloyDB Omni 설치

이 섹션에서는 AlloyDB Omni를 설치하고 구성합니다.

  1. 데이터 디렉터리, AlloyDB Omni 저장소 URL, PostgreSQL postgres 관리자 사용자의 안전한 비밀번호에 대한 환경 변수를 VM에 정의합니다. URL을 가입 양식에서 받은 URL로 바꿉니다.
    export PGDATA="/var/lib/alloydbomni"
    export ALLOYDB_OMNI_REPOSITORY_URL="..."
    export PGPASSWORD="YourStrongPassword123!"
    
    참고: Codelab의 단순성을 위해 명령줄 (예: PGPASSWORD=$PGPASSWORD)에서 환경 변수를 사용하여 비밀번호를 전달하지만 프로세스 목록에 비밀번호가 노출될 수 있습니다. 프로덕션에서는 .pgpass 파일이나 보안 비밀 관리자와 같은 더 안전한 방법을 사용하세요.
  2. AlloyDB Omni가 데이터베이스 파일을 저장할 데이터 디렉터리를 만듭니다.
    sudo mkdir -p $PGDATA
    
  3. 저장소 구성 파일을 만들어 VM에서 YUM 저장소를 구성합니다.
    sudo tee /etc/yum.repos.d/alloydbomni.repo << EOF
    [alloydbomni]
    name=alloydbomni
    baseurl=$ALLOYDB_OMNI_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=1
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
  4. YUM 캐시를 업데이트합니다.
    sudo yum makecache
    
  5. AlloyDB Omni RPM 패키지 버전 18을 설치합니다.
    sudo dnf install -y alloydbomni18
    
  6. AlloyDB Omni 데이터베이스 인스턴스를 초기화합니다.
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup initdb
    
  7. 표준 Codelab 관행에 따라 설정을 용이하게 하기 위해 SELinux 시행 모드를 일시적으로 사용 중지합니다.
    sudo setenforce 0
    
  8. AlloyDB Omni 데이터베이스 인스턴스를 준비합니다.
    sudo PGPASSWORD=$PGPASSWORD PGDATA=$PGDATA /usr/lib/postgresql/18/bin/alloydbomni18-setup preparedb
    
  9. AlloyDB Omni systemd 서비스를 사용 설정하고 시작합니다.
    sudo systemctl enable alloydbomni18
    sudo systemctl start alloydbomni18
    
  10. AlloyDB Omni 서비스가 활성 상태이고 정상적으로 실행되고 있는지 확인합니다.
    sudo systemctl status alloydbomni18
    

6. pgBackRest 구성

이 섹션에서는 AlloyDB Omni Common 저장소에서 pgBackRest를 설치하고, S3 호환 객체 스토리지 버킷을 백업 저장소로 사용하도록 /etc/pgbackrest/pgbackrest.conf를 구성하고, AlloyDB Omni에서 WAL 보관을 사용 설정합니다.

  1. AlloyDB Omni Common 저장소 URL에 대한 환경 변수를 VM에 정의합니다. URL을 가입 양식에서 받은 URL로 바꿉니다.
    export ALLOYDB_OMNI_COMMON_REPOSITORY_URL="..."
    
  2. pgBackRest YUM 저장소를 구성하고 pgbackrest-2.58.0를 설치합니다.
    sudo tee /etc/yum.repos.d/pgbackrest.repo <<EOF
    [pgbackrest]
    name=Google Alloydb Omni Orchestrator
    baseurl=$ALLOYDB_OMNI_COMMON_REPOSITORY_URL
    enabled=1
    repo_gpgcheck=0
    gpgcheck=0
    gpgkey=https://dl.google.com/linux/linux_signing_key.pub
    EOF
    
    sudo dnf install -y pgbackrest-2.58.0
    
  3. pgBackRest의 스풀 및 로그 디렉터리를 만들고 postgres 사용자에게 소유권을 할당합니다.
    sudo mkdir -p /var/log/pgbackrest
    sudo mkdir -p /var/lib/pgbackrest
    
    sudo chown -R postgres:postgres /var/log/pgbackrest
    sudo chown -R postgres:postgres /var/lib/pgbackrest
    
  4. /etc/pgbackrest/pgbackrest.conf를 만들고 엄격한 파일 권한을 구성합니다.
    sudo mkdir -p /etc/pgbackrest/conf.d
    
    sudo tee /etc/pgbackrest/pgbackrest.conf <<EOF
    [global]
    spool-path=/var/lib/pgbackrest
    lock-path=/var/lib/pgbackrest
    
    # S3 Repository details
    repo1-type=s3
    repo1-s3-endpoint=http://localhost:9000
    repo1-s3-bucket=alloydb-backups
    repo1-s3-key=s3admin
    repo1-s3-key-secret=s3password
    repo1-s3-region=us-east-1
    repo1-s3-uri-style=path
    repo1-path=/pgbackrest
    
    # Retention policy
    repo1-retention-full=3
    repo1-retention-full-type=count
    repo1-retention-diff=16
    
    # Force immediate checkpoint during backup start
    start-fast=y
    
    # Logging
    log-path=/var/log/pgbackrest
    log-level-console=info
    log-level-file=info
    
    # Compression
    compress-type=zst
    
    # Asynchronous WAL archiving
    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=$PGDATA
    EOF
    
    sudo chown postgres:postgres /etc/pgbackrest/pgbackrest.conf
    sudo chmod 640 /etc/pgbackrest/pgbackrest.conf
    
  5. postgres 사용자로 pgBackRest 스탠자를 초기화합니다.
    sudo -u postgres pgbackrest --stanza=omni stanza-create
    
    출력에 stanza-create command end: completed successfully이 표시되는지 확인합니다.
  6. psql을 사용하여 AlloyDB Omni 보관 파라미터를 구성합니다.
    sudo -u postgres /usr/lib/postgresql/18/bin/psql \
        -c "ALTER SYSTEM SET archive_mode = 'on';" \
        -c "ALTER SYSTEM SET archive_command = 'pgbackrest --stanza=omni archive-push %p';" \
        -c "ALTER SYSTEM SET wal_level = 'replica';" \
        -c "ALTER SYSTEM SET max_wal_senders = 10;"
    
  7. AlloyDB Omni 서비스를 다시 시작하여 보관 변경사항을 적용합니다.
    sudo systemctl restart alloydbomni18
    
  8. pgBackRest 구성 무결성 및 연결을 확인합니다.
    sudo -u postgres pgbackrest --stanza=omni check
    
    출력에 check command end: completed successfully이 표시되는지 확인합니다.

7. 백업 실행

이 섹션에서는 pgBackRest를 사용하여 AlloyDB Omni 데이터베이스를 S3 호환 객체 스토리지에 전체 백업 및 차등 백업합니다.

  1. pgbackrest을 사용하여 전체 백업을 트리거합니다.
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=full backup
    
  2. pgbackrest을 사용하여 차등 백업을 트리거합니다.
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --type=diff backup
    
    참고: 지원되는 다른 백업 유형에는 incr (증분)이 포함됩니다.

8. 백업 나열 및 확인

이 섹션에서는 백업을 나열하고 백업이 성공적으로 완료되었는지 확인합니다.

  1. pgbackrest info 명령어를 사용하여 백업을 나열합니다.
    sudo -u postgres pgbackrest \
        --stanza=omni info
    
    실행한 각 백업 명령어의 백업 정보와 함께 status: ok가 출력에 표시되는지 확인합니다.
    • 전체 백업: full backup: F (예: 20260908-093545F)
    • 차이 백업: diff backup: F_D (예: 20260908-093545F_20260908-094016D)
  2. S3 클라이언트 (mc)를 사용하여 버킷에 저장된 백업 파일을 확인합니다.
    mc ls s3repo/alloydb-backups/pgbackrest/
    
    출력에 backup, archive, stanza.info이 표시됩니다.

9. 백업에서 데이터 복원

이 섹션에서는 AlloyDB Omni 데이터베이스 서비스를 중지하고 pgbackrest를 사용하여 특정 백업에서 데이터를 복원합니다.

주의: 복원하면 데이터베이스가 중지되고 모든 데이터베이스 데이터가 덮어써집니다.

  1. 복원할 백업 ID의 환경 변수를 정의합니다. 값을 pgbackrest info 출력에 표시된 백업 ID로 바꿉니다.
    export BACKUPID="20260908-093545F"
    
  2. AlloyDB Omni 서비스를 중지하고 비활성 상태인지 확인합니다.
    sudo systemctl stop alloydbomni18
    sudo systemctl status alloydbomni18
    
    출력에 Active: inactive가 표시되는지 확인합니다.
  3. --delta 옵션과 함께 pgbackrest restore를 실행하여 선택한 백업에서 데이터베이스를 복원합니다.
    sudo -u postgres pgbackrest \
        --stanza=omni \
        --set=$BACKUPID \
        --delta restore
    
    출력에 restore command end: completed successfully이 표시되는지 확인합니다.
  4. AlloyDB Omni 서비스를 시작하고 활성 상태이며 실행 중인지 확인합니다.
    sudo systemctl start alloydbomni18
    sudo systemctl status alloydbomni18
    
    출력에 Active: active (running)가 표시되는지 확인합니다.

10. 정리 및 설문조사

Codelab을 완료한 후에는 원치 않는 요금이 발생하지 않도록 Google Cloud 리소스를 정리할 수 있습니다.

  1. VM의 SSH 세션 연결을 해제하여 로컬 Cloud Shell 터미널로 돌아갑니다.
    exit
    
  2. Compute Engine VM 인스턴스를 삭제합니다.
    gcloud compute instances delete $INSTANCE_NAME --zone=$ZONE --project=$PROJECT --quiet
    
  3. SSH 액세스를 위해 생성된 방화벽 규칙을 삭제합니다.
    gcloud compute firewall-rules delete allow-ssh-alloydb-omni --project=$PROJECT --quiet
    
  4. Cloud NAT 게이트웨이 및 Cloud Router를 삭제합니다.
    gcloud compute routers nats delete alloydb-omni-nat --router=alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    gcloud compute routers delete alloydb-omni-router --region=$REGION --project=$PROJECT --quiet
    
  5. 맞춤 경로를 삭제합니다.
    gcloud compute routes delete default-internet-route --project=$PROJECT --quiet
    

11. 축하합니다

Codelab을 완료하신 것을 축하드립니다. S3 호환 객체 스토리지를 사용하여 AlloyDB Omni RPM 배포를 백업하고 복원하도록 pgBackRest를 구성했습니다.

학습한 내용

  • AlloyDB Omni RPM용 Compute Engine VM을 설정하는 방법
  • S3 호환 객체 스토리지 버킷을 설정하는 방법
  • S3 호환 저장소로 pgBackRest를 구성하는 방법
  • 전체 및 차등 백업을 수행, 나열, 확인하는 방법
  • pgBackRest를 사용하여 백업에서 데이터를 복원하는 방법

자세한 내용은 AlloyDB Omni 개요를 참고하세요.

12. 설문조사

본 튜토리얼을 어떻게 사용하실 계획인가요?

읽기만 할 계획입니다. 읽은 다음 연습 활동을 완료할 계획입니다.