학부 연구생을 하며 3대의 서버를 Lustre 파일 시스템으로 클러스터링 해보라는 미션을 부여받았다.
Lustre가 무엇이고, 설치는 어떻게 하는 것이며 어떻게 사용하는지 아무것도 모르는 상태에서 참 막막했다.
더군다나 Lustre에 대한 논문은 많았지만, 전부 응용에 관한 내용이었지
처음부터 이걸 어떻게 설치하고 적용하는지에 대한 레퍼런스는 대부분 영어로 된 공식 커뮤니티와 문서들을 제외하고는 드물었다.
https://wiki.lustre.org/Main_Page
Lustre Wiki
This site, wiki.lustre.org, is the main community repository for Lustre information. Consult the sidebar for links to major Lustre topics. Learn more about Lustre at http://www.lustre.org. Lustre Enables High Performance, Massively Scalable Storage Lustre
wiki.lustre.org
정말 이걸 알아가는데 많은 시간을 들였고, 오류들도 정말 많이 직면해 고통스럽기도 했다.
그래서 내가 고통스러워하며 배워갔던 Lustre에 관한 내용과 실제 서버에 적용하는 과정을 아무것도 모르는 과거의 내가 다시 봐도 충분히 따라갈 수 있을 정도로
개념(아주 살짝)부터 설치 과정 및 응용(벤치마킹)을 시리즈로 여러 편에 걸쳐 세세하게 풀어써보려 한다.
물론 지금도 내가 Lustre를 완벽하게 아는 것이 아니다.
학부생 수준에서 지금까지 알게 된 내용들을 정리해서 나만의 언어로 공유하는 것 뿐이다.
따라서 내용상 틀린 내용이 있거나 보완해야 할 점이 있으면 고견을 내어 주시면 정말 감사할 것 같다.
Lustre 개념 & 구조
리눅스 기반의 오픈 소스, 객체 지향, 분산, 병렬, 클러스터링 파일시스템
Lustre를 한마디로 설명하면 위와 같다
Lustre는 전용 커널을 필요로 하는 네트워크 기반의 클라이언트 - 서버 아키텍처 파일시스템이다.
클러스터링할 서버 각각 클라이언트와 서버 역할을 지정해줘야한다는 것이다.
따라서 Lustre 전용 네트워크 모듈과 각 역할별로 필요한 모듈들을 다운받아 서버에 올려줘야한다.
우선 Lustre의 구조는 아래와 같다.
https://wiki.lustre.org/images/6/64/LustreArchitecture-v4.pdf
앞에서도 언급했듯이 Lustre는 클라이언트 - 서버 아키텍처인데, 여기서 서버는 다시 역할별로 나뉘고
각 서버는 Target이라고 하는 스토리지 오브젝트를 갖는다. (디스크 하나를 마운트 해줘야 함 추후 설명)
클라이언트부터 시작해서 서버까지, 각각의 역할별 카테고리와 하위 타겟은 어떻게 나뉘는지 크게 살펴보면 다음과 같다.
카테고리
Cilent
Server
- Management Server (MGS)
- Metadata Server (MDS)
- Object Storage Server (OSS)
- Object Storage Target (OST)
Lnet
- Network Module for Lustre
설명에 앞서 서버 하위에 ~T로 끝나는 타겟(Target)이라는 것이 있을 것이다.
이는 쉽게 말하면 서버 내의 스토리지 디스크 혹은 파티션 하나를 의미한다.
각 서버의 역할에 맞는 데이터를 저장하는 곳인 것이다.
따라서 이 타겟은 서버 구성 상황에 따라 여러개를 마운트할 수 있으며 Lustre 파라미터 설정 시 RAID 설정을 통해 병렬처리가 가능하다.
파일시스템 하에서 각각의 서버가 클라이언트로부터 들어오는 데이터를 서버 별 역할에 맞게 분산처리하고, 이 데이터를 스토리지(타겟)에 저장하여 병렬처리를 하므로 Lustre를 네트워크 기반의 분산, 병렬 파일시스템이라 정의하는 이유이다.
이를 구성하는 내용과 방법은 추후 포스팅에서 설명할 예정이다.
위에서 설명한 카테고리 개요를 조금 더 자세히 설명하면 아래와 같다.
Client
서버의 분산형 스토리지를 사용하여 서버에 엑세스한다.
이때 Lnet을 사용해 서버에 접근한다.
각 클라이언트는 여러 다른 Lustre 파일 시스템 인스턴스에 접근 가능하다.
Server
Lustre 아키텍처를 관리하고, 클라이언트가 전송한 데이터를 기록하는 역할을 수행한다.
MGS가 전체적인 Lustre 파일시스템을 관리하고,
MDS는 파일(클라이언트가 엑세스한)의 메타 데이터,
OSS는 실제 파일을 담당한다.
Management Server (MGS)
MGS는 Lustre 파일 시스템 전체를 관리하는 관리서버이다.
이때 꼭 하나의 Lustre 파일 시스템이 아닌, 여러 Lustre 파일 시스템의 마운트를 관리하기도 한다.
MGS가 이용하는 MGT는 모든 Lustre 노드에 대한 구성정보(파일 크기, 권한, 액세스 날짜와 같은 파일 및 디렉터리에 대한 정보)가 기록된 곳이고, 반드시 한 개 이상의 MGT가 마운트되어 있어야 한다.
기록 주체는 당연히 MGS이다.
Object Storage Server (OSS)
실제 파일을 저장하기 위한 스토리지 타겟을 제공하는 서버이다.
MGS, MDS와 마찬가지로 OST라고 하는 스토리지 타겟에 접근 권한을 주고,
각 OST는 파일을 나타내는 Binary 객체들을 담고 있다.
각 객체들 안에는 파일들이 스트라이프(Stripe와 Mirroring 관련 개념은 구글링 바람)되어 저장된다.
Lustre 공식 문서에서는 스트라이프를 레이아웃(Layout)으로 표현한다.
OSS는 여러개의 OST를 마운트할 수 있으며
각 OST는 서로 독립적이다.
OST별 종속성이 없기 때문에 더 많은 OST가 증가됨에 따라 파일 시스템의 성능은 선형으로 증가하게 된다.
https://wiki.lustre.org/Lustre_Object_Storage_Service_(OSS)
Metadata Server (MDS)
Lustre 파일 시스템의 모든 네임스페이스를 제공해 파일 시스템의 아이노드를 저장한다.
즉 파일 열기, 닫기, 삭제, 이름 변경 등의 네임스페이스를 조작하고 관리하는 서버인 것이다.
이때 MDS는 파일 혹은 디렉터리의 메타데이터 처리에만 관여하고,
파일이 한 번 열리면 파일이 닫힐때까지 MDT는 입출력 트랜젝션에 관여하지 않는다.(오버헤드를 피하기 위해)
네임스페이스들을 계층적으로 다루는 것에 더해 파일의 스트라이핑 수, 스트라이핑 한 크기 등을 기록하고 OST에 object들을 할당한다.
MDT는 MDS의 메타 데이터를 저장한다.
이때 저장되는 데이터는 파일 시스템의 디렉토리 구조, 파일 이름, 권한, 파일 레이아웃 등이다.
반드시 한 개 이상의 MDT를 가지고 있어야 한다.
Lnet
Lustre의 네트워크 프로토콜이다.
클라이언트와 서버를 연결하며, Lustre 내 모든 입출력은 스토리지 서버에서 직접 하는 것이 아닌 Lnet으로 실행한다.
TCP/IP 뿐만아니라 Infiniband 네트워크도 지원한다.
아주 아주 부족하지만, 정리해보았다.
다음 포스팅은 연구실에서 내가 실제로 사용한 서버 구성 사항과 서버(MGS, MDS, OSS) 구성에 필요한 모듈들을
다운받아 올려보고, 디스크도 하나의 타겟으로 잡아 마운트하는 과정을 설명하도록 하겠다!