스토리지 연결 토폴로지
- 데이터가 저장되는 장치와 이를 사용하는 호스트(서버)가 물리적/논리적으로 어떻게 연결되는지에 따른 분류
- DAS (Direct Attached Storage)
- 스토리지 장치가 서버의 메인보드 버스에 직접 연결되는 방식
- 연결 방식 : SATA, SAS, NVMe(PCIe) 인터페이스를 사용하여 서버 섀시 내부 혹은 외부 케이블로 1:1 연결
- 특징
- 전용성 : 연결된 호스트 서버만이 해당 스토리지에 접근할 수 있다. (공유 불가)
- 접근 경로 : 네트워크 스위치를 거치지 않으므로 지연시간이 가장 낮다.
- OS 인식 : 호스트 OS는 이를 /dev/sda와 같은 로컬 블록 디바이스로 인식한다.
- SAN (Storage Area Network)
- 서버와 스토리지 간의 데이터 전송을 위해 구축된 고속 전용 네트워크. 스토리지 풀을 구성하고 서버에 필요한 만큼 공간(LUN)을 할당한다.
- 연결 방식 : 광케이블 기반의 FC(Fibre Channel) 스위치 또는 이더넷 기반의 iSCSI를 사용한다.
- 특징
Block Level Access : 서버는 네트워크를 통해 연결되지만, 로컬 디스크처럼 인식한다.
- Decoupling : 스토리지와 서버가 분리되어 있어, 서버가 다운되어도 데이터는 스토리지 장비에 안전하게 보존되며 다른 서버에 즉시 재할당할 수 있다.
- 고성능 : 스토리지 전용 프로토콜(SCSI Command)을 캡슐화하여 전송하므로 오버헤드가 적다.
- NAS (Network Attached Storage)
- LAN을 통해 파일 시스템 자체를 공유하는 스토리지 서버
- 연결 방식 : 일반적인 Ethernet(TCP/IP) 네트워크를 사용한다.
- 특징
File Level Access : 클라이언트는 블록 위치를 몰라도 되며, 파일명과 경로를 통해 데이터에 접근한다.
- 이기종 공유 : 리눅스, 윈도우 등 서로 다른 OS를 사용하는 서버들이 데이터를 쉽게 공유할 수 있다.
LUN (Logical Unit Number)
물리적인 디스크(RAID 그룹)를 논리적으로 분할하여 호스트(서버)가 인식할 수 있는 논리적 디스크 단위를 식별하는 고유 번호
- 작동 원리 : 스토리지 장비 내에 SSD 10개로 구성된 10TB RAID 그룹이 있다고 가정했을 때, 이를 한 번에 쓰지 않고 1TB, 2TB 등으로 쪼갠다. 이때 1TB 조각에
LUN 0, 2TB 조각에 LUN 1이라는 번호를 붙인다.
- 서버 인식 : 서버는 물리 디스크를 직접 보는 것이 아니라, 스토리지 컨트롤러가 할당해 준 이 LUN 번호를 통해 하나의 독립적인 물리 디스크로 인식한다. ( ex. LUN 0 => /dev/sdb )
FC (Fibre Channel)
대용량 데이터를 고속으로 전송하기 위해 설계된 스토리지 전용 네트워킹 기술 표준. 프로토콜이자 물리적 인터페이스(케이블/포트)를 모두 지칭한다.
- 특징 : 일반 이더넷과 달리 패킷 손실이 거의 없는 전송을 보장하며, 오버헤드가 매우 낮고 지연시간이 짧다.
- 속도 : 8G, 16G, 32G, 64G FC 등이 사용된다.
- 구성 : FC Switch를 중심으로 서버와 스토리지가 연결되는 Fabric 토폴로지를 구성하여 다대다 통신을 지원한다.
SCSI Command
SCSI는 컴퓨터와 주변기기(스토리지) 간에 데이터를 주고받기 위한 표준 명령어 세트.
- 역할 : OS가 디스크에 데이터를 써라, 읽어라라고 명령할 때 사용하는 언어이다.
- CDB (Command Descriptor Block) : SCSI 명령어는 CDB라는 데이터 구조로 전송된다.
- 여기에는
Operation Code(읽기/쓰기 구분), LBA(데이터 위치), Transfer Length(전송할 크기) 등의 정보가 담긴다.
- 캡슐화 : SAN 환경에서는 이 SCSI 명령어를 멀리 보내기 위해 다른 프로토콜로 감싼다.
FCP (Fibre Channel Protocol) : SCSI 명령어를 FC 프레임에 담아 전송
ISCSI : SCSI 명령어를 TCP/IP 패킷에 담아 전송
데이터 관리 방식에 따른 기술적 차이
- 물리적 디스크 위에 데이터가 논리적으로 어떻게 저장되고 관리되는지에 대한 분류
- 블록 스토리지 - SAN, DAS
- 데이터 구조 : 데이터를
블록(Block, 통상 512B 또는 4KB)이라는 고정된 크기의 raw chunk로 분할하여 관리한다.
- LBA (Logical Block Addressing) : 각 블록은 고유한 주소를 가지며, 파일 시스템 같은 메타데이터(파일명, 생성일 등)가 전혀 없다.
- 제어 주체 : 호스트 서버의 OS(파일 시스템)
- 스토리지는 단순히 주소(LBA 0~100)를 제공할 뿐, 그 안에 무엇이 저장되는지 모른다.
- 서버가 직접 NTFS, EXT4, XFS 등으로 포맷하고 파일 트리 구조를 관리한다.
- 용도 : 높은 I/O 성능이 필요한 DB, OS 부팅 디스크, VM 디스크 이미지
- 파일 스토리지 - NAS
- 데이터 구조 : 파일과 디렉토리의 계층적 트리 구조로 관리한다.
- 제어 주체 : 스토리지 장비의 OS
- 클라이언트(서버)는 파일의 생성, 읽기, 쓰기 요청만 보낸다.
- 실제 디스크의 어느 블록에 데이터를 기록할지는 스토리지 장비가 내부적으로 결정한다.
- File Locking : 여러 클라이언트가 동시에 같은 파일을 수정하여 데이터가 손상되는 것을 막기 위해
NLM(Network Lock Manager) 등의 기술을 사용하여 동시성을 제어한다.
- 오브젝트 스토리지
- 데이터 구조 : 계층 구조가 없는 평면적(Flat) 구조. 데이터는 객체(Object) 단위로 저장되며,
Data(실제 내용) + Network(속성) + Global Unique ID(Key)로 구성된다.
- 접근 방식 : RESTful API (HTTP/HTTPS)를 사용한다.
- 확장성(Scale-Out)
- Consistent Hashing : 데이터의 저장 위치를 중앙 DB가 아닌 알고리즘(해시 함수)으로 결정한다.
- 물리적 노드(서버)를 추가하면 전체 클러스터의 용량과 성능이 선형적으로 증가한다.
- 불변성 : 객체는 수정이 불가능하며, 덮어쓰기만 가능하다. 이는 분산 환경에서 데이터 무결성과 복제 동기화를 효율적으로 하기 위함이다.
- 용도 : 비정형 데이터(이미지, 영상), 백업 아카이브, 정적 웹 호스팅, 빅데이터 분석
Raw Chunk
파일 시스템이나 구조화된 메타데이터가 입혀지지 않은 순수한 바이너리 데이터 덩어리를 의미한다.
- 파일 시스템이 '건 엑셀 파일이다'라고 정의하기 전 단계의 디스크 상에 기록되는 0과 1의 비트열이다.
- 블록 스토리지 레벨에서는 이 데이터가 무엇인지 해석하지 않고 오직 저장만 한다.
LBA의 고유한 주소 의미
물리적인 디스크의 저장 공간을 일렬로 나열된 블록들의 배열로 추상화하고, 각 블록에 0부터 시작하는 정수 인덱스(주소)를 부여한 것.
- OS는 100번 블록부터 5개 블록을 읽어라라고 단순하게 주소만 호출하면 된다. 스토리지 컨트롤러가 이 LBA 번호를 실제 물리적 위치로 매핑한다.
파일 시스템: NTFS, EXT4, XFS
서버가 블록 스토리지(LUN)를 포맷할 때 사용하는 데이터 구조화 방식
NTFS (New Technology File System) : Windows 서버의 표준 파일 시스템. ACL(접근 제어 목록), 저널링(복구 기능) 등을 지원한다.
EXT4 (Fourth Extended Filesystem) : 리눅스의 표준 파일 시스템. 호환성이 좋고 안정적이다.
XFS : 고성능 리눅스 파일 시스템. 대용량 파일 처리와 병령 I/O 성능이 뛰어나 엔터프라이즈 환경(RHEL, CenOS) 및 Ceph의 OSD(데이터 저장 데몬)용 파일 시스템으로 주로 사용된다.
NLM (Network Lock Manager)
- 작동 : 클라이언트 A가 파일을 열면 NLM 데몬을 통해 서버에 Lock을 요청한다. 서버가 승인하면, 다른 클라이언트 B가 쓰기 요청을 해도 NLM이 이를 거부하거나 대기시킨다.
스토리지 장비의 하드웨어 구성 및 컨트롤러
- 물리적 계층
- 모든 스토리지는 결국 SSD 또는 HDD의 집합이다. 이를 Disk Enclosure(디스크 서랍)에 장착하여 사용한다.
- SAN 스토리지 컨트롤러 (Storage Processor)
- 역할 : 고속 I/O 처리 및 RAID 연산 전용 장치
- 구성
- Frond-end : 서버와 연결되는 포트(FC, iSCSI)
- Cache Memory : 쓰기/읽기 속도 향상을 위한 고속 메모리.
- Back-end : 물리 디스크와 통신하는 SAS 컨트롤러
- RAID Engine : 물리 디스크를 논리적 그룹(LUN)으로 묶고 패리티를 연산하는 전용 ASIC/FPGA 칩셋
- Front-end (Host-side) : 서버(Host)와 연결되는 부분. FC 포트나 iSCSI 포트가 있으며, 서버로부터 오는 I/O 요청을 받아들이고 프로토콜을 해석한다.
- Back-end (Disk-side) : 실제 물리 디스크(SSD/HDD)들이 꽂혀 있는 인클로저와 연결되는 부분. 주로 SAS(Serial Attached SCSI) 인터페이스를 사용하며, 데이터를 실제 디스크에 기록하거나 읽어온다.
- 특징 : OS나 파일 시스템을 구동하지 않으며, 오직 블록 입출력 처리에 최적화되어 있다.
- NAS 스토리지 컨트롤러 (NAS Head)
- 역할 : SAN 컨트롤러의 기능(RAID) + 파일 서버(OS) 기능 수행
- 구성
- RAID Controller : 물리 디스크 관리 (하위 레벨)
- Main CPU & RAM : 범용 프로세서 탑재
- Embedded OS : 리눅스, FreeBSD 등을 커스터마이징한 전용 OS 탑재 (파일 시스템 관리, 네트워크 프로토콜 처리)
- 작동 원리
- 클라이언트로부터 TCP/IP 패킷(NFS 요청) 수신
- NAS OS가 요청 해석 및 파일 시스템 메타데이터 조회
- 파일이 저장된 블록 위치 계산
- RAID 컨트롤러에게 해당 블록 데이터 요청
RAID (Redundant Array of Independent Disk)
여러 개의 물리 디스크를 묶어 성능 향상과 데이터 안정성을 확보하는 기술
RAID 0 (Striping) : 데이터를 여러 디스크에 분산 저장. 속도는 가장 빠르나 디스크 1개만 고장나도 데이터 전체 손실.
RAID 1 (Mirroring) : 데이터를 똑같이 복제 저장. 안정성은 높으나 용량 효율이 50%로 낮음.
RAID 5 (Parity) : 데이터와 패리티(오류 검출 정보)를 분산 저장. 디스크 1개 고장까지 복구 가능. 읽기 빠름, 쓰기 느림 (최소 디스크 3개)
RAID 6 : 패리티를 2중으로 저장. 디스크 2개 고장까지 복구 가능. 안정성 높음
RAID 10 (1+0) : Mirroring 후 Striping. 성능과 안정성을 모두 잡은 방식으로, DB 서버 등 고성능 요구 시 용
프라이빗 클라우드 구축을 위한 네트워크 이론
- 스토리지와 서버를 연결하는 네트워크는 일반 인터넷 네트워크와 분리하여 설계해야 한다.
- 스토리지 전용 네트워크 (Storage Network Separation)
- 이유 : 서비스 트래픽 폭주가 디스크 I/O 성능에 영향을 주지 않도록 물리적/논리적으로 격리해야 한다.
- 구현
- Dedicated NIC : 서버에 스토리지 통신 전용 랜카드를 장착
- Storage VLAN : 스토리지 트래픽만 다니는 별도의 VLAN ID 할당 및 QoS 설정
- 프로토콜 및 기술
iSCSI (Internet Small Computer System Interface) : SCSI 명령을 TCP/IP 패킷에 캡슐화하여 이더넷으로 전송하는 기술. 별도의 FC 스위치 없이 기존 LAN 장비 활용 가능.
Jumbo Frames
- 표준 이더넷 MTU(1500 bytes)를 9000 bytes로 확장
- 대용량 스토리지 데이터 전송 시 패킷 헤더 오버헤드를 줄이고 CPU 부하를 감소시켜 Throughput 증대
MPIO (Multipath I/O)
- 서버와 스토리지 간의 경로를 다중화(2개 이상의 케이블/스위치)
- Load Balancing : 트래픽을 분산하여 대역폭 확장
- Failover : 한 경로가 단절되어도 즉시 다른 경로로 전환하여 무중단 서비스 보장
NVMe-oF (NVMe over Fabrics : 기존 SATA/SATA 대비 월등히 빠른 NVMe SSD의 성능을 네트워크 병목 없이 활용하기 위한 초고속 프로토콜 (RDMA 활용)
QoS (Quality of Service)
스토리지 성능을 특정 수준으로 보장하거나 제한하는 기술
bandwidth 제한: 초당 전송률을 제한하여 특정 서버가 대역폭을 독점하지 못하게 한다.
OPS (Input/Output Per Second) 제한/보장: 초당 입출력 횟수를 제한한다. 클라우드 환경에서 Noisy Neighbor(자원을 과점는 VM) 문제를 방지하기 위해 필수적이다.
OpenStack 기반 프라이빗 클라우드 구성 전략
- 현업에서는 Ceph와 같은 SDS (Software Defined Storage)를 사용하여 통합 스토리지 환경을 구축하는 것이 일반적이다.
- OpenStack 스토리지 서비스 매핑
- OpenStack은 하드웨어를 직접 제어하지 않고, 추상화된 API를 제공한다. 실제 데이터 저장은 백엔드 드라이버가 수행한다.
- Cinder (Block Storage)
- 역할 : VM에 장착할 가상 하드디스크 생성 및 관리
- 백엔드 : Ceph, RBD, Vendor SAN(Dell EMC, Hitachi 등), LVM
- Manila (Shared File Systems)
- 역할 : 여러 VM이 공유할 수 있는 파일 시스템(NAS) 프로비저닝
- 백엔드 : CephFS, Vendor NAS(NetApp 등)
- Swift / Glance (Object/Image Storage)
- 역할 : 비정형 데이터 및 VM 이미지(OS ISO, Snapshot) 저장
- 백엔드 : Ceph RGW (RADOS Gateway), Swift Node
- Ceph를 이용한 통합 구성 (Hyper-Converged or Disaggregated)
- 최근 프라이빗 클라우드는 Ceph 하나로 Block, File, Object를 모두 제공하는 추세
- 물리 구성 : x86 서버(Storage Node)에 다수의 HDD/SSD를 장착하고 Ceph 소프트웨어를 설치
- 네트워크 구성
- Public Network : OpenStack Compute Node가 Ceph 스토리지에 접근하는 망
- Cluster Network : Ceph 노드끼리 데이터 복제 및 리밸런싱을 수행하는 내부 전용 망 (대역폭 중요)
- 작동 방식
- OpenStack Nova가 VM 생성을 요청
- Cinde API 호출 -> Ceph RBD 드라이버 동작
- Ceph 클러스터 내의 분산된 디스크들에 데이터가 쪼개져 저장됨 (Striping & Replication)
- VM은 이를 로컬 디스크처럼 인식하고 부팅
Cinder/Manila 백엔드 종류 간략 설명
Ceph RBD : Ceph의 블록 스토리지 기능. 데이터를 수많은 노드에 분산 저장하며, 오픈스택과 호환성이 가장 좋다.
Vendor SAN (Dell EMC, Hitachi 등) : 상용 스토리지 장비를 Cinder 드라이버를 통해 연동. 하드웨어 자체의 고급 기능(스냅샷, 압축 등)을 활용한다.
LVM (Logical Volume Manager) : 리눅스 커널의 기능을 이용해 로컬 디스크를 논리적으로 관리. 구성이 쉽지만 HA(고가용성) 구성이 어렵다.
CephFS : Ceph가 제공하는 분산 파일 시스템. POSIX 호환 파일 시스템을 제공한다.
Vendor NAS (NetApp) : NetApp 같은 전문 NAS 장비를 Manila 드라이버로 제어하여 파일 공유 서비스를 제공한다.
x86 서버
흔히 사용하는 Intel, AMD CPU 기반의 범용 표준 서버 아키텍처
- 고가의 전용 칩셋(ASIC)을 사용하는 상용 스토리지 장비와 대비되는 개념
- SDS : 비싼 전용 장비 대신, 쉽게 구할 수 있는 저렴한 범용 서버에 똑똑한 소프트웨어(Ceph)를 설치하여 엔터프라이즈급 스토리지 성능을 내겠다는 것이 핵심.