공부/Kubernetes

kubernetes 환경에서 Postgres migration 백업 & 복원

토고미 2022. 8. 17. 11:01

들어가기에 앞서..

이 글은 k8s 환경에서  postgres의 데이터를 migration 하는 방법입니다.

이하의 글은 수동으로 하는 방법이며, 쉘 스크립트를 이용해 자동으로 하고 싶다면 아래 github을 참고해주세요.

https://github.com/aldlfkahs/postgres-migration

 

GitHub - aldlfkahs/postgres-migration: Automate postgres(timescaledb) backup & restore

Automate postgres(timescaledb) backup & restore. Contribute to aldlfkahs/postgres-migration development by creating an account on GitHub.

github.com

 

A. 파일을 통한 migration

1. 백업 파일 생성

원본 postgres 컨테이너 내부로 접속

kubectl -n {네임스페이스} exec -it {POD 이름} -- bash

 

백업 파일 생성

cd /var/lib/postgresql
pg_dumpall -U postgres > backup.sql

 

 

2. 백업 파일 이동

컨테이너에 내부에 생성된 백업 파일을 노드로 가져오기

kubectl -n {네임스페이스} cp {POD 이름}:/var/lib/postgresql/backup.sql backup.sql

 

(선택) 복원을 실행할 postgres가 다른 k8s 클러스터에 있다면, 해당 노드로 복사

scp backup.sql {user}@{ip}:{path}

 

백업 파일을 복원할 postgres 컨테이너 내부로 복사

kubectl -n {네임스페이스} cp backup.sql {POD 이름}:/var/lib/postgresql/backup.sql

 

3. 복원 실행

복원할 postgres 컨테이너 내부로 접속

kubectl -n {네임스페이스} exec -it {POD 이름} -- bash

 

복원 실행

psql -f backup.sql -U postgres

 

비고

tar 바이너리가 없어서 kubectl cp 명령어가 되지 않을 경우 아래 방법을 이용

 

(백업) 원본 DB → 노드

kubectl -n {네임스페이스} exec {POD 이름} -- cat /var/lib/postgresql/backup.sql  > backup.sql

 

(복원) 노드 → 복원 DB

kubectl -n {네임스페이스} create configmap backup --from-file backup.sql

 

생성한 confimap을 복원할 postgres에 mount

...
      volumeMonuts:
      - mountPath: /var/lib/postgresql/backup.sql
        name: backup
        subPath: backup.sql
  volumes:
  - name: backkup
    configMap:
      name: backup

 

B. Streatming Replication을 이용한 실시간 sync

글이 길어져서 링크로 대체

https://togomi.tistory.com/77

 

kubernetes 환경에서 Postgres streaming replication 설정

이전 글에서 이어진다. https://togomi.tistory.com/76 kubernetes 환경에서 Postgres migration 백업 & 복원 들어가기에 앞서.. 이 글은 k8s 환경에서 postgres의 데이터를 migration 하는 방법입니다. 이하의 글..

togomi.tistory.com

 

 

참고

https://www.tecmint.com/backup-and-restore-postgresql-database/