공부/Kubernetes
kubernetes 환경에서 Postgres migration 백업 & 복원
토고미
2022. 8. 17. 11:01
들어가기에 앞서..
이 글은 k8s 환경에서 postgres의 데이터를 migration 하는 방법입니다.
이하의 글은 수동으로 하는 방법이며, 쉘 스크립트를 이용해 자동으로 하고 싶다면 아래 github을 참고해주세요.
https://github.com/aldlfkahs/postgres-migration
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://www.tecmint.com/backup-and-restore-postgresql-database/