본문 바로가기
IT/Proxmox

[Proxmox] Proxmox VE Ceph 클러스터 구축 및 관리 완벽 가이드

by 수누다 2026. 4. 26.

홈랩에 엔터프라이즈급 스토리지를? Proxmox Ceph 클러스터 도전기

솔직히 말씀드리면, 처음 Proxmox VE에서 Ceph 클러스터를 구축하려고 했을 때 겁부터 먹었습니다. "분산 스토리지"라는 단어 자체가 주는 무게감이 있잖아요. 대기업 IDC에서나 쓰는 그런 거 아닌가 싶었거든요. 근데 막상 해보니까... 생각보다 훨씬 접근하기 좋더라고요. 물론 삽질은 좀 했습니다 ㅎㅎ.

Proxmox Ceph 클러스터는 단순히 스토리지 용량을 늘리는 게 아니에요. VM(가상 머신)이나 컨테이너가 어느 노드에서 죽더라도 데이터가 살아있는, 진짜 고가용성(High Availability) 인프라를 만드는 핵심 기술이거든요. 이걸 홈랩에 구현할 수 있다는 게 Proxmox VE의 진짜 매력이라고 생각해요. 오늘은 제가 직접 구축하면서 배운 것들을 처음부터 끝까지 다 풀어드릴게요.

▲ Proxmox VE 3노드 Ceph 클러스터 전체 아키텍처 — Public Network, Cluster Network, OSD 구성을 한눈에 볼 수 있습니다.


Ceph가 뭔지부터 제대로 이해하고 시작하자

쉽게 말해, Ceph는 어떤 녀석인가요?

Ceph를 한 줄로 설명하면 "여러 서버의 디스크를 하나의 거대한 스토리지 풀로 묶어주는 오픈소스 분산 스토리지 시스템"입니다. 쉽게 비유하자면, 서버 3대가 있으면 각 서버의 디스크를 전부 합쳐서 하나의 큰 창고처럼 쓰는 거예요. 게다가 데이터를 여러 곳에 복사해두기 때문에 서버 한 대가 꺼져도 데이터는 안전합니다.

Proxmox VE는 Ceph를 웹 UI에서 직접 설치하고 관리할 수 있도록 통합해놨어요. 예전에 Ceph를 별도로 구성하던 시절을 생각하면 정말 편해진 거죠.

핵심 구성 요소 이해하기

구축 전에 이 개념들은 꼭 알고 시작하세요. 처음엔 저도 이게 뭔가 싶었는데, 알고 나면 구성이 훨씬 명확하게 보입니다.

  • MON (Monitor): 클러스터 상태를 감시하는 감시자. 클러스터 맵(어디에 데이터가 있는지 지도)을 관리합니다. 홀수 개로 운영해야 해요 (3개 권장).
  • OSD (Object Storage Daemon): 실제 데이터를 저장하는 데몬. 디스크 하나당 OSD 하나가 대응됩니다. 클러스터의 일꾼이라고 생각하시면 돼요.
  • MGR (Manager): 클러스터 모니터링과 플러그인 관리를 담당. 대시보드, Prometheus 연동 등이 여기서 나옵니다.
  • MDS (Metadata Server): CephFS(파일 시스템)를 쓸 때만 필요한 메타데이터 서버. 오늘 구성에서는 선택사항입니다.
  • Pool (풀): 데이터를 저장하는 논리적 구획. 복제 수(Replication Factor)를 풀 단위로 설정합니다.
  • PG (Placement Group): 데이터를 OSD에 분산 배치하는 단위. 너무 많거나 적으면 성능에 영향을 줍니다.

네트워크 구성, 이게 제일 중요합니다

여기서 중요한 포인트! Ceph는 네트워크를 두 개로 분리하는 걸 강력히 권장합니다.

네트워크 종류 역할 권장 대역폭 비고
Public Network (퍼블릭 네트워크) 클라이언트 ↔ Ceph 통신, MON 통신 1Gbps 이상 VM이 스토리지에 접근하는 경로
Cluster Network (클러스터 네트워크) OSD 간 복제 및 리밸런싱 트래픽 10Gbps 권장 분리하면 성능 대폭 향상

홈랩에서 10Gbps 스위치가 없다면 최소한 두 개의 물리 인터페이스로 분리만 해도 효과가 있어요. 저는 처음에 네트워크를 하나로 합쳐서 썼다가 OSD 리밸런싱 때 VM 네트워크가 뚝뚝 끊기는 걸 경험했거든요 ㅠㅠ.


구축 환경 및 사전 준비

최소 구성 요구사항

Ceph 클러스터는 최소 3개 노드가 필요합니다. 이건 협상이 안 되는 부분이에요. MON이 과반수 투표로 클러스터 상태를 결정하기 때문에 짝수 노드는 스플릿 브레인(Split-Brain) 위험이 있거든요.

  • 노드 수: 최소 3개 (홀수 권장)
  • OS: Proxmox VE 7.x 또는 8.x
  • OSD용 디스크: 노드당 최소 1개 (OS 디스크와 별도)
  • 네트워크: 노드 간 통신 가능한 네트워크 (가급적 2개 분리)
  • RAM: OSD 하나당 약 1~2GB 여유 RAM 필요

제 홈랩 구성은 이렇습니다:

  • 노드 3개: pve01, pve02, pve03
  • 각 노드 OSD 디스크: 500GB SSD × 2개
  • Public Network: 192.168.10.0/24
  • Cluster Network: 192.168.20.0/24

Proxmox 클러스터 먼저 구성하기

Ceph를 시작하기 전에 Proxmox VE 클러스터가 먼저 구성되어 있어야 합니다. 아직 안 하셨다면 pve01에서 시작하세요.

# pve01에서 클러스터 생성
pvecm create my-homelab-cluster

# pve02, pve03에서 클러스터 참여
pvecm add 192.168.10.101  # pve01의 IP

# 클러스터 상태 확인
pvecm status

클러스터가 정상이면 이제 Ceph 설치로 넘어갑니다.


Proxmox Ceph 클러스터 단계별 구축

▲ Proxmox VE 웹 UI에서 Ceph 설치 마법사를 통해 직관적으로 구성할 수 있습니다. GUI와 CLI 모두 지원합니다.

1단계: Ceph 패키지 설치

모든 노드에서 아래 작업을 수행해야 합니다. Proxmox 웹 UI에서 각 노드 → Ceph → Install을 클릭해도 되고, CLI로 해도 됩니다. 저는 CLI가 더 빠르더라고요.

# 모든 노드(pve01, pve02, pve03)에서 실행
# Proxmox VE 8.x 기준 (Ceph Reef/Quincy 지원)
pveceph install --version reef

# 설치 완료 후 확인
ceph --version

💡 : Proxmox VE 8.x에서는 Ceph Reef(18.x)를 권장합니다. 버전은 Proxmox 버전에 맞게 선택하세요.

2단계: Ceph 초기화 (pve01에서만)

클러스터 초기화는 한 노드에서만 합니다. 여기서 네트워크 설정이 핵심이에요.

# pve01에서만 실행
# Public Network와 Cluster Network를 분리해서 설정
pveceph init \
  --network 192.168.10.0/24 \
  --cluster-network 192.168.20.0/24

# 초기화 확인
ceph status

3단계: MON (Monitor) 추가

각 노드에 MON을 추가합니다. 3개 이상의 홀수로 유지하는 게 핵심이에요.

# pve01에서 순서대로 실행
# pve01 MON 추가
pveceph mon create pve01

# pve02 MON 추가 (pve02에서 실행하거나 pve01에서 원격 실행)
pveceph mon create pve02

# pve03 MON 추가
pveceph mon create pve03

# MON 상태 확인
ceph mon stat

4단계: MGR (Manager) 추가

# 각 노드에 MGR 추가 (Active/Standby 구성)
pveceph mgr create pve01
pveceph mgr create pve02
pveceph mgr create pve03

# MGR 상태 확인
ceph mgr stat

5단계: OSD 추가 — 진짜 데이터 저장소 만들기

이 단계가 제일 중요합니다. OSD를 추가하기 전에 대상 디스크가 완전히 초기화되어 있어야 해요. 파티션이 남아있으면 추가가 안 됩니다.

# 디스크 초기화 (주의: 데이터 전부 날아갑니다!)
# 각 노드에서 OSD용 디스크 확인
lsblk

# 디스크에 남은 파티션/서명 제거
wipefs -a /dev/sdb
wipefs -a /dev/sdc

# OSD 추가 (pve01의 /dev/sdb, /dev/sdc)
pveceph osd create /dev/sdb
pveceph osd create /dev/sdc

# pve02에서도 동일하게
pveceph osd create /dev/sdb
pveceph osd create /dev/sdc

# pve03에서도 동일하게
pveceph osd create /dev/sdb
pveceph osd create /dev/sdc

# OSD 상태 확인
ceph osd stat
ceph osd tree

⚠️ 주의: wipefs 명령어는 되돌릴 수 없습니다. 반드시 올바른 디스크를 대상으로 하는지 lsblk로 두 번, 세 번 확인하세요. 저는 처음에 하마터면 OS 디스크를 날릴 뻔 했습니다 식은땀 났었어요.

6단계: Pool (풀) 생성

이제 실제 VM 디스크를 저장할 풀을 만들 차례입니다.

# VM 디스크용 RBD(RADOS Block Device) 풀 생성
# size=3: 데이터를 3개 복사 (3노드에 각 1개씩)
# min_size=2: 최소 2개 복사본이 있어야 쓰기 허용
pveceph pool create vm-pool --add-storages

# 풀 상세 설정 (복제 수 조정)
ceph osd pool set vm-pool size 3
ceph osd pool set vm-pool min_size 2

# PG 수 설정 (OSD 수에 따라 조정 — OSD 6개 기준)
# 공식: (OSD 수 × 100) / 복제 수 → 가장 가까운 2의 제곱수
ceph osd pool set vm-pool pg_num 128
ceph osd pool set vm-pool pgp_num 128

# 풀 상태 확인
ceph osd pool ls detail

💡 PG 수 계산 팁: OSD가 6개면 (6 × 100) / 3 = 200 → 2의 제곱수로 올림하면 256이 되지만, 홈랩 규모에서는 128도 충분합니다. 너무 많으면 오히려 오버헤드가 생겨요.

7단계: Proxmox Storage에 Ceph 등록

# Proxmox 스토리지로 등록 (이미 --add-storages 옵션으로 자동 등록됐을 수 있음)
# 웹 UI: Datacenter → Storage → Add → RBD

# CLI로 확인
pvesm status

⚠️ 실제로 겪은 트러블슈팅 모음

문제 1: OSD가 계속 down/out 상태

OSD를 추가했는데 계속 down 상태로 떠있더라고요. 원인을 찾아보니 디스크에 예전 Ceph 서명이 남아있었어요.

# 해결 방법: 더 강력한 디스크 초기화
dd if=/dev/zero of=/dev/sdb bs=1M count=100
wipefs -a /dev/sdb

# 그래도 안 되면 sgdisk로 파티션 테이블 초기화
sgdisk --zap-all /dev/sdb

# 이후 OSD 재추가
pveceph osd create /dev/sdb

문제 2: ceph status가 HEALTH_WARN — "too few PGs per OSD"

PG 수가 OSD 대비 너무 적거나 많을 때 나오는 경고입니다. 이건 풀의 PG 수를 조정하면 됩니다.

# 현재 PG 상태 확인
ceph osd pool ls detail

# PG 수 조정 (늘릴 때는 두 배씩)
ceph osd pool set vm-pool pg_num 256
ceph osd pool set vm-pool pgp_num 256

# PG 자동 조정 활성화 (Nautilus 이상)
ceph osd pool set vm-pool pg_autoscale_mode on

문제 3: 클러스터 네트워크 쪽 OSD 통신 불량

Cluster Network를 분리했는데 OSD 간 복제가 안 되는 경우가 있었어요. 방화벽 문제였습니다.

# Ceph OSD 포트 허용 (6800-7300)
# pve 방화벽 설정 확인
cat /etc/pve/firewall/cluster.fw

# 임시로 방화벽 꺼서 테스트
pve-firewall stop

# 정상 확인 후 방화벽 규칙 추가
# /etc/pve/firewall/cluster.fw 에 추가:
# [RULES]
# IN ACCEPT -p tcp --dport 6800:7300 -s 192.168.20.0/24

문제 4: VM 마이그레이션 시 느림

Ceph 스토리지로 라이브 마이그레이션(Live Migration)을 했는데 엄청 느렸어요. 알고 보니 마이그레이션 네트워크가 Public Network를 타고 있어서였습니다. Proxmox에서 마이그레이션 전용 네트워크를 지정해주면 해결됩니다.

# /etc/pve/datacenter.cfg 에서 마이그레이션 네트워크 설정
migration: secure
migration_unsecure: 192.168.20.0/24

✅ 클러스터 상태 검증 및 모니터링

▲ Ceph 클러스터가 정상 구성되면 HEALTH_OK 상태와 함께 OSD 트리, 풀 사용량을 실시간으로 확인할 수 있습니다.

필수 확인 명령어

# 전체 클러스터 상태 (이게 제일 중요)
ceph status
ceph health detail

# OSD 상태 및 트리 구조
ceph osd tree
ceph osd stat

# 풀 사용량
ceph df
ceph osd pool stats

# I/O 실시간 모니터링
ceph -w

# 성능 확인
rados bench -p vm-pool 10 write --no-cleanup
rados bench -p vm-pool 10 seq

정상 상태 체크리스트

  • ceph statusHEALTH_OK 표시
  • ✅ MON 쿼럼(Quorum): 3/3 참여
  • ✅ OSD: all up, all in (예: 6/6 OSDs up)
  • ✅ PG: active+clean 상태
  • ✅ MGR: active 1개 + standby 2개

Proxmox 대시보드에서도 확인

웹 UI에서 Datacenter → Ceph 메뉴로 가면 OSD 상태, 풀 사용량, I/O 그래프를 한눈에 볼 수 있어요. 이게 진짜 편합니다. CLI로 하나씩 확인하던 시절이 생각나서 감동받았던 기억이 나네요.


CephFS로 공유 파일시스템도 만들어보자 (보너스)

VM 디스크(RBD) 외에도 CephFS(Ceph File System)를 구성하면 여러 VM이 동시에 마운트할 수 있는 공유 스토리지를 만들 수 있어요. Kubernetes의 PVC(Persistent Volume Claim)에도 활용할 수 있고요.

# MDS(Metadata Server) 추가
pveceph mds create pve01
pveceph mds create pve02  # 스탠바이용

# CephFS 생성
pveceph fs create --name cephfs --add-storages

# 상태 확인
ceph fs status
ceph mds stat

CephFS 마운트 설정은 다음 글에서 Kubernetes 연동과 함께 자세히 다룰 예정입니다!


구성 옵션 비교 — 내 환경에 맞는 선택은?

▲ 환경별 Ceph 구성 전략 비교 — 홈랩, 소규모 사업장, 엔터프라이즈 환경에 따라 최적 구성이 다릅니다.

구성 옵션 홈랩 (3노드) 소규모 프로덕션 엔터프라이즈
복제 수 (size) 2~3 3 3+
OSD 디스크 SATA SSD NVMe SSD NVMe + WAL 분리
클러스터 네트워크 1Gbps 분리 10Gbps 25Gbps+
MON 수 3 3~5 5
BlueStore WAL/DB OSD와 동일 디스크 별도 NVMe 권장 별도 NVMe 필수

홈랩에서는 복제 수를 2로 설정해서 실제 사용 가능 용량을 늘리는 분들도 있는데, 저는 개인적으로 3을 유지하는 걸 권장합니다. 노드 하나가 죽었을 때도 데이터 안전성이 보장되니까요.


자주 묻는 질문 (FAQ)

Q. Ceph는 2노드로 구성할 수 없나요?

기술적으로 가능은 하지만 권장하지 않습니다. MON이 2개면 한 노드가 죽었을 때 쿼럼을 유지할 수 없어서 클러스터 전체가 멈춥니다. 최소 3노드를 유지하세요.

Q. 기존 Proxmox에 Ceph를 나중에 추가해도 되나요?

네, 됩니다! Proxmox 클러스터가 이미 구성된 상태에서 Ceph를 나중에 추가해도 전혀 문제없어요. 저도 그렇게 했거든요. 기존 VM들은 로컬 스토리지를 계속 쓰고, 새 VM부터 Ceph 풀을 지정하면 됩니다.

Q. OSD 디스크는 HDD도 되나요?

됩니다. 다만 HDD는 레이턴시(응답 지연)가 높아서 VM 성능에 영향을 줍니다. 가능하면 SSD를 권장하고, HDD를 써야 한다면 BlueStore의 WAL(Write-Ahead Log)과 DB를 별도 SSD에 올리는 구성을 고려해보세요.

Q. 클러스터에 노드를 나중에 추가할 수 있나요?

네, Ceph의 가장 큰 장점 중 하나가 바로 수평 확장(Horizontal Scaling)입니다. 노드를 추가하면 Ceph가 자동으로 데이터를 재분배(Rebalancing)합니다. 다만 리밸런싱 중에는 I/O가 좀 느려질 수 있어요.


마무리 — Proxmox Ceph의 진짜 가치

처음 Ceph를 공부할 때 "이게 홈랩에서 쓸 수 있는 건가?" 싶었는데, 이제는 제 인프라에서 없어서는 안 될 핵심이 됐습니다. Proxmox VE + Ceph 클러스터 조합이 주는 진짜 가치는 이거예요.

  • 🎉 진짜 고가용성: 노드 하나가 죽어도 VM이 살아있는 인프라
  • 🎉 스토리지 통합 관리: 웹 UI 하나로 모든 걸 관리
  • 🎉 무중단 확장: 서비스 중단 없이 디스크/노드 추가 가능
  • 🎉 오픈소스 무료: 엔터프라이즈급 기능을 라이선스 비용 없이

물론 단점도 있어요. 초기 구성이 복잡하고, 리소스(특히 RAM)를 꽤 먹습니다. 그리고 문제가 생겼을 때 디버깅이 쉽지 않을 수 있고요. 하지만 한 번 제대로 구성해두면 그 안정성은 정말 믿음직스럽습니다.

다음 글에서는 Ceph 클러스터 위에 Kubernetes를 올리고 CSI(Container Storage Interface) 드라이버로 연동하는 방법을 다룰 예정이에요. 이전에 Proxmox 기본 클러스터 구성 글도 참고하시면 이번 내용이 더 잘 이해되실 겁니다.

궁금한 점이나 삽질 경험이 있으시면 댓글로 남겨주세요. 저도 아직 배우는 중이니까요 😄