[OpenStack] Cinder

KH55S·2025년 11월 19일

OpenStack

목록 보기
6/9

Cinder는 AWS의 EBS와 동일한 역할을 수행하는 OpenStack의 Block Storage 서비스로, VM에 외장 가상 하드디스크영구적인 데이터 디스크를 제공하는 역할을 한다.

  • Block Storage : 데이터를 파일 단위가 아닌, 고정된 크기의 Block 단위로 관리하는 저장소이다. 운영체제는 이를 물리적인 디스크처럼 인식한다.
  • Persistent (영속성) : VM이 삭제되어도 Cinder 볼륨에 저장된 데이터는 사라지지 않는다. (Nova의 기본 디스크인 Epherneral Disk는 VM 삭제 시 함께 삭제된다.)
  • 유연성 : 실행 중인 VM에서 Detach해서 다른 VM에 Attach 하는 것이 가능하다.

iSCSI / Ceph

  • 네트워크를 통해 저장 공간(스토리지)를 제공하는 기술
  • Cinder 관점에서 iSCSI는 전통적이고 표준화된 연결 방식 / Ceph는 현대적이고 확장 가능한 분산 스토리지 시스템이다.

  • iSCSI (Internet Small Computer Systems Interface)
    • 컴퓨터와 하드디스크를 연결하는 SCSI 명령어를 TCP/IP 패킷에 담아서 네트워크로 전송하는 프로토콜.
    • 비싼 전용 케이블없이, 흔히 쓰는 이더넷(랜선)을 통해 스토리지를 연결할 수 있다.
    • 구성 요소 (Client-Server 구조, 1:1 / 1:N)
      • Initiator (클라이언트) : 스토리지를 사용하는 쪽. (오픈스택의 Compute Node/Nova)
      • Target (서버) : 실제 디스크를 가지고 있는 스토리지 장비. (오픈스택의 Cinder Volume Node)
    • 동작 원리 (Cinder에서)
      • 포장 : Compute Node(Initiator)가 디스크 쓰기 명령(SCSI)를 내리면, OS가 이를 TCP/IP 패킷으로 감싼다.
      • 배송 : 이 패킷이 네트워크 스위치를 타고 Storage Node(Target)으로 간다.
      • 해제 : Storage Node가 패킷을 뜯어 SCSI 명령을 꺼내고, 실제 디스크에 쓴다.
    • 특징
      • 장점 : 표준 프로토콜이라 거의 모든 OS와 장비가 지원한다. 구축 비용 저럼하다.
      • 단점 : 중앙 집중형 구조. Target 서버 하나가 고장나면 그 안에 있는 데이터에 접근할 수 없다. 용량을 늘리려면 비싼 장비를 통째로 바꿔야 하는 경우가 많다.
    • Cinder 드라이버 : LVM, NetApp, EMC 등

  • Ceph
    • 오픈 소스 기반의 소프트웨어 정의 스토리지(SDS). 특정 하드웨어에 종속되지 않고, 일반적인 서버 여러 대를 네트워크로 묶어 분산 스토리지 클러스터를 구성한다.
    • 프라이빗 클라우드의 사실상 표준 스토리지
    • 구성 요소 (분산 클러스터 구조, N:N)
      • OSD (Object Storage Daemon) : 실제 데이터를 저장하는 일꾼. (하드디스크 하나당 OSD 하나가 실행된다.
      • MON (Monitor) : 클러스터의 상태를 감시
      • RBD (RADOS Block Device) : Ceph의 저장 공간을 잘라서 가상 하드디스크 처럼 쓰게 해주는 기능
    • 동작 원리 (데이터 분산 저장)
      • Ceph는 데이터를 잘게 쪼개서(Object) 여러 서버에 복제하여 저장한다.
      • 쪼개기 : 사용자가 1GB짜리 파일을 저장하면, Ceph는 이를 4MB 단위의 Object들로 나눈다.
      • 흩뿌리기 : 각 조각을 서로 다른 서버(OSD)에 분산 저장한다.
      • 복제 : 데이터 유실을 막기 위해 기본적으로 3개의 복제본을 만들어 서로 다른 서버에 저장한다.
    • 특징
      • 장점 (Scale-out, Self-healing) : 용량이 부족하면 서버 한 대를 네트워크에 연결하면 된다, 서버 하나가 고장나면 시스템이 알아서 다른 서버에 있는 복제본을 이용해 데이터를 복구한다. 서비스 중단이 없다.
      • 단점 : 구조가 복잡하고, 네트워크 대역폭을 많이 사용한다.
    • Cinder 드라이버 : Ceph RBD

Cinder 구성 요소

  • cinder-api : 사용자의 요청(볼륨 생성, 삭제 등)을 접수하는 프론트엔드
  • cinder-scheduler : 볼륨 생성 요청이 왔을 때, 여러 스토리지 백엔드 중 어디에 볼륨을 만들지 결정한다.
  • cinder-volume : 실제 스트로지 장비와 통신하는 드라이버 관리자. 스토리지 제조사(NetApp, EMC, Ceph 등)의 드라이버를 통해 실제 하드웨어에 명령을 내린다.
  • cinder-backup : 볼륨 데이터를 별도의 저장소(Swift, Ceph 등)로 백업하는 서비스
  • Database (SQL) & Queue (RabbitMQ) : 서비스 간 상태 정보 저장 및 메시지 전달 담당

Cinder 동작 과정

  1. 볼륨 생성 (Control Plane)

    사용자가 "10GB 디스크를 생성" 요청을 했을 때 흐름으로, 데이터가 이동하는 것이 아니라 디스크 공간을 예약하는 관리 작업이다.

    • User -> cinder-api : 10GB 볼륨 생성 요청 (HTTP REST API)
    • cinder-api -> cinder-scheduler : (RabbitMQ) 어디에 만들 것인가?
    • cinder-scheduler : 사용 가능한 스토리지 풀을 확인하고 최적의 노드를 선정하여 cinder-volume에게 지시한다.
    • cinder-volume -> Storage Backend : (Driver) 실제 스토리지 장비에 10GB 공간을 확보하라고 명령한다.
    • DB에 볼륨 정보가 기록되고 상태가 Available이 된다.

  1. 볼륨 연결 및 데이터 접근 (Data Plane & Network)

    사용자가 VM 내에서 파일을 저장하거나 읽을 때, 데이터가 네트워크를 타고 실제 스토리지까지 가는 과정. 가장 흔한 방식인 iSCSICeph(RBD)를 예로 들어서 설명.

    • VM(vm1)이 Cinder 볼륨(vol-A)에 데이터를 쓸때
    • 1_ 연결 (Attachment -> Control Plane)
      • 사용자가 Horizon에서 vol-A를 vm1에 연결하라고 요청한다.
      • Cinder : 스토리지 장비에 "이 볼륨을 특정 IP가 접근할 수 있도록 열어라(Export)"라고 명령한다. 접속 정보(IP, Port, iQN, 인증키)를 Nova에 전달한다.
      • Nova : Cinder가 준 접속 정보를 이용해서 호스트 리눅스(Compute Node)가 스토리지에 연결하도록 한다.
    • 2_ 데이터 흐름 (I/O Path - Data Plane)
      • 여기서부터는 OpenStack 제어 서비스(API, Scheduler)는 관여하지 않고, Compute 노드와 Storage 노드가 직접 네트워크로 데이터를 주고 받는다.

      • [📌 iSCSI 방식을 사용하는 경우 (LVM, 외장 스토리지) ]
      • VM 내부 (App -> Kernel) : 사용자가 파일에 데이터를 쓴다. 게스트 OS는 이를 가상 디스크(/dev/vdb)에 쓰는 것으로 인식한다.
      • Virtio 드라이버 : 게스트 OS의 virtio-blk 드라이버가 이 I/O 요청을 하이퍼바이저(QEMU)로 전달한다.
      • Compute Node (Host OS)
        • QEMU는 이 요청을 호스트 OS의 iSCSI Initiator 서비스로 보낸다.
        • 호스트 OS는 이 데이터 패킷을 TCP/IP 패킷으로 감싼다.
      • 스토리지 네트워크
        • 패킷은 Compute 노드의 물리 NIC를 통해 스위치를 거쳐 Storage 노드의 IP와 포트로 전송된다.
        • 이때 트래픽은 관리망(API)나 외부망이 아닌, 대용량 트래픽이 발생하기 때문에 별도로 구성된 스토리지 전용 네트워크를 타는 것이 일반적이다.
      • Storage Node (Target) : 스토리지 서버가 패킷을 받아 실제 디스크에 기록한다.

      • [📌 Ceph (RBD) 방식을 사용하는 경우 ]
      • kolla-ansible 등에서 주로 사용하는 방식
      • VM 내부 -> QEMU : virtio-blk를 통해 QEMU로 요청이 들어온다.
      • QEMU (librbd)
        • iSCI와 달리, QEMU 프로세스 자체가 Ceph 클라이언트 라이브러리(librbd)를 내장하고 있다.
        • QEMU가 호스트 OS를 거치지 않고 직접 Ceph 프로토콜을 사용하여 데이터를 쪼개고, 스토리지 네트워크를 통해 Ceph 클러스터의 여러 노드로 데이터를 분산 전송한다.
      • 스토리지 네트워크 : TCP/IP 통신이 발생하며, 데이터가 여러 스토리지 노드로 병렬 전송된다.

📌 요약
VM : VM은 네트워크를 모르고, 로컬에 꽂힌 SATA.SCSI 하드디스크라고 착각한다. (추상화)
Hypervisor : VM이 디스크에 쓰기 작업을 요청하면, 이를 가로채서 네트워크 패킷(iSCSI, Ceph)로 변환한다.
물리 네트워크 : Compute 노드와 Storate 노드 사이에 대량의 스토리지 트래픽이 흐른다.
=> 프라이빗 클라우드를 구축할 때는 Cinder 트래픽을 처리하기 위한 별도의 고속 네트워크와 전용 인터페이스를 구성하는 것이 필수적이다.
(대용량 파일 복사 시 VM 통신이나 대시보드 접속이 느려지는 간섭 현상 발생)

  

0개의 댓글