Notice
Recent Posts
Recent Comments
Link
후니의 IT인프라 사전
5주차 - 백업 (AWS S3) & PITR 복원(도전과제) 본문
1. AWS CLI를 설치합니다.
# Install aws cli v2
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
apt install unzip -y && unzip awscliv2.zip
sudo ./aws/install
complete -C '/usr/local/bin/aws_completer' aws
# 이후 aws configure 작업 실시
aws configure
2. 백업할 S3 버킷 생성
# S3 버킷 생성
aws s3 mb s3://버킷(유일한 이름) --region ap-northeast-2
3. S3 버킷에 대해 Secret으로 유저정보를 저장
# My BUCKET Name 변수 지정
MyS3=<My BUCKET Name>
MyS3=cnpg-janghun
# AWS IAM User 정보를 Secret 으로 생성
kubectl create secret generic aws-creds \
--from-literal=ACCESS_KEY_ID=<access key here> \
--from-literal=ACCESS_SECRET_KEY=<secret key here>
# Secret 으로 생성 확인
kubectl get secret aws-creds -o json | jq
4. AWS S3 백업 경로를 설정하여 클러스터에 반영
# 클러스터 신규 생성 + AWS S3 백업 설정
cat ~/DOIK/5/mycluster3.yaml
...
backup:
barmanObjectStore:
destinationPath: "s3://${BUCKET}"
s3Credentials:
accessKeyId:
name: aws-creds
key: ACCESS_KEY_ID
secretAccessKey:
name: aws-creds
key: ACCESS_SECRET_KEY
BUCKET=$MyS3 envsubst < ~/DOIK/5/mycluster3.yaml | kubectl apply -f -
# S3 하위 디렉터리 포함(--recursive) 조회
aws s3 ls s3://$MyS3 --recursive --human-readable --summarize
2022-06-17 15:49:49 16.0 MiB mycluster/wals/0000000100000000/000000010000000000000001
2022-06-17 15:49:52 16.0 MiB mycluster/wals/0000000100000000/000000010000000000000002
2022-06-17 15:49:54 338 Bytes mycluster/wals/0000000100000000/000000010000000000000002.00000028.backup
2022-06-17 15:50:49 16.0 MiB mycluster/wals/0000000100000000/000000010000000000000003
2022-06-17 15:50:51 16.0 MiB mycluster/wals/0000000100000000/000000010000000000000004
2022-06-17 15:50:53 338 Bytes mycluster/wals/0000000100000000/000000010000000000000004.00000028.backup
2022-06-17 15:55:50 16.0 MiB mycluster/wals/0000000100000000/000000010000000000000005
2022-06-17 15:56:00 16.0 MiB mycluster/wals/0000000100000000/000000010000000000000006
Total Objects: 8
Total Size: 96.0 MiB
5. 백업 실행
백업 명령을 통해서 S3에 수동으로 백업할 수 있다.
# 백업 실행
cat << EOF | kubectl apply -f -
apiVersion: postgresql.cnpg.io/v1
kind: Backup
metadata:
name: first-backup
spec:
cluster:
name: mycluster
EOF
# 백업 확인
kubectl get backup
NAME AGE CLUSTER PHASE ERROR
first-backup 2m mycluster completed
kubectl describe backup
...
aws s3 ls s3://$MyS3 --recursive --human-readable --summarize
6. 스케줄 백업
정기적인 스케줄 백업이 필요하면 아래의 yaml로 정기등록 할 수 있다.
apiVersion: postgresql.cnpg.io/v1
kind: ScheduledBackup
metadata:
name: backup-example
spec:
schedule: "0 0 0 * * *"
backupOwnerReference: self
cluster:
name: pg-backup
* 참고 : go 에서는 schedule을 총 6개로 표시하고 있음. 첫 칸부터 초, 분, 시, 일, 월, 요일 (참조문서)
Field name | Mandatory? | Allowed values | Allowed special characters
---------- | ---------- | -------------- | --------------------------
Seconds | Yes | 0-59 | * / , -
Minutes | Yes | 0-59 | * / , -
Hours | Yes | 0-23 | * / , -
Day of month | Yes | 1-31 | * / , - ?
Month | Yes | 1-12 or JAN-DEC | * / , -
Day of week | Yes | 0-6 or SUN-SAT | * / , - ?
실제로 실행해보면 schedule이 0 0 0 이므로 익일 0시 0분 0초에 진행한다고 예정을 한다.
kubectl describe scheduledbackup
7. 백업 된 데이터로 복원하기(실패)
(해당 내용은 지속적으로 도전하고 있으나 지속 실패..)
일단 S3에 백업된 데이터로 새로운 클러스터를 bootstrap 방식으로 재생시켜야하는데, 잘 작동되지 않음.
apiVersion: postgresql.cnpg.io/v1
kind: Cluster
metadata:
name: cluster-restore
spec:
[...]
superuserSecret:
name: superuser-secret
bootstrap:
recovery:
source: clusterBackup
externalClusters:
- name: clusterBackup
barmanObjectStore:
destinationPath: https://STORAGEACCOUNTNAME.blob.core.windows.net/CONTAINERNAME/
azureCredentials:
storageAccount:
name: recovery-object-store-secret
key: storage_account_name
storageKey:
name: recovery-object-store-secret
key: storage_account_key
wal:
maxParallel: 8
이상으로 S3를 통한 백업을 알아보았습니다. 퍼블릭 클라우드를 통해서 별도로 백업할 수 있다는 것은 매우 큰 장점입니다.
'프로젝트&&스터디 > DOIK 스터디' 카테고리의 다른 글
스터디 회고 (1) | 2022.06.25 |
---|---|
5주차 - Cloud Native PostgreSQL 오퍼레이터 (0) | 2022.06.25 |
4주차 - Percona Distribution for MongoDB 오퍼레이터 (0) | 2022.06.25 |
3주차 - Kafka & Strimzi 오퍼레이터 (0) | 2022.06.25 |
2주차 - 오퍼레이터 & MySQL 오퍼레이터 (설치 및 장애테스트) (0) | 2022.06.25 |