본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
Lustre; 러스터 파일 시스템
메타데이터 서버와 객체 저장 서버를 나누고, 파일을 여러 저장 대상에 줄무늬(stripe)처럼 나눠 써서 병렬 입출력 성능을 높이는 오픈 소스 병렬 분산 파일 시스템

러스터는 슈퍼컴퓨터와 고성능 컴퓨팅(HPC) 환경에서 널리 쓰이는 파일 시스템이다. 공식 위키는 러스터를 "오픈 소스이며 하나의 전역 네임스페이스를 제공하는 POSIX 호환 분산 병렬 파일 시스템"으로, 확장성·고성능·고가용성을 목표로 설계되었다고 소개한다. 리눅스에서 동작하는 클라이언트-서버 구조이며, 서버 수백 대로 수백 페타바이트의 저장 공간과 초당 수 테라바이트의 총 처리량을 수천 대의 계산 노드에 제공할 수 있다.

ADP 교재는 분산 데이터 저장 기술로 GFS, HDFS와 함께 러스터를 다룬다.

러스터는 파일 이름·디렉터리 같은 메타데이터와 파일 내용(데이터)을 서로 다른 서버에 저장한다. 그래서 각 서버를 하는 일에 맞게 최적화할 수 있다.

구성 요소 역할
MDS(Metadata Server, 메타데이터 서버) 디렉터리, 파일 이름, 접근 권한, 열기·닫기, 삭제·이름 바꾸기 같은 네임스페이스 연산을 처리한다. 파일을 만들 때 내용을 저장할 OST 객체를 할당한다.
MDT(Metadata Target) MDS가 관리하는 메타데이터 저장 장치. 파일 이름, 디렉터리, 권한, 파일 레이아웃(데이터가 어느 OST에 어떻게 나뉘어 있는지)을 저장한다. MDT를 여러 개 두어 메타데이터 부하를 나눌 수 있다.
OSS(Object Storage Server, 객체 저장 서버) 파일 내용을 저장하는 대량 입출력을 담당한다. OSS 하나가 보통 2~8개의 OST를 맡는다.
OST(Object Storage Target) OSS가 관리하는 실제 데이터 저장 장치. 파일 시스템 전체 용량은 모든 OST 용량의 합이다.
MGS(Management Server)와 MGT 파일 시스템 구성 정보를 저장하고 서버·클라이언트에 나눠 준다.
클라이언트 계산 노드에 마운트되어 애플리케이션에 표준 POSIX 파일 인터페이스를 제공한다.
LNet(Lustre Networking) 클라이언트와 서버를 잇는 러스터 전용 네트워크 계층. 이더넷, 인피니밴드 등을 지원하고 가능하면 RDMA를 쓴다.

클라이언트는 파일을 열 때만 MDS와 통신하고, 열고 난 뒤의 데이터 입출력은 OSS와 직접 한다. 즉 MDS는 데이터 입출력 경로에 끼지 않는다. 여러 클라이언트가 같은 파일을 동시에 읽고 쓸 수 있도록 캐시 일관성을 지키는 분산 잠금 관리자(distributed lock manager)를 쓴다.

러스터 성능의 핵심은 스트라이핑(striping)이다. 파일 하나를 일정 크기의 조각으로 잘라 여러 OST에 차례로(라운드 로빈) 나눠 저장한다. RAID 0과 같은 방식이다.

  • stripe_count: 파일 하나가 나뉘어 저장되는 OST(객체)의 수
  • stripe_size: 한 OST에 연속으로 쓰는 조각의 크기. 이 크기를 넘으면 다음 OST로 넘어간다.
  • 사용자가 파일이나 디렉터리마다 stripe_count, stripe_size, 사용할 OST를 지정할 수 있다.
  • 파일 하나에 대한 대역폭 요구가 OST 하나의 대역폭을 넘을 때, 또는 파일이 OST 하나에 다 들어가지 않을 만큼 클 때 유용하다.

수천 개의 계산 노드가 하나의 큰 파일을 동시에 읽고 쓰는 과학 시뮬레이션에서 이 방식이 특히 효과적이다.

가용성과 데이터 보호

편집 원본 편집

러스터는 GFS·HDFS와 달리 서버끼리 데이터 객체를 복제하지 않는다. 복제가 지연과 대역폭 부담을 키우기 때문이다. 대신 저장 장치 쪽의 RAID로 디스크 고장에 대비하고, 공유 저장 장치에 연결된 서버 두 대 이상을 액티브-패시브 장애 조치(failover) 구성으로 묶어 서버 고장에 대비한다. 따라서 서버 접근을 잃으면 그 서버가 관리하던 데이터에도 접근할 수 없게 되므로 고가용성 구성이 중요하다.

GFS·HDFS와 비교

편집 원본 편집
항목 GFS HDFS 러스터
주 용도 구글 내부의 대규모 데이터 처리 하둡 기반 빅데이터 일괄 처리 HPC, 슈퍼컴퓨터의 과학 계산
메타데이터 서버 마스터(1개) 네임노드 MDS/MDT(여러 개 가능)
데이터 서버 청크서버 데이터노드 OSS/OST
데이터 분할 64MB 청크 블록(일반적으로 128MB) 스트라이프(파일마다 개수·크기 지정)
장애 대비 청크 복제(기본 3개) 블록 복제(기본 3개) 서버 간 복제 대신 RAID와 장애 조치 구성
인터페이스 전용 클라이언트 라이브러리 전용 API(완전한 POSIX 아님) POSIX 호환
하드웨어 값싼 범용 서버 값싼 범용 서버 고속 네트워크(인피니밴드 등)와 전용 저장 장치를 주로 사용
공개 여부 논문으로 설계만 공개 아파치 오픈 소스 오픈 소스(GPL 2.0)

스트라이핑은 lfs 명령으로 설정한다. 다음은 디렉터리에 새로 만드는 파일을 OST 4개에 1MB 단위로 나눠 쓰도록 지정하고, 파일의 레이아웃을 확인하는 예이다.

lfs setstripe -c 4 -S 1M /mnt/lustre/results
lfs getstripe /mnt/lustre/results/output.dat
  • 메타데이터(MDS/MDT)와 데이터(OSS/OST)를 분리한 구조, 그리고 각 약어의 뜻을 짝지을 수 있어야 한다.
  • 파일을 여러 OST에 나눠 저장하는 스트라이핑으로 병렬 입출력 성능을 얻는다는 점이 핵심이다.
  • 주 용도가 HPC·슈퍼컴퓨터라는 점, POSIX 호환이라는 점에서 GFS·HDFS와 구분한다.
  • 클라이언트는 파일을 연 뒤 OSS와 직접 데이터를 주고받으며, MDS는 데이터 입출력에 관여하지 않는다.