Cloud Storage ๋ฐฑ์—…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋Ÿฌ์Šคํ„ฐ ํด๋ก 

๋ฌธ์„œ ๋ฒ„์ „์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€์—์„œ๋Š” Cloud Storage ๋ฐฑ์—…์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹จ์ผ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ํด๋ก ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋‹ค์Œ ์›Œํฌํ”Œ๋กœ๋Š” ํด๋ก  ๋‹จ๊ณ„๋ฅผ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

  1. Cloud Storage ๋ฐฑ์—…์— ์•ก์„ธ์Šคํ•  pgbackrest.conf ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. pgBackRest ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์†Œ์Šค ๋ฐฑ์—…์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  3. pgBackRest ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฑ์—…์„ ๋Œ€์ƒ ์„œ๋ฒ„์— ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์—

  • ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฑ์—…์ด ์žˆ๋Š” Cloud Storage ๋ฒ„ํ‚ท์˜ ์ „์ฒด ๊ฒฝ๋กœ์— ๋Œ€ํ•œ ์•ก์„ธ์Šค ๊ถŒํ•œ ์ด ๊ฒฝ๋กœ๋Š” ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ BackupPlan ๋ฆฌ์†Œ์Šค๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•œ ๊ฒฝ๋กœ์™€ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
  • ๋‹จ์ผ ์„œ๋ฒ„ ํƒ€๊ฒŸ AlloyDB Omni ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. Kubernetes์— AlloyDB Omni๋ฅผ ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ AlloyDB Omni ์„ค์น˜๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
  • postgres ์‚ฌ์šฉ์ž๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋กœ๊ทธ์ธํ–ˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์„œ๋ฒ„์—์„œ pgBackRest ํŒŒ์ผ ๊ตฌ์„ฑ

๋Œ€์ƒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋Ÿฌ์Šคํ„ฐ๊ฐ€ ์†Œ์Šค ๋ฐฑ์—…์ด ์žˆ๋Š” Cloud Storage ๋ฒ„ํ‚ท์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก pgBackRest ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  1. ํƒ€๊ฒŸ ์„œ๋ฒ„์—์„œ alloydb-data ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.

  2. Cloud Storage์— ์ €์žฅ๋œ ๋ฐฑ์—…์— ์•ก์„ธ์Šคํ•  pgBackRest ๊ตฌ์„ฑ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

      $ cat << EOF > /backup/pgbackrest.conf
      [db]
      pg1-path=/mnt/disks/pgsql/data-restored
      pg1-socket-path=/tmp
      pg1-user=pgbackrest
      [global]
      log-path=/obs/pgbackrest
      log-level-file=info
      repo1-type=gcs
      repo1-gcs-bucket=GCS_SOURCE_BACKUP_BUCKET_NAME
      repo1-path=GCS_SOURCE_BACKUP_BUCKET_PATH
      repo1-storage-ca-file=/etc/ssl/certs/ca-certificates.crt
      repo1-retention-full=9999999
      repo1-gcs-key-type=auto

    ๋‹ค์Œ์„ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

    • GCS_SOURCE_BACKUP_BUCKET_NAME: ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋Ÿฌ์Šคํ„ฐ์—์„œ ๋งŒ๋“  Cloud Storage pgBackRest ๋ฒ„ํ‚ท์˜ ์ด๋ฆ„์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋ฒ„ํ‚ท์˜ ์ „์ฒด URL์ด ์•„๋‹™๋‹ˆ๋‹ค. ๋ฒ„ํ‚ท ์ด๋ฆ„์— gs:// ํ”„๋ฆฌํ”ฝ์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ๋งˆ์„ธ์š”.
    • GCS_SOURCE_BACKUP_BUCKET_PATH: AlloyDB Omni ์šด์˜์ž๊ฐ€ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋Ÿฌ์Šคํ„ฐ์˜ Cloud Storage ๋ฒ„ํ‚ท ๋‚ด์— ๋ฐฑ์—…์„ ์ž‘์„ฑํ•˜๋Š” ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ๊ฒฝ๋กœ์ž…๋‹ˆ๋‹ค. ๊ฒฝ๋กœ๋Š” /๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ ˆ๋Œ€ ๊ฒฝ๋กœ์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

    repo1-gcs-key-type๋Š” ์ธ์Šคํ„ด์Šค์˜ ์„œ๋น„์Šค ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๋„๋ก auto๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์˜ต์…˜์— ๊ด€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ GCS ์ €์žฅ์†Œ ํ‚ค ์œ ํ˜• ์˜ต์…˜์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋Œ€์ƒ ์„œ๋ฒ„์—์„œ ์†Œ์Šค ๋ฐฑ์—… ํ™•์ธ

๋Œ€์ƒ ์„œ๋ฒ„์— ๋กœ๊ทธ์ธํ•˜๊ณ  pgBackRest ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋Œ€์ƒ ์„œ๋ฒ„์—์„œ ์†Œ์Šค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฑ์—…์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

Docker

sudo docker exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/pgsql --stanza=db --repo=1 info

Podman

sudo podman exec CONTAINER_NAME pgbackrest --config-path=/mnt/disks/pgsql --stanza=db --repo=1 info

CONTAINER_NAME์„ ์ƒˆ AlloyDB Omni ์ปจํ…Œ์ด๋„ˆ์˜ ์ด๋ฆ„(์˜ˆ: my-omni-1)์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ์ƒ˜ํ”Œ ์‘๋‹ต์ž…๋‹ˆ๋‹ค.

    stanza: db
      status: ok
      cipher: none
      db (current)
          wal archive min/max (15): 000000010000000000000002/00000001000000000000000D
          full backup: 20240213-231400F
              timestamp start/stop: 2024-02-13 23:14:00+00 / 2024-02-13 23:17:14+00
              wal start/stop: 000000010000000000000003 / 000000010000000000000003
              database size: 38.7MB, database backup size: 38.7MB
              repo1: backup set size: 4.6MB, backup size: 4.6MB
          incr backup: 20240213-231400F_20240214-000001I
              timestamp start/stop: 2024-02-14 00:00:01+00 / 2024-02-14 00:00:05+00
              wal start/stop: 00000001000000000000000D / 00000001000000000000000D
              database size: 38.7MB, database backup size: 488.3KB
              repo1: backup set size: 4.6MB, backup size: 84.2KB
              backup reference list: 20240213-231400F

์‘๋‹ต์˜ ํƒ€์ž„์Šคํƒฌํ”„๋Š” ์ „์ฒด ๋ฐฑ์—…์„ ๋ณต์›ํ•˜๊ฑฐ๋‚˜ ๋ณต๊ตฌ ๊ธฐ๊ฐ„์˜ ํŠน์ • ์‹œ์ ๋ถ€ํ„ฐ ๋ณต์›ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋Œ€์ƒ ์„œ๋ฒ„์—์„œ ๋ฐฑ์—… ๋ณต์›

๋ฐฑ์—… ๋˜๋Š” ๋ณต์›ํ•  ์‹œ์ ์„ ํ™•์ธํ•œ ํ›„ ๋Œ€์ƒ ์„œ๋ฒ„์—์„œ pgBackRest ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ช…๋ น์–ด์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ณต์› ๋ช…๋ น์–ด๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋‹ค์Œ์€ ๋ช‡ ๊ฐ€์ง€ ์ƒ˜ํ”Œ pgBackRest ๋ณต์› ๋ช…๋ น์–ด์ž…๋‹ˆ๋‹ค.

  • ๋ฐฑ์—…์—์„œ ๋ณต์›

    pgbackrest --config-path=/mnt/disks/pgsql --stanza=db --repo=1 restore --set=20240213-231400F --type=immediate --target-action=promote --delta --link-all --log-level-console=info
  • ํŠน์ • ์‹œ์  ๋ฐ์ดํ„ฐ ๋ณต์›

    pgbackrest --config-path=/mnt/disks/pgsql --stanza=db --repo=1 restore --target="2024-01-22 11:27:22" --type=time --target-action=promote --delta --link-all --log-level-console=info

ํƒ€๊ฒŸ ์„œ๋ฒ„์— ๋ฐ์ดํ„ฐ ๋ณต์‚ฌ

๋ณต์› ๋ช…๋ น์–ด๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด /mnt/disks/pgsql/data-restored ์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ์—์„œ ํ˜„์žฌ /alloydb-data/data ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต์‚ฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ํƒ€๊ฒŸ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค๋ฅผ ์ค‘์ง€ํ•ฉ๋‹ˆ๋‹ค.

Docker

docker stop CONTAINER_NAME

Podman

podman stop CONTAINER_NAME
  1. ๊ถŒ์žฅ์‚ฌํ•ญ์— ๋”ฐ๋ผ ํ˜„์žฌ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์ด๋ฆ„์„ ๋‹ค๋ฅธ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

      mv ~/alloydb-data/data  ~/alloydb-data/data-old
  2. data-restored ์ž„์‹œ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ ์ด๋ฆ„์„ ํ˜„์žฌ ๋ฐ์ดํ„ฐ ๋””๋ ‰ํ„ฐ๋ฆฌ๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค.

      mv ~/alloydb-data/data-restored ~/alloydb-data/data
  3. ๋ณต์›๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๋„๋ก postgresql.auto.conf ํŒŒ์ผ์—์„œ pg1-path ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•ฉ๋‹ˆ๋‹ค.

    vim ~/alloydb-data/data/postgresql.auto.conf
    # Verify postgresql.auto.conf.
    # Do not edit this file manually!
    # It will be overwritten by the ALTER SYSTEM command.
    # Recovery settings generated by pgBackRest restore on 2024-03-13 20:47:11
    restore_command = 'pgbackrest --config-path=/mnt/disks/pgsql --pg1-path=/mnt/disks/pgsql/data --repo=1 --stanza=db archive-get %f "%p"'
    recovery_target = 'immediate'
    recovery_target_action = 'promote'
    recovery_target_timeline = 'current'
  1. ํƒ€๊ฒŸ ์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค๋ฅผ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

    Docker

    docker start CONTAINER_NAME

    Podman

    podman start CONTAINER_NAME

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„œ๋น„์Šค๊ฐ€ ์‹œ์ž‘๋˜๋ฉด ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐํ•˜๊ณ  ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๋ฐฑ์—…์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณต์›๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹จ์ผ ์„œ๋ฒ„์—์„œ AlloyDB Omni์— ์—ฐ๊ฒฐ์„ ์ฐธ๊ณ ํ•˜์„ธ์š”.

๋‹ค์Œ ๋‹จ๊ณ„