티스토리 뷰

카테고리 없음

Proxmox 백업 운영 최종 가이드

미니대왕님 2026. 3. 25. 11:18

📦 Proxmox 백업 운영 최종 가이드

이 문서는 다음 내용을 한 번에 정리한 최종본입니다.

  • vzdump 백그라운드 실행 방법
  • 다중 VM 순차 자동 백업 스크립트
  • 백업 실패 알림 연동 (Slack / Google Chat)
  • Proxmox Backup Server(PBS) 구축 개요
  • 실무 운영 시 주의사항

1. vzdump 백그라운드 실행

1-1. 기본 실행

nohup vzdump 200 \
  --dumpdir /mnt/hdd \
  --mode snapshot \
  --compress zstd \
  > /var/log/vzdump-200.log 2>&1 &

1-2. 안정성 옵션 포함

nohup vzdump 200 \
  --dumpdir /mnt/hdd \
  --mode snapshot \
  --compress zstd \
  --bwlimit 50000 \
  --ionice 7 \
  --lockwait 600 \
  > /var/log/vzdump-200.log 2>&1 &

1-3. 실행 상태 확인

ps -ef | grep vzdump
tail -f /var/log/vzdump-200.log


2. 다중 VM 자동 백업 스크립트

아래 스크립트는 여러 VM을 순차적으로 자동 백업합니다.
동시 실행으로 인한 스토리지 병목을 줄이기 위해 한 대씩 처리합니다.

2-1. 스크립트 예제

파일명 예시: multi-vm-backup.sh

#!/bin/bash

set -u

STORAGE_DIR="/mnt/hdd"
LOGFILE="/var/log/proxmox-multi-backup.log"
VM_LIST="201 202 203 204 205"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
HOSTNAME=$(hostname)

# Slack Webhook (없으면 빈 값 유지)
SLACK_WEBHOOK=""

# Google Chat Webhook (없으면 빈 값 유지)
GCHAT_WEBHOOK="https://chat.googleapis.com/v1/spaces/AAAAzEGyH54/messages?key=AIzaSyDdI0hCZtE6vySjMm-WEfRq3CPzqKqqsHI&token=hh5s9S_25T5ICq-uv2e07dvF5EVZkepNwbqKE1oAjWc"

send_slack() {
  local MSG="$1"
  if [ -n "$SLACK_WEBHOOK" ]; then
    curl -s -X POST -H 'Content-type: application/json' \
      --data "{\"text\":\"${MSG}\"}" \
      "$SLACK_WEBHOOK" >/dev/null 2>&1
  fi
}

send_gchat() {
  local MSG="$1"
  if [ -n "$GCHAT_WEBHOOK" ]; then
    curl -s -X POST -H 'Content-Type: application/json' \
      -d "{\"text\":\"${MSG}\"}" \
      "$GCHAT_WEBHOOK" >/dev/null 2>&1
  fi
}

notify_all() {
  local MSG="$1"
  send_slack "$MSG"
  send_gchat "$MSG"
}

log() {
  echo "[$(date '+%F %T')] $1" | tee -a "$LOGFILE"
}

log "===== Backup Start on ${HOSTNAME} ====="
notify_all "[Proxmox Backup] 시작: ${HOSTNAME} / ${DATE}"

for VMID in $VM_LIST; do
  log "VM ${VMID} 백업 시작"

  vzdump "$VMID" \
    --dumpdir "$STORAGE_DIR" \
    --mode snapshot \
    --compress zstd \
    --bwlimit 50000 \
    --ionice 7 \
    --lockwait 600 >> "$LOGFILE" 2>&1

  RC=$?

  if [ $RC -eq 0 ]; then
    log "VM ${VMID} 백업 성공"
  else
    log "VM ${VMID} 백업 실패 (rc=${RC})"
    notify_all "[Proxmox Backup] 실패: VM ${VMID} / Host ${HOSTNAME} / rc=${RC}"
  fi

  sleep 30
done

log "===== Backup End ====="
notify_all "[Proxmox Backup] 완료: ${HOSTNAME} / $(date '+%Y-%m-%d %H:%M:%S')"

2-2. 실행 권한 부여

chmod +x /root/multi-vm-backup.sh

2-3. 수동 실행

nohup /root/multi-vm-backup.sh > /var/log/multi-vm-backup-nohup.log 2>&1 &

2-4. Crontab 자동 실행

매일 새벽 2시에 실행 예시:

crontab -e
0 2 * * * /root/multi-vm-backup.sh

3. Kubernetes VM 백업 순서 권장안

현재 구조가 Kubernetes Master / Worker 혼합이라면, 단순 VM 번호 순서보다 아래 순서를 권장합니다.

권장 순서

1단계: 일반 VM

  • 100
  • 101
  • 102

2단계: Worker

  • 203
  • 204
  • 205

3단계: Master

  • 200
  • 201
  • 202

이유

  • Worker 먼저 백업하면 서비스 워크로드 영향이 상대적으로 적음
  • Master를 동시에 백업하면 etcd / control plane 영향 가능성 존재
  • 순차 처리 시 클러스터 안정성 확보에 유리함

예시:

VM_LIST="100 101 102 203 204 205 200 201 202"

4. 백업 실패 알림 연동


4-1. Slack 알림

Slack Incoming Webhook 생성

  1. Slack App 생성
  2. Incoming Webhooks 활성화
  3. 대상 채널 선택
  4. Webhook URL 발급

예시 설정:

SLACK_WEBHOOK="https://hooks.slack.com/services/XXX/YYY/ZZZ"

단건 테스트

curl -X POST -H 'Content-type: application/json' \
  --data '{"text":"[TEST] Proxmox backup alert"}' \
  "https://hooks.slack.com/services/XXX/YYY/ZZZ"

4-2. Google Chat 알림

Google Chat Webhook 생성

  1. Google Chat Space 생성
  2. Space 관리 메뉴에서 Incoming Webhook 추가
  3. Webhook URL 복사

예시 설정:

GCHAT_WEBHOOK="https://chat.googleapis.com/v1/spaces/AAA/messages?key=BBB&token=CCC"

단건 테스트

curl -X POST -H 'Content-Type: application/json' \
  -d '{"text":"[TEST] Proxmox backup alert"}' \
  "https://chat.googleapis.com/v1/spaces/AAA/messages?key=BBB&token=CCC"

4-3. 알림 운영 팁

  • 시작 / 성공 / 실패를 모두 보내면 너무 시끄러울 수 있음
  • 실무에서는 보통 실패만 알림 또는 일일 완료 요약 + 실패 즉시 알림 형태를 권장
  • Webhook URL은 스크립트에 직접 넣지 말고 별도 환경파일로 분리하는 것이 안전함

예시 환경파일:

파일명: /root/.backup-alert.env

SLACK_WEBHOOK="https://hooks.slack.com/services/XXX/YYY/ZZZ"
GCHAT_WEBHOOK="https://chat.googleapis.com/v1/spaces/AAA/messages?key=BBB&token=CCC"

스크립트 상단:

source /root/.backup-alert.env

권한 설정:

chmod 600 /root/.backup-alert.env

5. PBS(Proxmox Backup Server) 구축 가이드

PBS는 vzdump --dumpdir 방식보다 운영성이 훨씬 좋습니다.
특히 VM 수가 늘어나거나 장기 보관, 중복 제거, 증분 백업이 필요하면 PBS가 더 적합합니다.


5-1. PBS 장점

  • 중복 제거(deduplication)
  • 증분 백업(incremental backup)
  • 빠른 백업 / 복구
  • 백업 무결성 검증 가능
  • 보관 정책(prune) 관리 편리
  • Proxmox VE와 연동이 쉬움

5-2. 권장 구성

최소 구성 예시

  • PBS 전용 서버 1대
  • CPU: 4 Core 이상
  • Memory: 8GB 이상
  • Storage: 백업 용량 기준 별도 디스크
  • Network: Proxmox VE와 1GbE 이상 권장

권장 구성 예시

  • CPU: 8 Core
  • Memory: 16GB 이상
  • Storage: RAID1 또는 RAID5/6, 가능하면 SSD Cache 고려
  • 백업망 분리 가능하면 별도 백업 네트워크 구성

5-3. PBS 설치 개요

PBS 전용 서버에 설치합니다.

ISO 또는 Debian 기반 설치

  • PBS ISO 설치
  • 또는 Debian 설치 후 PBS 패키지 설치

설치 후 웹 접속 예시:

https://PBS_IP:8007

5-4. PBS 저장소(Datastore) 생성

웹 UI에서 Datastore 생성:

예시:

  • Datastore Name: pbs-backup
  • Backing Path: /backup/pbs

CLI 예시:

proxmox-backup-manager datastore create pbs-backup /backup/pbs

5-5. Proxmox VE에 PBS 등록

PVE 웹 UI:

  • Datacenter
  • Storage
  • Add
  • Proxmox Backup Server

입력값 예시:

  • ID: pbs01
  • Server: 192.168.0.50
  • User: backup@pbs
  • Datastore: pbs-backup
  • Fingerprint: PBS에서 확인

5-6. PBS 대상 백업 작업 생성

PVE 웹 UI:

  • Datacenter
  • Backup
  • Add

설정 예시:

  • Storage: pbs01
  • Schedule: daily
  • Mode: snapshot
  • Selection: 원하는 VM 선택
  • Max Workers: 1

Max Workers = 1 이 핵심입니다.
여러 VM을 동시에 밀지 않고 순차 처리합니다.


5-7. 보관 정책(Prune) 예시

예시 정책:

  • keep-last: 7
  • keep-daily: 7
  • keep-weekly: 4
  • keep-monthly: 6

CLI 예시:

proxmox-backup-manager prune-job create pbs-backup \
  --schedule 'daily' \
  --keep-last 7 \
  --keep-daily 7 \
  --keep-weekly 4 \
  --keep-monthly 6

5-8. 검증 작업(Verify) 권장

백업은 저장만 하면 끝이 아니라 검증도 중요합니다.

예시:

proxmox-backup-manager verify-job create pbs-backup --schedule 'sun 03:00'

6. PBS 운영 권장 아키텍처

소규모 환경

  • PVE 1대
  • PBS 1대
  • 백업 대상 VM 10~30대

중규모 환경

  • PVE Cluster
  • PBS 전용 서버
  • NAS 또는 대용량 로컬 디스크
  • 백업 네트워크 분리

운영 팁

  • PBS는 운영 VM과 같은 스토리지에 두지 않는 것이 좋음
  • 백업 저장소는 가급적 운영 스토리지와 분리
  • 장기적으로는 외부 NAS / 오브젝트 스토리지 2차 보관도 고려

7. 실무 점검 포인트

7-1. 백업이 멈춘 것처럼 보일 때

확인 명령어:

ps -ef | grep vzdump
tail -f /var/log/proxmox-multi-backup.log
iostat -x 1
df -h

주요 원인

  • HDD IO 병목
  • NFS 지연
  • 압축 CPU 부족
  • 저장소 용량 부족
  • 스냅샷 lock 대기

7-2. 백업 성능 개선 팁

  • HDD면 --bwlimit 꼭 사용
  • CPU 부족하면 --compress lzo 또는 --compress 0
  • PBS 도입 시 증분 백업으로 성능 체감 개선 가능
  • 백업 시간대는 업무 외 시간으로 분리

8. 추천 최종 운영안

현재 바로 가능한 방식

  1. vzdump + nohup
  2. 다중 VM 순차 스크립트
  3. 실패 시 Slack / Google Chat 알림
  4. cron 등록

중장기 권장 방식

  1. PBS 전용 서버 구축
  2. PVE에서 PBS 스토리지 등록
  3. Backup Job + Prune Job + Verify Job 운영
  4. 장애 알림은 PBS / PVE 로그와 함께 ChatOps 연동

9. 최종 결론

가장 현실적인 운영 순서는 아래와 같습니다.

1단계

현재 환경에서 바로 적용:

  • nohup 기반 백그라운드 실행
  • 순차 다중 VM 스크립트
  • 실패 알림 연동

2단계

환경이 커지면 전환:

  • PBS 구축
  • 증분 백업
  • 중복 제거
  • 보관 정책 자동화
  • 무결성 검증

즉,
소규모는 vzdump 스크립트, 중장기 운영은 PBS가 정답에 가깝습니다.


10. 부록

10-1. 가장 간단한 단일 VM 백그라운드 실행

nohup vzdump 200 \
  --dumpdir /mnt/hdd \
  --mode snapshot \
  --compress zstd \
  > /var/log/vzdump-200.log 2>&1 &

10-2. 가장 실무적인 다중 VM 실행

nohup /root/multi-vm-backup.sh > /var/log/multi-vm-backup-nohup.log 2>&1 &

10-3. 환경파일 분리 예시

source /root/.backup-alert.env

필요 시 다음 문서로 이어서 확장할 수 있습니다.

  • Proxmox 백업 장애 분석 가이드
  • PBS 장애 대응 가이드
  • Kubernetes VM 백업/복구 절차서
  • Ansible 기반 Proxmox 백업 자동화 문서
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2026/03   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함