13년차의 서버실

서버, 인프라, 홈랩 기술 블로그

[태그:] NFS

  • [Proxmox] Proxmox TrueNAS SCALE ZFS 비교: 홈랩 선택 가이드

    [Proxmox] Proxmox TrueNAS SCALE ZFS 비교: 홈랩 선택 가이드

    Proxmox TrueNAS SCALE ZFS 비교: 홈랩 스토리지 선택 가이드

    Proxmox TrueNAS SCALE ZFS 비교를 찾다 보면 결국 부딪히는 건 기능표보다 장애를 어떻게 감당할지입니다. 저도 홈랩 NAS를 몇 번 갈아엎고 나서야 이걸 제대로 봤습니다. 둘 다 ZFS를 쓴다는 사실보다, 문제가 났을 때 어느 계층을 먼저 의심해야 하는 구조인가가 훨씬 중요하더라고요.

    같은 디스크, 같은 HBA, 같은 ZFS라도 Proxmox VE는 VM과 LXC가 주인공인 설계에 가깝고, TrueNAS SCALE은 데이터셋과 공유 정책이 중심입니다. 참고로 TrueNAS SCALE은 2025년 25.04 계열부터 커뮤니티 에디션 명칭이 함께 쓰이지만, 검색과 실사용 맥락에선 여전히 TrueNAS SCALE이라는 표현이 널리 남아 있습니다. 그래서 둘 중 무엇이 더 낫냐고 묻기보다, 내 홈랩에서 가장 먼저 살아 있어야 하는 것이 VM인지 데이터인지부터 정하는 쪽이 훨씬 정확합니다.

    운영 피로도도 빼놓기 어렵습니다. 한 대 서버에 VM, LXC, SMB, NFS, iSCSI, 백업 저장소까지 전부 몰아넣으면 평소엔 편해 보여도 디스크 이슈가 한 번 터졌을 때 복구 동선이 길어집니다. 저도 초기에 부팅 풀과 VM 스토리지, 백업 파일을 너무 가깝게 붙여놨다가 유지보수 창에서 손이 괜히 빨라지는 경험을 했거든요. 홈랩은 성능 숫자보다도 구조를 단순하게 유지하는 능력이 오래 갑니다.

    Proxmox TrueNAS SCALE ZFS 비교를 보여주는 홈랩 아키텍처 다이어그램

    Proxmox VE와 TrueNAS SCALE이 각각 어떤 위치에서 가장 빛나는지 한눈에 보여주는 홈랩 구성 예시입니다.

    왜 Proxmox TrueNAS SCALE ZFS 비교가 자주 나올까요?

    겉으로 보면 둘 다 웹 UI가 있고, 둘 다 ZFS를 쓰고, 둘 다 스냅샷을 말합니다. 그런데 실제 운영 동선은 꽤 다릅니다. Proxmox VE는 저장소를 게스트 워크로드를 올려두는 기반으로 보고, TrueNAS SCALE은 저장소를 권한, 공유, 스냅샷, 복제 정책을 설계하는 대상으로 다룹니다.

    이 차이는 같은 작업을 할 때도 바로 드러납니다. Proxmox VE에선 "이 VM 디스크를 어디 둘까"가 먼저고, TrueNAS SCALE에선 "이 데이터셋을 누구에게 어떤 프로토콜로 공개할까"가 먼저입니다. 둘 다 ZFS 위에서 돌아가지만, 관리 UI가 사용자를 유도하는 방향이 달라서 실제 사용감도 꽤 다릅니다.

    제가 보기엔 이 비교에서 가장 많이 놓치는 포인트가 하나 있습니다. ZFS를 잘 쓰는 것과 ZFS를 얹은 제품을 잘 운영하는 것은 다른 문제라는 점입니다. 전자는 풀 상태와 데이터셋 구조, 스냅샷 정책의 문제이고, 후자는 장애 범위와 복구 순서, 권한 모델, 서비스 의존성의 문제입니다.

    핵심 개념: ZFS 기반 홈랩 스토리지를 어떻게 봐야 하나

    1. Proxmox VE는 "VM이 주인공"인 구조

    Proxmox VE에서 ZFS는 보통 VM 디스크, 컨테이너 루트 파일시스템, 스냅샷, 복제, 백업 작업의 기반으로 쓰입니다. 즉 스토리지 관리의 중심이 파일 공유가 아니라 게스트 워크로드의 수명주기에 붙어 있습니다. Kubernetes 테스트 노드, 방화벽 VM, DB 실험 환경, Git 러너, 내부 서비스처럼 VM과 LXC가 자주 생겼다 지워지는 환경이라면 이 흐름이 정말 자연스럽습니다.

    • 장점: VM/LXC 생성과 삭제, 스냅샷, 스토리지 매핑 동선이 짧습니다.
    • 장점: 하이퍼바이저와 스토리지가 같은 컨텍스트에 있어 초기 구축 속도가 빠릅니다.
    • 주의: 파일 서버 역할까지 한 박스에 합치면 장애 분석에서 컴퓨트와 스토리지가 한 번에 얽힙니다.
    • 주의: 백업 파일까지 같은 풀에 두면 "백업은 있는데 공간이 부족해 복구가 불편한" 상황이 생기기 쉽습니다.

    2. TrueNAS SCALE은 "데이터가 주인공"인 구조

    TrueNAS SCALE은 데이터셋 경계, 공유 정책, 스냅샷, 복제, SMB/NFS/iSCSI 제공이 우선입니다. VM 기능도 있지만 운영 감각으로 보면 "가상화가 가능한 NAS"에 더 가깝습니다. 가족 사진, 미디어 라이브러리, 백업 저장소, 다른 하이퍼바이저에 제공할 공유 스토리지, 장기 보관 데이터처럼 데이터 수명주기가 먼저인 환경에서 확실히 손에 맞습니다.

    • 장점: 데이터셋 기준으로 권한, 스냅샷, 공유 대상을 나누기 쉽습니다.
    • 장점: SMB, NFS, iSCSI처럼 외부 소비자가 많은 환경에서 관리 포인트가 명확합니다.
    • 주의: VM 운영을 주력으로 삼으면 Proxmox보다 동선이 길고, 하이퍼바이저 관점의 자동화도 덜 자연스럽습니다.
    • 주의: NAS 안에서 애플리케이션과 스토리지를 함께 굴릴 때도 결국 I/O 혼합 문제는 피하기 어렵습니다.

    Proxmox VE vs TrueNAS SCALE 비교 표

    비교 항목 Proxmox VE TrueNAS SCALE 실무 판단 포인트
    핵심 역할 가상화 호스트 NAS 및 공유 스토리지 게스트가 우선이면 Proxmox, 데이터 보존이 우선이면 TrueNAS
    ZFS를 바라보는 관점 VM 디스크와 컨테이너 저장소 데이터셋, 공유, 스냅샷, 복제 같은 ZFS라도 운영 질문이 다릅니다
    장애 시 영향 범위 올인원일수록 VM과 파일 서비스가 함께 영향 분리형이면 NAS 장애를 별도 격리 가능 장애 절연이 중요하면 분리형이 유리합니다
    가상화 경험 KVM, LXC 중심으로 매우 자연스러움 가능하지만 주력 워크플로는 아님 실험용 서비스가 많을수록 Proxmox 쪽 손이 덜 갑니다
    공유 프로토콜 운영 외부 스토리지 소비자 역할에 적합 SMB, NFS, iSCSI 제공자 역할에 적합 다른 장비에 스토리지를 배포할수록 TrueNAS가 편합니다
    설정 실수의 흔한 형태 부팅 풀, VM 풀, 백업 위치를 과하게 합침 데이터셋 경계 없이 공유부터 만듦 문제는 기능 부족보다 초기 구조 설계에서 시작됩니다
    확장 방향 클러스터, 노드 증설, 게스트 확장 스토리지 증설, 복제, 보관 체계 확장 확장 축이 컴퓨트인지 스토리지인지 먼저 정해야 합니다
    추천하지 않는 경우 메인 가족 데이터와 백업을 한 호스트에 몰아둘 때 VM 자동화와 잦은 게스트 실험이 주업무일 때 주요 목표와 제품 성격이 어긋나면 운영 피로도가 커집니다

    제가 직접 굴려보며 정리한 현실적인 배치 패턴

    홈랩에선 대체로 세 가지 구조로 정리됩니다.

    1. 올인원 Proxmox VE: 한 대 서버에 Proxmox VE와 ZFS를 올리고, VM과 LXC를 로컬 스토리지에서 직접 운영
    2. 분리형: Proxmox VE는 컴퓨트, TrueNAS SCALE은 스토리지 전용으로 역할 분리
    3. TrueNAS 중심: 파일 서버와 백업이 주력이고, VM은 소수만 운영

    초기 구축 난이도만 보면 1번이 가장 쉽습니다. 장비도 덜 들고, 네트워크 설계도 단순합니다. 다만 올인원은 문제가 나기 전까지는 단순하고, 문제가 난 뒤에는 복잡해지는 구조입니다. 반대로 2번은 처음부터 케이블, 스위치, 전력, 장비 공간을 더 생각해야 하지만 장애가 났을 때 원인 분리가 빠릅니다. 3번은 홈 미디어, 문서 보관, 백업 허브처럼 데이터 중심 가정 환경에 잘 맞습니다.

    제 기준으로는 이렇게 나뉩니다. 하루에 VM을 여러 번 만들고 지우거나, LXC 템플릿과 테스트 클러스터를 자주 만지면 Proxmox VE 쪽이 맞습니다. 반면 파일 공유, 스냅샷, 복제, ACL, 사용자 권한, 백업 보존 기간이 더 중요하면 TrueNAS SCALE이 더 손에 맞습니다. 양쪽이 모두 중요하다고 느껴지는 시점부터는 사실상 분리형으로 가는 편이 덜 후회하더라고요.

    가상화 노드와 NAS를 역할별로 분리했을 때 관리 포인트가 어떻게 달라지는지 보여주는 예시입니다.

    실전 구현 1: Proxmox VE에서 ZFS 상태 확인과 스토리지 구조 점검

    운영 전에 가장 먼저 볼 건 성능 수치가 아니라 풀의 건강 상태와 저장소 역할 분리입니다. ZFS가 불안정한데 그 위에 VM을 계속 얹는 건, 바닥이 젖은 창고에 선반부터 세우는 느낌과 비슷합니다.

    zpool status -v
    zpool list -o name,size,alloc,free,frag,health
    zfs list -o name,used,avail,refer,mountpoint
    pvesm status
    journalctl -u pvestatd --since -1h

    위 명령은 Proxmox VE에서 ZFS 상태와 스토리지 인식 상태를 빠르게 같이 볼 때 유용합니다. 특히 pvesm status와 journalctl -u pvestatd는 ZFS 자체 문제인지, 아니면 Proxmox가 저장소를 인식하는 상위 계층 문제인지 가르는 데 도움이 됩니다.

    • zpool status -v: ONLINE이 아니면 성능 튜닝보다 원인 확인이 먼저입니다.
    • zpool list: 공간뿐 아니라 frag와 health를 같이 봅니다. 용량 여유가 부족한 풀은 성능보다 운영 여유가 먼저 줄어듭니다.
    • pvesm status: Proxmox가 인식하는 저장소가 비정상인지, 단지 ZFS CLI 상의 문제인지 구분합니다.
    • journalctl -u pvestatd: 스토리지 인식 지연, 타임아웃, 마운트 문제 같은 상위 계층 신호를 볼 때 유용합니다.

    Proxmox VE 쪽에선 저장소를 기능별로 나누는 게 중요합니다. 특히 VM 디스크와 ISO, 템플릿, 백업 파일을 같은 경로에 몰아두면 관리가 금방 흐려집니다.

    zfspool: local-zfs
        pool rpool/data
        content images,rootdir
        sparse 0
    
    dir: local
        path /var/lib/vz
        content iso,vztmpl
    
    dir: backup-store
        path /mnt/backup
        content backup

    이 예시는 Proxmox VE의 /etc/pve/storage.cfg에 들어가는 형태를 기준으로 한 겁니다. 포인트는 단순합니다. local-zfs는 게스트용, local은 설치 자산용, backup-store는 복구 자산용입니다. 이 셋이 섞이기 시작하면 장애가 났을 때 판단이 흐려집니다.

    또 하나, Proxmox에서 ZFS를 쓸 때는 데이터셋 속성만 보지 말고 게스트 유형별 I/O 패턴을 먼저 떠올리는 게 좋습니다. 예를 들어 로그가 많은 리눅스 VM과 대용량 미디어 파일은 같은 디스크라도 이상적인 속성이 다릅니다. VM 디스크는 무작정 큰 블록이 유리하다고 보기 어렵고, 미디어 저장소는 너무 작은 블록이 오히려 메타데이터 부담만 늘릴 수 있습니다.

    실전 구현 2: TrueNAS SCALE 쪽에서 ZFS 데이터셋과 공유 전에 꼭 보는 것

    TrueNAS SCALE에서는 공유를 열기 전에 데이터셋 경계를 먼저 설계하는 게 핵심입니다. 제 경험상 여기서 서두르면 나중에 ACL, 스냅샷 정책, 복제 범위를 다시 뜯게 됩니다. 홈랩에서 자주 쓰는 패턴은 vmstore, backup, media, homes처럼 용도별로 쪼개는 방식입니다.

    zpool status -v
    zfs list -r tank
    zfs create -o compression=lz4 -o atime=off tank/backup
    zfs create -o compression=lz4 -o atime=off -o recordsize=1M tank/media
    zfs create -o compression=lz4 -o atime=off tank/homes
    zfs snapshot tank/backup@pre-share-change
    zfs get compression,atime,recordsize,mountpoint tank/media

    이 명령 자체보다 더 중요한 건 왜 데이터셋을 나눴는가입니다. TrueNAS 공식 문서도 공유를 만들기 전에 데이터셋과 zvol을 먼저 구조화하는 흐름을 권장합니다. 이 순서를 지키면 나중에 권한과 스냅샷 정책이 덜 꼬입니다.

    • backup: 변경 빈도와 보존 정책이 중요합니다.
    • media: 큰 파일 위주면 작은 블록 이득이 거의 없고, 오히려 메타데이터 부담이 커질 수 있습니다.
    • homes: 사용자 권한과 스냅샷 복구 포인트가 더 중요합니다.

    여기서 자주 생기는 실수가 있습니다. SMB 공유부터 먼저 만들고 나중에 데이터셋을 분리하는 방식입니다. 가능은 하지만 운영이 길어질수록 권한 모델과 스냅샷 범위가 꼬이기 쉽습니다. TrueNAS SCALE은 UI가 잘 되어 있어 보여도, 기반은 결국 ZFS입니다. 경계는 UI가 아니라 데이터셋에서 잡아야 나중이 편합니다.

    VM용 블록 스토리지를 제공할 계획이라면 zvol 설계도 초기에 생각해두는 편이 좋습니다. 특히 volblocksize는 만든 뒤 변경이 까다롭기 때문에, 나중에 성능이 마음에 안 들어 구조를 다시 만지는 경우가 적지 않습니다.

    zfs create -V 500G -o compression=lz4 -o volblocksize=16K tank/vmstore/proxmox-iscsi-01
    zfs get volblocksize,compression,used,referenced tank/vmstore/proxmox-iscsi-01

    여기서 16K는 예시일 뿐 정답은 아닙니다. 워크로드에 따라 더 작거나 큰 값이 맞을 수 있습니다. 핵심은 블록 스토리지는 파일 공유 데이터셋과 다르게 생각해야 한다는 점입니다. 미디어 보관용 데이터셋과 VM용 zvol을 같은 감각으로 만들면 나중에 체감이 어색해집니다.

    TrueNAS SCALE ZFS 데이터셋과 홈랩 NAS 설정을 표현한 이미지

    데이터셋을 먼저 나누고 공유를 나중에 여는 흐름이 왜 중요한지 보여주는 구성 예시입니다.

    재현 가능한 시나리오: VM 저장소와 NAS 저장소를 한 풀에 같이 둔 경우

    이건 홈랩에서 정말 흔합니다. 한 대 서버에 Proxmox VE를 올리고, 같은 ZFS 풀에 VM 디스크, 미디어 파일, 백업 아카이브, 다운로드 작업 디렉터리까지 다 넣는 구조죠. 평소엔 잘 굴러가도 서로 다른 I/O 패턴이 겹치는 순간 반응이 확 달라집니다. 예를 들어 백업 압축, 미디어 라이브러리 스캔, VM 패키지 업데이트가 겹치면 게스트 내부에서 체감이 둔해집니다.

    이때 CPU와 RAM을 먼저 의심하기 쉽지만 실제 병목은 스토리지 큐와 지연일 때가 많습니다. 그래서 필요한 건 감이 아니라 관찰입니다.

    iostat -x 1
    zpool iostat -v 1
    qm list
    pct list

    이 조합은 디스크 지연과 풀별 I/O, 그리고 실제로 어떤 게스트가 떠 있는지를 같이 보는 데 좋습니다. 짧은 스파이크보다 지속적으로 길어지는 대기 시간이 더 위험 신호인 경우가 많습니다.

    • iostat -x 1: 특정 디스크의 대기 시간이 길게 유지되는지 봅니다.
    • zpool iostat -v 1: 풀 전체가 아니라 특정 vdev만 바쁜지 구분합니다.
    • qm list, pct list: 어떤 게스트가 실제로 그 시간대에 스토리지를 적극 사용 중인지 대조합니다.

    여기서 핵심 판단은 "더 튜닝할까"보다 "이 워크로드를 같은 풀에 계속 둘 가치가 있나"입니다. 홈랩에선 성능 최적화보다 역할 분리가 더 큰 효과를 내는 경우가 많습니다. 메인 가족 사진과 테스트 VM을 한 운명으로 묶어두는 건, 실험의 자유를 데이터 안전과 교환하는 선택이 되기 쉽습니다.

    실패 모드별로 보는 근본 원인: 겉증상보다 구조를 봐야 합니다

    겉으로 보이는 문제 실제 근본 원인 Proxmox VE에서의 대응 TrueNAS SCALE에서의 대응
    VM이 갑자기 느려짐 백업, 스캔, 대용량 복사로 인한 I/O 혼합 게스트용 풀과 백업 경로 분리, 작업 시간대 분리 공유용 데이터셋과 블록 스토리지 경계 재설계
    공유는 열리는데 접근 권한이 이상함 SMB 설정보다 데이터셋 권한과 ACL 모델 불일치 외부 NAS 권한 모델 확인, 마운트 옵션 재점검 공유 재생성보다 데이터셋 권한과 ACL부터 점검
    백업은 있는데 복구가 불안함 백업 파일이 원본과 같은 풀 또는 같은 장애 도메인에 존재 백업 저장소를 별도 장치나 원격 대상으로 분리 복제 대상 풀 또는 별도 장비 준비
    재부팅 후 저장소 인식이 흔들림 의존 서비스 순서, 패스스루 장치 인식 지연, 마운트 타이밍 문제 스토리지 유형별 활성화 상태와 로그 확인 풀 import 상태와 장치 안정성, 컨트롤러 인식 확인
    스냅샷은 많은데 실제 복원이 번거로움 데이터셋 경계가 커서 롤백 범위가 과도함 VM 단위와 스토리지 단위 스냅샷 전략 분리 용도별 데이터셋 재구성 후 정책 분리

    ⚠️ 주의사항과 트러블슈팅: 제가 많이 부딪힌 부분

    디스크 패스스루(pass-through)로 TrueNAS를 VM 안에 넣는 경우

    Proxmox 위에 TrueNAS SCALE VM을 올리고 디스크나 HBA를 패스스루하는 구성은 학습용으로 좋습니다. 다만 메인 NAS로 오래 가져갈 때는 질문이 달라집니다. 문제가 났을 때 하이퍼바이저 문제와 스토리지 문제를 분리해서 볼 수 있는가? 이게 핵심입니다.

    • 디스크 식별이 꼬이거나 컨트롤러 인식이 흔들리면 장애 분석이 길어집니다.
    • 부팅 순서와 장치 초기화 타이밍이 꼬이면 NAS VM 기동이 늦어질 수 있습니다.
    • 스토리지 문제와 하이퍼바이저 문제를 별개로 다뤄야 하는데, 이 구조에선 둘이 자주 함께 움직입니다.

    제 판단은 분명합니다. 학습, 실험, 임시 구축에는 괜찮습니다. 하지만 가족 데이터, 장기 보관 백업, 다른 노드가 의존하는 공유 스토리지를 실으면 구조 난도가 올라갑니다. 홈랩이더라도 메인 데이터는 가상화 실험의 부속품이 아니어야 마음이 편합니다.

    스냅샷은 백업이 아닙니다

    ZFS 스냅샷은 되돌리기에는 훌륭하지만, 같은 풀 안에 남아 있는 한 장애 도메인이 동일합니다. 사용자 실수 복구에는 강하지만 장치 고장, 잘못된 운영 변경, 랜섬웨어 성격의 암호화 사고, 풀 자체 문제까지 모두 덮어주진 못합니다. 홈랩에서도 최소한 다른 장비나 원격 대상으로 복제하거나 백업을 보내는 구조가 필요합니다.

    SMB 권한과 Linux 퍼미션이 어긋나는 경우

    TrueNAS SCALE에서 흔한 착시는 "공유가 열렸으니 서비스 문제는 아니다"라고 생각하는 겁니다. 실제로는 공유 서비스보다 데이터셋 권한, ACL, 소유권 설계에서 막히는 경우가 더 많습니다. 특히 한 데이터셋을 여러 용도에 같이 쓰면 나중에 한쪽 요구사항을 맞추다가 다른 쪽이 깨지기 쉽습니다. 제 경험상 이 문제는 튜닝으로 해결되지 않고, 데이터셋 경계 재설계로 끝나는 경우가 많았습니다.

    저장소 속성을 한 번에 통일하는 경우

    모든 데이터셋에 동일한 속성을 주는 것도 자주 보이는 실수입니다. 미디어 보관, VM 블록 스토리지, 사용자 홈 디렉터리, 백업 아카이브는 액세스 패턴이 다릅니다. 속성값 하나로 모두 해결하려 하면 결국 어느 쪽에서도 만족스럽지 않은 결과가 나옵니다. 홈랩에서도 최소한 대용량 순차 파일과 작은 랜덤 I/O 정도는 분리해서 생각하는 편이 낫습니다.

    검증과 결과 확인: 무엇을 보면 구성이 잘 됐다고 판단할까

    다 만들어놓고 "일단 잘 되네"에서 멈추면, 실제 검증은 아직 덜 된 셈입니다. 저는 적어도 아래 항목은 확인해야 구축이 끝났다고 봅니다.

    1. 재부팅 후 풀 상태가 자동으로 정상 인식되는지 확인
    2. 스냅샷이 의도한 데이터셋 또는 게스트 범위에서만 생성되는지 확인
    3. VM 또는 컨테이너가 해당 저장소를 안정적으로 읽고 쓰는지 확인
    4. SMB, NFS, iSCSI 접근 권한이 예상한 사용자와 장치에만 적용되는지 확인
    5. 백업 또는 복제 대상에서 실제 복구 테스트가 가능한지 확인

    예를 들어 Proxmox VE에서는 게스트가 붙어 있는 저장소가 부팅 후 정상 활성화되는지와, 백업 경로가 일시적으로 마운트 실패했을 때 어떤 경고가 나는지를 보는 게 중요합니다. TrueNAS SCALE에서는 공유 서비스가 떠 있는지만 볼 게 아니라, 데이터셋 마운트 상태와 권한이 함께 정상인지를 확인해야 합니다.

    zfs list -o name,mounted,readonly
    zpool status -x
    showmount -e nas-host
    smbclient -L //nas-host -U username

    이 명령은 검증 관점에서 꽤 실용적입니다. 단, showmount는 NFS 서버가 실제로 export를 제공할 때 의미가 있고, smbclient는 Samba 클라이언트 패키지가 설치돼 있어야 합니다. 화려하진 않지만 이런 확인이 벤치마크보다 더 값질 때가 많습니다. 홈랩에서 오래 버티는 구성은 평균 성능이 약간 더 좋은 구성이 아니라, 이상 징후를 빨리 드러내는 구성이더라고요.

    Proxmox TrueNAS SCALE ZFS 비교 결과와 검증 상태를 보여주는 대시보드 이미지

    ZFS 상태, 스냅샷, 공유, VM 연결 상태를 한 번에 점검하는 검증 관점의 결과 화면 예시입니다.

    상황별 추천: 이런 경우엔 Proxmox VE, 이런 경우엔 TrueNAS SCALE

    여기서는 애매하게 말하지 않겠습니다.

    • VM, LXC, 실험용 서비스가 중심이라면 Proxmox VE가 맞습니다. 로컬 ZFS로 단순하게 가져가고, 백업 저장소만 별도 경로 또는 별도 장비로 떼는 구성이 운영이 편합니다.
    • 파일 공유, 미디어, 장기 보관, 백업 허브가 중심이라면 TrueNAS SCALE이 더 맞습니다. 데이터셋과 권한 모델을 먼저 설계하는 편이 결과가 좋습니다.
    • 둘 다 중요하고, 둘 다 메인 서비스라면 분리형이 맞습니다. Proxmox VE는 컴퓨트, TrueNAS SCALE은 스토리지. 홈랩에서 비용은 조금 늘어도 판단 비용과 복구 비용이 줄어듭니다.
    • 한 대 장비로 반드시 끝내야 하는 상황이라면 Proxmox VE 단독 또는 TrueNAS 중심 중 하나를 고르고, 반대 역할은 최소화하는 편이 낫습니다. 둘을 동등한 주인공으로 세우는 순간 구조가 무거워집니다.
    내 우선순위 추천 선택 이유
    VM 실험, LXC, 자동화, 클러스터 연습 Proxmox VE 게스트 수명주기 관리가 자연스럽고 운영 동선이 짧습니다
    집안 파일 서버, 사진, 미디어, 백업 TrueNAS SCALE 데이터셋, 권한, 공유, 스냅샷 관리가 중심에 맞습니다
    가상화와 NAS 둘 다 중요함 역할 분리 장애 범위를 줄이고 원인 분석이 쉬워집니다
    예산이 매우 제한적이고 실험이 우선 올인원 Proxmox VE 초기 진입 비용이 낮지만 메인 데이터는 별도 백업이 필수입니다
    데이터 안전이 최우선이고 VM은 부수적 TrueNAS SCALE 중심 스토리지 정책을 주도적으로 설계하기 쉽습니다

    이 판단에서 중요한 건 제품 팬심이 아니라 장애 우선순위입니다. 서버가 멈췄을 때 가장 먼저 살리고 싶은 것이 VM이라면 Proxmox VE, 가장 먼저 지키고 싶은 것이 데이터라면 TrueNAS SCALE입니다. 이 기준이 서지 않으면 계속 기능 비교만 하게 됩니다.

    관련 글이 있다면 Proxmox 백업 전략, ZFS 스냅샷 정책, 홈랩 NAS 네트워크 분리 구성도 함께 읽어보세요. 이 세 가지를 같이 보면 장비 선택보다 구조 선택이 먼저라는 점이 더 또렷해집니다.

    FAQ 성격으로 짧게 짚고 가는 포인트

    Q. 홈랩 입문자는 뭘 먼저 시작하는 게 좋을까요?

    서비스 여러 개를 띄워보며 익히는 게 목표면 Proxmox VE부터, 집안 파일 서버와 백업 체계를 안정적으로 만들고 싶으면 TrueNAS SCALE부터 시작하는 편이 시행착오가 적습니다.

    Q. 한 대 서버로 둘 다 하고 싶으면요?

    가능은 합니다. 다만 메인 데이터까지 얹는다면 복구 순서를 종이에 적어보는 걸 권합니다. 하이퍼바이저가 안 뜰 때 NAS 접근을 어떻게 할지, NAS가 안 뜰 때 VM 백업을 어디서 꺼낼지 막히면 아직은 역할을 더 줄이는 편이 낫습니다.

    Q. ZFS를 쓰니까 둘 다 체감 차이가 거의 없지 않나요?

    그렇지 않습니다. 파일시스템은 같아도 관리 흐름, 장애 대응, 공유 제공 방식, 권한 모델, 복구 순서가 다릅니다. 체감 차이는 대개 평상시보다 문제 상황에서 크게 드러납니다.

    Q. 언제 굳이 쓰지 말아야 하나요?

    Proxmox VE는 메인 데이터 보관과 테스트 워크로드를 한 박스에 무리하게 합칠 때 조심해야 하고, TrueNAS SCALE은 잦은 VM 실험과 하이퍼바이저 자동화가 핵심일 때 굳이 주력으로 잡지 않는 편이 낫습니다.

    마무리: 제가 지금 다시 홈랩을 짠다면 이렇게 갑니다

    제가 지금 처음부터 다시 짠다면, VM 실험과 서비스 배포가 메인이면 Proxmox VE에 로컬 ZFS를 쓰고 백업 저장소는 반드시 다른 경로나 다른 장비로 분리하겠습니다. 반대로 가족 사진, 미디어, 백업 아카이브가 더 중요하면 TrueNAS SCALE을 별도 장비로 두고, Proxmox는 그 저장소를 소비하는 쪽으로 붙일 겁니다.

    가상화가 중심이면 Proxmox VE, 데이터가 중심이면 TrueNAS SCALE. 둘 다 중요하면 역할 분리입니다. 홈랩에선 이 판단이 장비 스펙보다 오래 갑니다. ZFS는 둘 다 훌륭하지만, 차이를 만드는 건 파일시스템 이름보다도 무엇을 먼저 지키도록 구조를 짰느냐였습니다.

    Proxmox VE와 TrueNAS SCALE 선택 기준을 요약한 ZFS 비교 인포그래픽

    어떤 환경에서 무엇을 고르면 되는지 빠르게 판단할 수 있도록 핵심 선택 기준을 요약한 이미지입니다.

  • [OpenStack] OpenStack Manila 도입 1년 회고

    [OpenStack] OpenStack Manila 도입 1년 회고

    [OpenStack] OpenStack Manila 도입 1년 회고

    프라이빗 클라우드 파일 스토리지 이야기를 하면, 많은 분들이 처음엔 Cinder(신더, 블록 스토리지)나 Swift(스위프트, 오브젝트 스토리지)부터 떠올리시더라고요. 저도 그랬습니다. 그런데 VM(가상머신) 여러 대와 컨테이너 워크로드가 같이 굴러가기 시작하면, 결국 팀에서 꼭 묻는 질문이 하나 나옵니다. “공유 폴더처럼 쓸 수 있는 스토리지는 없나요?” 바로 그 지점에서 OpenStack Manila가 등장합니다.

    저는 지난 1년 동안 홈랩과 사내와 유사한 형태의 프라이빗 환경에서 Manila 운영 방식을 꽤 집요하게 다듬어봤습니다. 처음엔 “이게 Nova(노바, 컴퓨트)나 Neutron(뉴트론, 네트워크)처럼 그냥 붙이면 되겠지” 했었는데요. 막상 들어가 보니 기능은 명확한데, 프라이빗 클라우드 파일 스토리지 운영할 때 고려할 포인트가 생각보다 많더라고요. 특히 Manila로 파일 스토리지를 운영하면 자동화가 편해지는 대신, 네트워크와 백엔드 설계를 대충 하면 나중에 꼭 되돌아오니까요. 오늘은 OpenStack Manila 도입 1년 회고라는 관점에서, 좋았던 점과 아쉬웠던 점을 솔직하게 정리해보겠습니다.

    OpenStack Manila, 컴퓨트 노드, 스토리지 백엔드, 사용자 네트워크가 어떻게 연결되는지 한눈에 보여주는 아키텍처 이미지가 들어갈 자리입니다.

    1. 왜 OpenStack Manila를 보게 되었는가

    처음 문제는 단순했습니다. 프로젝트마다 VM 안에 데이터를 따로 넣어두다 보니, 배치 작업 서버와 애플리케이션 서버가 같은 데이터를 봐야 하는 상황에서 계속 복사본이 생겼거든요. 이러면 데이터 일관성도 깨지고, 백업 정책도 꼬이고, 장애가 나면 복구 지점도 애매해집니다.

    프라이빗 클라우드 파일 스토리지 요구가 계속 나오면서 선택지를 세 가지로 놓고 봤습니다.

    • VM 내부 디스크를 각자 관리한다
    • Cinder 볼륨을 붙여서 우회한다
    • 공유 파일 스토리지 자체를 서비스로 제공한다

    세 번째가 바로 OpenStack Manila, 즉 프라이빗 클라우드 파일 스토리지 서비스의 자리였습니다. 실제로 써보니까, 파일 공유를 사람 손으로 매번 만들어주는 방식보다 API(에이피아이, 프로그램 호출 인터페이스) 기반으로 표준화하는 게 훨씬 관리가 잘 되더라고요.

    2. OpenStack Manila란 무엇인가

    쉽게 말해 OpenStack Manila는 공유 파일 시스템을 서비스 형태로 제공하는 컴포넌트입니다. Cinder가 블록 디바이스를 내주는 역할이라면, Manila는 NFS(엔에프에스, 네트워크 파일 시스템)나 SMB(에스엠비, 파일 공유 프로토콜) 같은 형태의 공유 스토리지를 만들어주는 쪽에 가깝습니다.

    처음엔 이름이 좀 낯설죠. 저도 처음엔 “왜 이름이 Manila지?” 싶었는데, 기능 자체는 꽤 직관적입니다. 핵심 개념만 잡아두면 어렵지 않거든요.

    핵심 개념 한 번에 정리

    • Share: 실제로 사용자에게 제공되는 파일 공유 자원
    • Share Type: 성능, 백엔드, 기능 정책을 구분하는 템플릿
    • Share Network: 공유 스토리지가 붙을 네트워크 정보
    • Backend Driver: CephFS(세프에프에스), NetApp, Generic driver 같은 실제 구현체와 연결되는 계층
    • Access Rule: 어떤 IP나 사용자에게 접근을 허용할지 정하는 규칙

    여기서 중요한 포인트! Manila 자체가 스토리지를 저장하는 제품은 아닙니다. 정확히는 백엔드 파일 스토리지를 OpenStack 방식으로 관리해주는 제어 계층이라고 생각하시면 돼요. 이 차이를 이해 못 하면 설계가 꼬입니다.

    다른 스토리지와 무엇이 다른가

    구분 주 용도 접근 방식 운영 시 느낌
    Ephemeral Disk 인스턴스 로컬 작업 VM 내부 로컬 디스크 빠르지만 수명과 이동성 제약이 크다
    Cinder 데이터베이스, 단일 서버 디스크 블록 디바이스 마운트 명확하지만 다중 공유에는 부적합
    Swift 백업, 아카이브, 객체 저장 HTTP API 확장성은 좋지만 파일시스템처럼 쓰긴 어렵다
    Manila (프라이빗 클라우드 파일 스토리지) 공유 파일 스토리지 NFS/SMB 등 협업과 공용 데이터셋에 강하다

    3. 도입 전에 꼭 봐야 했던 설계 포인트

    제가 1년 운영하면서 느낀 건, Manila는 설치보다 설계가 더 중요하다는 점입니다. 특히 아래 세 가지를 먼저 정리해야 나중에 덜 고생합니다.

    1. 백엔드 선택: CephFS처럼 분산 파일 시스템을 붙일지, 전통적인 NAS(나스, 네트워크 스토리지)를 붙일지 결정해야 한다
    2. 네트워크 분리: 스토리지 트래픽과 테넌트 트래픽을 어느 정도 분리할지 판단해야 한다
    3. 운영 권한 모델: 누가 share를 만들고, 누가 접근 규칙을 열 수 있는지 기준을 세워야 한다

    사실 여기서 많이들 놓치는 게 두 번째입니다. 프라이빗 클라우드 파일 스토리지는 결국 네트워크 영향을 강하게 받습니다. 스토리지 백엔드는 멀쩡한데도 MTU(엠티유, 최대 전송 단위)나 라우팅, 보안그룹 정책 때문에 체감 성능이 무너지는 경우를 꽤 봤거든요.

    4. OpenStack Manila 실전 구현: 제가 실제로 잡았던 기본 흐름

    이제 구현 얘기를 해보겠습니다. 환경마다 패키지 설치 방식은 다를 수 있으니, 여기서는 운영 개념과 명령 흐름 위주로 정리하겠습니다. 저는 처음에 모든 설정을 한 번에 넣으려다가 꼬여서, 결국 가장 단순한 형태부터 올리는 방식으로 갔습니다. 이게 훨씬 낫더라고요.

    1) 서비스 상태 확인

    openstack share service list
    openstack endpoint list --service manila
    openstack network list
    

    맨 처음엔 화려한 기능보다 서비스가 보이느냐부터 확인했습니다. 생각보다 기본 서비스 등록이나 엔드포인트 누락이 자주 나옵니다.

    2) share type 생성

    openstack share type create default_share false
    openstack share type set --extra-specs snapshot_support=true default_share
    

    Share Type은 나중에 Manila 운영 정책의 중심이 됩니다. 성능 클래스, 스냅샷 허용 여부, 백엔드 매핑 기준을 여기에 녹여두면 사용자 설명이 쉬워지거든요.

    3) share network 생성

    openstack share network create \
      --name manila-share-net \
      --neutron-net-id <tenant-network-id> \
      --neutron-subnet-id <tenant-subnet-id>
    

    여기서 저도 한 번 크게 삽질했습니다. 인스턴스가 붙은 네트워크와 share network 관계를 대충 맞추면 될 줄 알았는데, 실제로는 접근 경로와 라우팅이 명확해야 마운트 단계에서 덜 막힌다더라고요.

    4) 공유 스토리지 생성

    openstack share create \
      --name project-data \
      --share-type default_share \
      --share-network manila-share-net \
      --size 100 \
      NFS
    

    생성 직후 바로 쓰려고 하면 안 됩니다. 상태가 available이 될 때까지 기다려야 합니다.

    openstack share list
    openstack share show project-data
    
    OpenStack Manila share type과 share network 구성 흐름 이미지

    Share type, share network, backend driver, tenant network가 어떤 순서로 연결되는지 보여주는 구성 다이어그램이 들어갈 자리입니다.

    5) 접근 제어 추가

    openstack share access create project-data ip 10.10.20.15
    openstack share access list project-data
    

    Manila 운영하면서 가장 체감이 좋았던 부분 중 하나가 이겁니다. 예전엔 파일 공유를 열 때 네트워크팀, 스토리지팀, 운영팀이 각각 손대야 했었는데요. Manila를 붙이니 최소한 권한과 절차가 API로 정리되니까 일이 많이 단순해졌습니다.

    6) 인스턴스에서 마운트

    sudo mkdir -p /mnt/project-data
    sudo mount -t nfs <share-export-location> /mnt/project-data
    df -h
    mount | grep project-data
    

    여기서 export location이 올바르게 나오는지 확인해야 합니다. 실제 사용자는 이 지점만 보기 때문에, 앞단 자동화가 아무리 좋아도 마운트 실패하면 평가가 박해집니다. 냉정하죠 ㅎㅎ

    7) 설정 예시

    [DEFAULT]
    default_share_type = default_share
    enabled_share_backends = cephfsnfs
    
    [cephfsnfs]
    share_backend_name = CEPHFSNFS
    driver_handles_share_servers = false
    

    설정은 백엔드마다 달라지니 그대로 복붙하시면 안 되고, 운영 중인 백엔드 문서와 정확히 맞춰야 합니다. 다만 관점 자체는 비슷합니다. 어떤 백엔드를 활성화할지, 드라이버가 share server를 직접 다룰지 여부를 정하는 구조니까요.

    5. 1년 운영하며 좋았던 점: 명(明)

    OpenStack Manila 운영을 1년쯤 해보니까, 분명 장점이 있습니다. 이건 꽤 명확했습니다.

    • 셀프서비스화: 사용 부서가 요청만 하면 표준 절차로 공유 스토리지를 만들 수 있다
    • 정책 통일: share type 중심으로 Manila 운영 기준을 맞추기 쉽다
    • 접근 제어 가시성: 누가 어떤 share에 접근 가능한지 추적이 쉬워진다
    • 자동화 친화적: Terraform(테라폼, 인프라 선언형 자동화)이나 내부 포털과 엮기 좋다

    특히 프로젝트 단위로 수명주기를 관리할 때 편했습니다. 인스턴스는 바뀌어도 데이터 공유 계층은 유지할 수 있으니, 작업 서버를 새로 올려도 공유 데이터를 다시 설계할 필요가 없거든요. 이거 진짜 편하더라고요.

    또 하나는 운영 책임 구간이 분리된다는 점입니다. 예전엔 “공유 폴더 느려요”라는 말이 나오면 원인 범위가 너무 넓었는데, Manila 도입 후에는 적어도 API 계층, 네트워크 계층, 백엔드 계층으로 잘게 나눠서 볼 수 있었습니다.

    6. 1년 운영하며 아쉬웠던 점: 암(暗)

    근데 여기서 중요한 게 있습니다. Manila는 만능이 아닙니다. 오히려 기대치를 너무 높게 잡으면 실망하기 쉽습니다.

    첫째, 문제의 절반은 결국 백엔드와 네트워크입니다

    사용자 입장에서는 OpenStack Manila가 파일 스토리지를 제공하는 것처럼 보이지만, 실제 체감 품질은 백엔드 스토리지와 네트워크 설계에 크게 좌우됩니다. 즉, Manila가 느린 게 아니라 뒤쪽이 느린 경우가 많습니다. 이걸 분리해서 설명하는 데 시간이 꽤 들었습니다.

    둘째, 권한 설계가 느슨하면 금방 복잡해집니다

    처음엔 “필요한 사람에게 IP만 열어주면 되지” 했었는데요. 몇 달 지나면 예외 규칙이 누적됩니다. 접근 규칙을 누가 승인하는지, 만료 기준은 뭔지, 프로젝트 종료 시 어떻게 닫을지 초반에 정해야 합니다.

    셋째, 장애 분석이 생각보다 단순하지 않습니다

    마운트 실패 하나만 놓고 봐도 원인이 다양합니다. DNS(디엔에스, 이름 해석), 라우팅, 보안그룹, export location, 백엔드 상태, 커널 NFS 클라이언트 옵션까지 봐야 하거든요. 처음엔 “왜 이렇게 복잡하지?” 싶었는데, 결국 파일 공유라는 게 여러 계층이 맞물리는 서비스라 그렇더라고요.

    7. ⚠️ 실제로 겪었던 트러블슈팅

    이 섹션은 좀 현실적으로 적어볼게요. 저도 처음엔 문서만 보면 금방 될 줄 알았는데, 실제 Manila 운영에선 아래 이슈를 자주 만났습니다.

    문제 1. share는 생성됐는데 마운트가 안 되는 경우

    • 증상: `mount.nfs: access denied by server`
    • 원인 후보: 접근 규칙 누락, 클라이언트 IP 변경, 잘못된 네트워크 경로
    • 해결: `openstack share access list`로 허용 규칙 확인 후, 실제 클라이언트 IP와 비교
    openstack share access list project-data
    ip addr
    ip route
    

    생각보다 NAT(엔에이티, 주소 변환)나 점프 구간 때문에 사용자가 보는 IP와 실제 서버가 보이는 IP가 다른 경우가 있었습니다.

    문제 2. 생성 속도는 괜찮은데 체감 성능이 들쭉날쭉한 경우

    • 증상: 어떤 VM은 빠르고 어떤 VM은 유독 느림
    • 원인 후보: 네트워크 경로 차이, MTU 불일치, 혼잡 구간 존재
    • 해결: 경로별 성능 차이를 먼저 분리 측정하고, Manila 문제로 단정하지 않기

    여기서 제가 배운 건 하나입니다. 스토리지 문제를 API 문제로 착각하지 말 것. 관리 평면(control plane)과 데이터 평면(data plane)을 분리해서 봐야 합니다.

    문제 3. 공유는 살아 있는데 운영 기록이 남지 않는 경우

    • 증상: 누가 왜 접근 규칙을 열었는지 추적이 어려움
    • 원인 후보: 수동 작업, 표준 요청 절차 부재
    • 해결: 변경 요청 번호나 티켓 번호를 share 이름 또는 메타데이터 규칙에 반영

    이건 기술 이슈 같지 않지만 실제 Manila 운영에선 꽤 큽니다. 나중에 감사나 보안 점검 때 힘들어지거든요.

    문제 4. 기대보다 운영 난도가 높게 느껴지는 경우

    사실 OpenStack 스토리지는 모두 그렇지만, Manila도 “기능 추가”보다 “운영 모델 정리”가 더 어렵습니다. 백엔드 드라이버 특성, 네트워크 토폴로지, 접근 정책이 모두 연결되니까요. 그래서 제가 추천하는 방식은 이겁니다.

    1. 처음엔 딱 한 가지 share type만 운영한다
    2. 접근 제어는 가장 보수적으로 시작한다
    3. 사용자 수요가 확인된 뒤에 스냅샷, 멀티 백엔드, 성능 클래스 분리를 확장한다

    한 번에 다 하려 하지 않는 것, 이게 제일 중요했습니다.

    8. 검증과 운영 결과: 무엇이 달라졌나

    그럼 1년 운영해서 뭐가 남았냐, 이 질문이 제일 중요하겠죠. 제가 직접 해보니 결과는 꽤 분명했습니다.

    • 프라이빗 클라우드 파일 스토리지 개설 절차가 표준화됐다
    • 프로젝트별 데이터 공유 방식이 단순해졌다
    • 수동 NAS 작업이 줄어들었다
    • 장애 시 원인 구간을 더 빨리 좁힐 수 있게 됐다

    반대로, 운영 문서와 접근 정책이 없으면 Manila 운영은 금방 복잡해진다는 것도 확인했습니다. 즉, OpenStack Manila의 성공 조건은 설치가 아니라 운영 규칙이에요.

    openstack share list
    openstack share service list
    openstack share type list
    openstack share network list
    

    검증할 때는 단순히 리소스가 보이는지보다, 아래 항목을 같이 확인했습니다.

    1. Share 상태가 `available`인지
    2. 접근 규칙이 기대한 대상에만 열려 있는지
    3. 실제 인스턴스에서 마운트와 읽기/쓰기가 되는지
    4. 장애 시 로그와 변경 이력이 추적 가능한지
    OpenStack Manila 운영 결과와 검증 체크리스트 대시보드 이미지

    Share 상태, 접근 규칙, 마운트 성공 여부, Manila 운영 지표를 한 화면에서 점검하는 대시보드 이미지가 들어갈 자리입니다.

    9. FAQ와 마무리: 다음 단계는 어떻게 가면 좋을까

    자주 묻는 질문

    • Q. Manila는 모든 환경에서 꼭 필요한가요?
      아닙니다. 프라이빗 클라우드 파일 스토리지 요구가 적고 운영 단순성이 더 중요하면 굳이 넣지 않는 게 나을 수도 있습니다.
    • Q. 프라이빗 클라우드 파일 스토리지로 바로 도입해도 될까요?
      가능은 하지만, 먼저 한두 팀 대상 파일 공유 서비스로 시작해 Manila 운영 모델을 검증하는 걸 추천합니다.
    • Q. OpenStack 스토리지 중 우선순위는 어떻게 잡아야 하나요?
      블록, 오브젝트, 파일의 요구가 다르니 워크로드 기준으로 판단해야 합니다. “공유 파일”이 핵심이면 Manila가 후보가 됩니다.

    정리해보면 이렇습니다. OpenStack Manila는 프라이빗 클라우드 파일 스토리지 운영을 표준화하는 데 꽤 좋은 도구입니다. 다만 제품만 올린다고 끝나는 게 아니고, 백엔드 선택과 네트워크 설계, 접근 정책, 운영 문서화까지 같이 가야 진짜 효과가 납니다.

    저도 처음엔 이게 뭔가 싶었는데, 1년쯤 지나고 나니 보이더라고요. Manila 운영의 핵심은 “기능 활성화”가 아니라 “운영 경계 정의”였습니다. 이걸 빨리 이해할수록 삽질이 줄어들더라고요.

    다음 글에서는 OpenStack Manila 운영 시 백엔드 선택 기준, 예를 들면 CephFS 계열과 전통적인 NAS 연동 관점에서 무엇을 봐야 하는지 더 구체적으로 다뤄볼 예정입니다. 이전 글에서 다뤘던 OpenStack 네트워크 설계 내용과도 연결해서 보시면 훨씬 이해가 쉬우실 겁니다.

    OpenStack Manila 도입 전후 장단점 비교 인포그래픽

    도입 전 수동 운영 방식과 도입 후 표준화된 프라이빗 클라우드 파일 스토리지 운영 방식을 비교하는 요약 인포그래픽이 들어갈 자리입니다.

    혹시 지금 OpenStack Manila 도입을 고민 중이시라면, 제 경험상 가장 먼저 할 일은 하나입니다. “누가 어떤 데이터를 어떤 방식으로 공유해야 하는가”를 먼저 적어보세요. 그 다음에 Manila를 붙이면 훨씬 덜 헤맵니다. 이 순서, 생각보다 정말 중요합니다. 🎉

  • [Proxmox] HA 클러스터 구축 전 고려사항: 스토리지 복제 vs 공유 스토리지

    [Proxmox] HA 클러스터 구축 전 고려사항: 스토리지 복제 vs 공유 스토리지

    [Proxmox] HA 클러스터 구축 전 고려사항: 스토리지 복제 vs 공유 스토리지

    Proxmox HA 스토리지 비교를 제대로 안 하고 클러스터부터 묶어버리면, 나중에 장애가 났을 때 생각보다 당황하게 됩니다. 저도 처음엔 "노드만 3대면 Proxmox 고가용성은 끝난 거 아닌가?" 싶었거든요. 근데 실제로 써보니까 HA(High Availability, 고가용성)는 단순히 노드 수만으로 완성되지 않더라고요. 결국 핵심은 스토리지를 어떻게 둘 것인가였습니다. 특히 스토리지 복제와 공유 스토리지는 겉보기엔 비슷해 보여도, 장애 시 동작 방식이 꽤 다릅니다.

    이번 글에서는 홈랩과 실서비스에 가까운 테스트 환경에서 제가 직접 부딪히며 정리한 기준으로, Proxmox HA 스토리지 비교를 해보겠습니다. 무엇이 더 좋다고 단정하기보다는, 어떤 상황에서 무엇이 덜 후회가 남는지 쪽으로 설명드릴게요. 혹시 클러스터 구성은 끝냈는데 스토리지 선택에서 막히셨다면, 여기서 중요한 포인트만 잡아가셔도 꽤 도움이 되실 겁니다.

    Proxmox HA 스토리지 비교를 위한 클러스터 구조 개요 이미지

    3노드 Proxmox 클러스터에서 스토리지 복제와 공유 스토리지의 흐름을 한눈에 보여주는 개요 이미지입니다.

    1. 왜 Proxmox HA 스토리지 비교가 중요한가

    쉽게 말해 HA는 장애가 나도 서비스가 다시 올라오는 구조를 만드는 일입니다. 그런데 VM(가상머신)이나 CT(Container, 컨테이너)의 디스크가 어느 위치에 있느냐에 따라, 장애 이후의 복구 속도와 방식이 완전히 달라집니다.

    • 공유 스토리지: 여러 노드가 같은 디스크 자원을 봅니다.
    • 스토리지 복제: 각 노드가 자기 디스크를 갖고 있고, 데이터를 주기적으로 복제합니다.

    둘 다 장애 대응이 가능하지만 결이 다릅니다. 공유 스토리지는 운영이 잘 되면 마이그레이션(Migration, 이전)이 편하고 구조가 직관적입니다. 반면 스토리지 복제는 노드별 독립성이 있어서 비용이나 확장성 면에서 매력적일 때가 있더라고요. 다만 복제 시점과 장애 시점 사이에 생기는 차이를 반드시 이해하셔야 합니다.

    2. 개념부터 정리: 스토리지 복제 vs 공유 스토리지

    스토리지 복제(Replication, 복제)란?

    제가 처음엔 이게 백업(Backup, 백업)이랑 비슷한 줄 알았는데, 실제로는 목적이 다릅니다. Proxmox에서 많이 이야기하는 복제는 보통 ZFS Replication(제트에프에스 복제) 기반으로, 특정 VM 디스크를 다른 노드로 주기적으로 보내는 방식입니다.

    즉, 원본 VM은 A 노드에서 돌고 있고, 일정 주기로 B 노드에 디스크 상태가 복제됩니다. 장애가 나면 B 노드에서 최신 복제본 기준으로 다시 시작하는 그림이죠.

    • 장점: 노드마다 로컬 디스크 성능을 살리기 좋습니다.
    • 장점: 별도 외부 스토리지 없이 시작하기 쉽습니다.
    • 주의: 복제는 실시간 동기화와 다릅니다.
    • 주의: 장애 순간 직전의 마지막 쓰기 데이터는 반영되지 않을 수 있습니다.

    공유 스토리지(Shared Storage, 공유 저장소)란?

    공유 스토리지는 여러 Proxmox 노드가 같은 스토리지에 접근하는 방식입니다. 대표적으로 NFS(Network File System), iSCSI, FC(Fibre Channel), Ceph 같은 구성이 여기에 들어갑니다. 다만 Ceph는 단순 외부 공유 스토리지라기보다 분산 스토리지 성격이 강해서, 설계 포인트가 조금 다르긴 합니다.

    이 구조의 핵심은 디스크가 노드에 묶여 있지 않다는 점입니다. 그래서 정상 상태에서의 라이브 마이그레이션(Live Migration, 무중단 이전)이나 HA 재시작 시 흐름이 상대적으로 자연스럽습니다.

    • 장점: 노드 이동이 편합니다.
    • 장점: VM 디스크를 모든 노드가 바로 볼 수 있습니다.
    • 주의: 스토리지 자체의 이중화가 안 되면 병목이나 단일 장애점(SPOF, Single Point of Failure)이 됩니다.
    • 주의: 네트워크 설계가 부실하면 성능 문제가 바로 드러납니다.

    3. 어떤 환경에 뭐가 맞는지 먼저 판단해보세요

    실제로 써보니까 선택 기준은 생각보다 단순했습니다. 아래 표처럼 보시면 감이 좀 빨리 오실 거예요.

    비교 항목 스토리지 복제 공유 스토리지
    초기 구축 난이도 상대적으로 단순 스토리지 설계까지 필요
    장애 직후 복구 방식 복제본 기준 재시작 같은 디스크로 다른 노드에서 재시작
    데이터 최신성 복제 주기에 영향 공유 저장소 상태 기준
    라이브 마이그레이션 편의성 제약이 있을 수 있음 대체로 유리
    외부 스토리지 의존도 낮음 높음
    확장성 노드별 설계에 따라 다름 스토리지 구조에 따라 크게 좌우
    대표 리스크 복제 시점 차이 공유 스토리지 장애

    제가 멘토링할 때 자주 드리는 기준은 이렇습니다.

    1. 예산이 제한적이고 홈랩 성격이 강하다면 스토리지 복제로 시작해도 괜찮습니다.
    2. 운영 편의성과 이동성이 중요하면 공유 스토리지가 더 낫습니다.
    3. 장애 시 데이터 시점 일관성이 매우 중요하면 복제 주기와 애플리케이션 특성을 꼭 같이 봐야 합니다.
    4. 스토리지 자체를 HA로 만들 수 있느냐가 사실상 최종 결정 포인트입니다.

    4. 실전 구현 1: Proxmox 클러스터 기본 구성

    여기서는 예시로 3노드 클러스터를 가정하겠습니다. 버전별 화면은 조금 다를 수 있지만 흐름은 비슷합니다. 제가 보통 테스트할 때도 먼저 쿼럼(Quorum, 정족수) 상태부터 확인합니다. 이거 안 보고 넘어가면 나중에 삽질 좀 합니다 ㅎㅎ

    # 첫 번째 노드에서 클러스터 생성
    pvecm create homelab-cluster
    
    # 두 번째, 세 번째 노드에서 클러스터 참여
    pvecm add 192.168.10.11
    
    # 클러스터 상태 확인
    pvecm status

    여기서 확인할 건 많지 않습니다.

    • 노드 수가 정상인지
    • Quorate 상태인지
    • 통신 네트워크가 안정적인지

    특히 HA는 네트워크 품질에 꽤 민감합니다. 관리망(Management Network, 관리 네트워크)과 스토리지망을 가능하면 분리하는 편이 좋습니다. 처음엔 한 NIC(Network Interface Card, 네트워크 인터페이스 카드)로 다 몰아도 될 것 같았는데, 실제로 복제나 스토리지 IO가 겹치면 금방 티가 나더라고요.

    Proxmox 고가용성 환경에서 네트워크를 분리한 구성도

    관리망과 스토리지망을 분리한 3노드 Proxmox 클러스터 예시 구성입니다.

    5. 실전 구현 2: 스토리지 복제 구성 예시

    스토리지 복제를 쓰려면 로컬 ZFS 스토리지를 먼저 준비해둬야 하더라고요. Proxmox에서 복제는 VM 디스크를 대상 노드로 정기적으로 보내는 방식입니다. 아래 예시는 개념 확인용으로 보시면 됩니다.

    # VM 101을 node2로 15분마다 복제
    pvesr create 101 node2 --schedule "*/15"
    
    # 복제 작업 확인
    pvesr list
    
    # ZFS 상태 확인
    zpool status

    제가 직접 해보니 여기서 중요한 건 복제 주기입니다. 1분으로 너무 촘촘하게 잡으면 스토리지와 네트워크에 부담이 갑니다. 반대로 너무 길게 잡으면 장애 시 복구본이 오래된 상태일 수 있죠. 결국 서비스 성격에 따라 조정해야 합니다.

    HA 자원 등록은 이런 식으로 진행합니다.

    # VM 101을 HA 자원으로 등록
    ha-manager add vm:101
    
    # HA 상태 확인
    ha-manager status

    이 구성을 쓰면 노드 장애 시 복제되어 있던 대상 노드에서 VM이 다시 시작될 수 있습니다. 다만 여기서 포인트! 공유 스토리지처럼 동일 디스크를 즉시 이어받는 개념은 아닙니다. 마지막 복제 시점 기준이라는 점, 꼭 기억하셔야 합니다.

    6. 실전 구현 3: 공유 스토리지 구성 예시

    공유 스토리지는 방식이 여러 가지지만, 홈랩에서는 NFS가 접근성이 좋고, 조금 더 본격적으로 가면 iSCSI나 Ceph를 고려하게 됩니다. 아래는 NFS 기반 공유 스토리지 등록 흐름 예시입니다.

    # Proxmox 노드에서 NFS 저장소 추가 예시
    pvesm add nfs shared-nfs \
      --server 192.168.20.10 \
      --export /srv/proxmox \
      --content images,iso,backup
    
    # 스토리지 목록 확인
    pvesm status

    공유 스토리지를 올렸다면, VM 디스크를 해당 저장소에 두고 HA를 연결합니다. 이렇게 되면 특정 노드가 내려가더라도 다른 노드가 같은 디스크를 바라보며 기동할 수 있습니다.

    # HA 등록 예시
    ha-manager add vm:201
    ha-manager status

    실제로 써보니까 운영은 훨씬 편했습니다. 특히 유지보수 때문에 VM을 다른 노드로 옮길 때 체감 차이가 큽니다. 다만 스토리지 서버가 흔들리면 클러스터 전체가 동시에 영향을 받을 수 있어서, 공유 스토리지 자체의 안정성을 절대 가볍게 보면 안 됩니다.

    Proxmox HA 스토리지 비교를 위한 설정 화면 이미지

    복제 작업 구성과 공유 스토리지 등록 흐름을 비교해 보여주는 설정 예시 이미지입니다.

    7. ⚠️ 제가 실제로 겪었던 주의사항과 트러블슈팅

    이 섹션은 좀 현실적인 얘기입니다. 문서만 보면 금방 될 것 같은데, 막상 해보면 여기서 자주 막힙니다.

    1) 복제는 백업이 아닙니다

    이거 진짜 중요합니다. 스토리지 복제는 운영 편의를 위한 복제이지, 장기 보관용 백업 전략을 대체하지 않습니다. 삭제나 손상이 복제 타이밍에 따라 같이 전파될 수 있거든요. 저는 복제를 켜놓고 마음이 편했었는데, 나중에 보니 그건 착각이었습니다.

    2) 공유 스토리지 하나만 믿으면 위험합니다

    공유 스토리지 덕분에 HA가 깔끔해 보이지만, 그 스토리지가 사실상 단일 장애점이면 말짱 도루묵입니다. NFS 서버 한 대만 두고 HA라고 부르기엔 좀 민망하더라고요. 가능하면 이중화된 NAS, 이중 컨트롤러 SAN, 또는 분산 스토리지 구조를 고민하셔야 합니다.

    3) 쿼럼 문제는 생각보다 자주 나옵니다

    특히 2노드 비슷하게 운영하거나, 관리망이 불안정하면 쿼럼 이슈로 HA가 기대대로 움직이지 않을 수 있습니다. 여기서 중요한 포인트는 노드 수보다 통신 안정성입니다.

    # 클러스터 상태와 쿼럼 확인
    pvecm status
    
    # HA 리소스 상태 확인
    ha-manager status

    4) 복제망과 서비스망이 섞이면 병목이 납니다

    처음엔 그냥 한 스위치에 몰아넣고 테스트했었는데, 복제 작업이 도는 시간대에 VM 응답성이 떨어지는 걸 봤습니다. 특히 스냅샷(Snapshot, 시점 저장) 기반 작업이 겹치면 체감이 납니다. 가능하면 VLAN이나 물리 NIC 분리를 권장드립니다.

    5) 파일시스템과 스토리지 특성을 같이 봐야 합니다

    ZFS는 정말 강력하지만 메모리 사용 특성과 운영 습관이 맞아야 합니다. 반대로 외부 공유 스토리지는 백엔드 장비 성능이 약하면 Proxmox 노드를 늘려도 체감 개선이 안 되더라고요. 결국 병목은 가장 약한 스토리지 구간에서 생깁니다.

    8. 검증 방법과 결과 확인

    구성만 했다고 끝이 아닙니다. 저는 항상 테스트 장애를 일부러 만들어봅니다. 물론 운영 장비에서는 점검 창을 잡고 조심해서 해야겠죠.

    1. 테스트 VM을 하나 준비합니다.
    2. HA 자원으로 등록합니다.
    3. 복제 또는 공유 스토리지 상태를 확인합니다.
    4. 원본 노드를 재부팅하거나 격리해봅니다.
    5. 다른 노드에서 VM이 어떻게 올라오는지 확인합니다.
    # HA 상태 확인
    ha-manager status
    
    # 스토리지 상태 확인
    pvesm status
    
    # 복제 작업이 있다면 확인
    pvesr list

    스토리지 복제 방식에서는 보통 마지막 복제본 기준으로 재시작되는지를 봐야 하고, 공유 스토리지 방식에서는 디스크 접근이 끊기지 않고 다른 노드에서 정상 기동하는지를 확인하면 됩니다.

    제가 테스트했을 때 체감상 차이는 이랬습니다.

    • 스토리지 복제: 구조가 깔끔하고 비용 부담이 덜했지만, 장애 시점과 복제 시점 차이를 항상 의식해야 했습니다.
    • 공유 스토리지: 운영은 편했지만, 스토리지 품질이 전체 경험을 좌우했습니다.
    Proxmox 클러스터 장애 복구 결과를 보여주는 대시보드 이미지

    노드 장애 이후 다른 노드에서 HA 자원이 재기동된 상태를 보여주는 결과 검증 이미지입니다.

    9. 정리: 어떤 선택이 덜 후회가 남는가

    결론부터 말씀드리면, Proxmox HA 스토리지 비교에서 정답은 하나가 아닙니다. 대신 우선순위는 분명합니다.

    • 예산과 단순한 시작이 중요하면 스토리지 복제가 현실적입니다.
    • 운영 편의성과 이동성이 중요하면 공유 스토리지가 유리합니다.
    • 데이터 시점 손실 허용 범위를 먼저 정해야 합니다.
    • 스토리지 자체를 얼마나 신뢰할 수 있느냐가 최종 승부처입니다.

    저도 처음엔 무조건 공유 스토리지가 상위 개념인 줄 알았는데, 실제로 써보니까 꼭 그렇진 않았습니다. 홈랩이나 소규모 환경에서는 스토리지 복제가 오히려 관리 포인트가 적을 때도 있었거든요. 반대로 운영 자동화와 유지보수 편의성을 끌어올리려면 공유 스토리지가 확실히 매력적입니다.

    혹시 지금 Proxmox 고가용성 구성을 고민 중이시라면, 먼저 이렇게 자문해보세요. "장애가 났을 때 나는 무엇을 잃어도 되는가?" 이 질문에 답이 나오면, 스토리지 구조도 꽤 명확해집니다.

    다음 글에서는 Ceph를 포함한 분산 스토리지 관점에서 Proxmox 클러스터를 어떻게 볼지 이어서 다뤄볼 예정입니다. 이전 글에서 다뤘던 백업 전략과 함께 보시면, 복제와 백업을 분리해서 이해하는 데 훨씬 도움이 되실 겁니다.

    Proxmox HA 스토리지 비교 선택 기준 요약 이미지

    예산, 운영 편의성, 장애 대응 기준으로 두 방식을 요약한 비교 인포그래픽입니다.

    자주 묻는 질문

    Q1. Proxmox HA에서 스토리지 복제만으로 충분한가요?

    환경에 따라 가능합니다. 다만 복제는 마지막 동기화 시점 차이가 있으니, 데이터 최신성이 중요한 서비스라면 그 부분을 먼저 검토하셔야 합니다.

    Q2. 공유 스토리지가 있으면 무조건 더 좋은가요?

    꼭 그렇진 않습니다. 운영은 편하지만, 공유 스토리지 자체가 약하면 전체 클러스터가 같이 흔들립니다.

    Q3. 백업과 복제는 왜 따로 봐야 하나요?

    복제는 가용성 향상에 가깝고, 백업은 시점 보존과 복구 전략에 가깝기 때문입니다. 둘은 목적이 다릅니다.

    Q4. 홈랩에서는 어떤 방식이 시작하기 좋나요?

    제 경험상 홈랩은 스토리지 복제로 개념을 익히고, 이후 공유 스토리지나 Ceph로 넘어가는 흐름이 부담이 덜했습니다. 단계적으로 가는 게 훨씬 덜 헷갈리더라고요.