티스토리 뷰
1. 백업 유형 결정
MariaDB의 백업은 크게 전체 백업과 증분 백업으로 나눌 수 있습니다.
- 전체 백업 (Full Backup): 데이터베이스 전체를 백업하는 방식으로, 모든 데이터를 포함한 백업입니다. 주기적으로 전체 백업을 수행하면 복구 시 최신 상태로 복원할 수 있습니다.
- 증분 백업 (Incremental Backup): 마지막 백업 이후 변경된 데이터만 백업하는 방식입니다. 데이터 변경량이 적을 경우 백업 속도가 빠르고 저장 공간을 절약할 수 있습니다. 다만 복구 시 전체 백업과 증분 백업을 모두 적용해야 합니다.
권장 사항:
- 전체 백업: 일주일에 한 번 수행.
- 증분 백업: 매일 수행.
2. 백업 도구 선택
MariaDB의 백업을 위해 사용할 수 있는 여러 도구가 있으며, 환경에 따라 적합한 도구를 선택해야 합니다.
- Mariabackup: MariaDB의 고성능 백업 도구로, 전체 및 증분 백업을 지원하며, 물리적 데이터 복제를 제공합니다. 높은 성능과 안정성을 가진 백업 방법입니다.
- mysqldump: SQL 덤프를 생성하는 방식으로, 주로 소규모 데이터베이스나 테스트 환경에서 사용됩니다. 데이터 크기가 클 경우 성능이 떨어질 수 있습니다.
- Percona XtraBackup: MySQL 및 MariaDB용 고성능 백업 도구로, 물리적 백업 및 증분 백업을 지원합니다.
3. 백업 주기 및 보존 정책
3.1 백업 주기
- 전체 백업: 매주 1회 (예: 매주 일요일 자정에 수행)
- 증분 백업: 매일 자정 (매일 수행하여 변화된 데이터만 백업)
이 백업 주기는 서비스 중단 없이 데이터를 최대한 자주 보호할 수 있도록 해야 하며, 서비스 성격에 따라 조정될 수 있습니다.
3.2 백업 보존 기간
- 전체 백업: 최소 4주간 보관.
- 증분 백업: 최소 7일간 보관.
보존 기간은 데이터 복구에 필요한 기간을 고려해 설정하며, 보존 기간을 너무 길게 설정하면 스토리지 비용이 증가할 수 있습니다. 반대로 너무 짧으면 데이터 복구가 어려워질 수 있습니다.
4. 백업 저장 위치
백업 파일은 주로 다음과 같은 저장소에 저장할 수 있습니다.
- 로컬 스토리지: 노드의 디스크에 백업을 저장하는 방법이지만, 클러스터 노드에 문제가 발생할 경우 데이터 손실 위험이 있습니다.
- 원격 스토리지 (NFS, S3, Azure Blob): 원격 저장소에 백업을 저장하여 장애 발생 시에도 데이터를 안전하게 보호할 수 있습니다. 특히, 클라우드 환경에서는 Amazon S3나 Google Cloud Storage와 같은 오브젝트 스토리지를 사용하면 고가용성을 보장할 수 있습니다.
5. Kubernetes 환경에서의 백업 전략
Kubernetes 환경에서는 백업 작업을 CronJob으로 자동화하고, 데이터를 외부 스토리지에 저장하는 방식이 일반적입니다.
5.1 백업 스크립트
Kubernetes 환경에서 Mariabackup을 사용한 예시 백업 스크립트입니다.
#!/bin/bash
# 백업 파일 저장 경로
BACKUP_DIR="/backups/mariadb"
DATE=$(date +"%Y%m%d%H%M")
# Mariabackup 실행
mariabackup --backup --target-dir=${BACKUP_DIR}/${DATE} --user=<backup_user> --password=<backup_password>
# 백업 결과 압축
tar -zcvf ${BACKUP_DIR}/${DATE}.tar.gz ${BACKUP_DIR}/${DATE}
# 압축 후 원본 백업 삭제
rm -rf ${BACKUP_DIR}/${DATE}
5.2 Kubernetes CronJob 예시
위 스크립트를 CronJob으로 설정하여 자동화할 수 있습니다. 아래는 백업을 매일 자정에 수행하는 CronJob 예시입니다.
apiVersion: batch/v1
kind: CronJob
metadata:
name: mariadb-backup
namespace: mariadb
spec:
schedule: "0 0 * * *" # 매일 자정에 실행
jobTemplate:
spec:
template:
spec:
containers:
- name: mariadb-backup
image: mariadb:10.10
command: ["/bin/bash", "-c", "/scripts/backup.sh"]
volumeMounts:
- name: backup-storage
mountPath: /backups
- name: backup-script
mountPath: /scripts
restartPolicy: OnFailure
volumes:
- name: backup-storage
persistentVolumeClaim:
claimName: mariadb-backup-pvc
- name: backup-script
configMap:
name: mariadb-backup-script
5.3 Persistent Volume Claim (PVC)
백업 데이터를 저장할 외부 스토리지와 연결된 PVC를 설정합니다.
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: mariadb-backup-pvc
namespace: mariadb
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 100Gi
6. 복구 전략
6.1 전체 백업 복구
전체 백업 파일을 사용하여 MariaDB를 복구할 수 있습니다.
mariabackup --prepare --target-dir=/backups/mariadb/last_backup
mariabackup --copy-back --target-dir=/backups/mariadb/last_backup
chown -R mysql:mysql /var/lib/mysql
6.2 증분 백업 복구
증분 백업을 포함한 전체 백업 복구는 다음 순서를 따릅니다:
- 전체 백업 준비
mariabackup --prepare --target-dir=/backups/full_backup
- 증분 백업 병합
mariabackup --prepare --target-dir=/backups/full_backup --incremental-dir=/backups/incremental_backup
- 데이터 복구
mariabackup --copy-back --target-dir=/backups/full_backup chown -R mysql:mysql /var/lib/mysql
7. 모니터링 및 알림
- Prometheus 및 Grafana: 백업 상태 및 스토리지 용량을 모니터링할 수 있는 대시보드를 설정하여 이상 상황 발생 시 알림을 받을 수 있도록 설정합니다.
- Slack, Email 알림: CronJob 실행 후 실패 시 Slack이나 이메일을 통해 알림을 받을 수 있도록 설정합니다.
요약
- 백업 유형: 전체 백업과 증분 백업을 병행.
- 백업 주기: 전체 백업은 매주, 증분 백업은 매일.
- 백업 보존 기간: 전체 백업은 4주, 증분 백업은 7일 이상 보관.
- 백업 도구: Mariabackup, Percona XtraBackup 등 선택.
- Kubernetes CronJob으로 자동화.
- 복구 전략: 전체 또는 증분 백업을 통해 복구.
- 모니터링 및 알림: Prometheus와 Grafana로 상태 모니터링.
이러한 정책을 통해 K8s 환경에서의 MariaDB 백업을 안정적으로 운영할 수 있습니다.
댓글