Luster Manual의 28 챕터를 보면 Nodemap을 이용한 권한 설정 방법이 나온다.

 

기본적으로 Lustre를 설치한 뒤 권한 설정을 하지 않으면 단순한 ls 명령어를 통한 디렉토리 확인조차도 권한 문제로 인해 실행할 수 없게 된다.

root 계정으로 사용하는 것이라면 문제가 없지만, 일반 계정에서 Lustre를 사용하기 위해선 UID or GID의 설정이 필요하다.

 

UID 및 GID 설정은 MGS를 설치한 서버에서 진행해야한다.

UID 매핑을 직접 설정할 사람은 해당 자료를 참고하여 설정하면 도움이 될 것이다.

 

연구실의 시스템에서는 특정 UID를 매핑하는 것이 아니라,

전체 유저가 사용할 수 있도록 하기 위해 identity_upcall을 NONE으로 설정하였다.

lctl set_param mdt.*.identity_upcall=NONE
lctl nodemap_activate 1

 

이후 Lustre가 마운트되어있는 클라이언트에서 root 계정의 소유로 되어있는 /mnt/lustre 디렉토리 권한을 조정한다.

chmod / chown & chgrp 를 사용하여 디렉토리 권한을 조정해주면 권한 문제가 해결된다.

이전에 설치한 Lustre 파일 시스템을 클라이언트에서 마운트한다.

본 게시글에서는 /mnt/lustre 폴더에 파일 시스템을 마운트하여 진행한다.

 

MDS 및 OSS에서와 마찬가지로, Lustre 커널 모듈을 올려준다.

Client 커널 모듈 적재 및 확인

 

커널 모듈을 올려준 뒤, 목표로 하는 디렉토리에 파일 시스템을 마운트해준다.

마운트 명령어는 다음과 같이 작성하여 실행한다.

mount -t lustre <MGS_NID>:/<fsname> /<mount point>

mkdir /mnt/lustre
mount -t lustre mds@tcp:/lustre /mnt/lustre

 

Lustre 마운트 확인

 

연결된 Lustre의 사용량은 lfs df 명령어를 통해 확인할 수 있다.

Lustre File System Summary

 

 

자동 마운트 설정은 /etc/fstab에 작성하면 재부팅시 자동 마운트 되도록 설정할 수 있다.

MDS /dev/sdb        /mnt/mdt        lustre  defaults,_netdev        0       0
OSS /dev/sdb        /mnt/ost1       lustre  defaults,_netdev        0       0
/dev/sdc        /mnt/ost2       lustre  defaults,_netdev        0       0
/dev/sdd        /mnt/ost3       lustre  defaults,_netdev        0       0
/dev/sde        /mnt/ost4       lustre  defaults,_netdev        0       0
Client mds@tcp:/lustre /mnt/lustre     lustre  defaults,_netdev        0       0

위 예시와 같이 작성해주면 재부팅시 자동으로 마운트되도록 설정할 수 있다. 

이전 글에서 설치한 리눅스 커널로 부팅된 머신을 기준으로 설명

 

소규모 서버이기 때문에 MDS와 MGS를 하나의 서버에 설치하는 방식으로 진행한다. 

 

먼저 modprobe 명령어를 통해 커널 모듈을 올려준다. 실행 후 lsmod 명령어를 통해 커널 모듈을 확인할 수 있다.

Lustre 커널 모듈 적재 및 확인

 

이후 fdisk 명령어를 통해 MDT로 사용할 디스크를 확인하고, 파일 시스템을 구축한다.

파라메터의 fsname는 본인이 설정하고자 하는 이름으로 작성하면 된다. 본 게시글에서는 lustre로 작성하여 진행하였다.

Lustre MKFS

 

디스크 포맷 및 파일시스템 설치를 진행한 뒤, 디렉토리를 생성하여 마운트 해준다.

df 명령어를 통해 마운트된 것을 확인할 수 있으며, netstat 명령어를 통해 세션 연결을 확인할 수 있다.

 

MDT Mount & Session Check

 

 

 

이후 동일한 방식으로 OSS 설치를 진행한다.

파라메터의 fsname은 MDS에서 정한 이름을 그대로 사용하고, MGS 노드의 네트워크 위치를 작성한 뒤 설치한다.

OSS MKFS

 

Lustre 파일시스템에 사용하고자 하는 모든 HDD를 다음과 같은 방식으로 index 설정하여 설치하면 된다.

본 게시글에서는 2개의 서버, 총 8개의 HDD를 사용하기 때문에 하나의 서버당 4개의 HDD를 OST로 설정해야 한다.

각 HDD를 0번부터 3번, 4번부터 7번으로 순서를 정해 설치한다.

oss1# mkfs.lustre --fsname=lustre --ost --mgsnode=mds@tcp --index=0 --reformat /dev/sdb
oss1# mkfs.lustre --fsname=lustre --ost --mgsnode=mds@tcp --index=1 --reformat /dev/sdc
...
oss2# mkfs.lustre --fsname=lustre --ost --mgsnode=mds@tcp --index=6 --reformat /dev/sdd
oss2# mkfs.lustre --fsname=lustre --ost --mgsnode=mds@tcp --index=7 --reformat /dev/sde

 

OST를 설치해준 뒤 MDS에서와 마찬가지로 디렉토리를 생성하고, 마운트해주면 서버 설정이 끝난다.

OST Mount

 

OSS를 설치한 뒤 netstat 명령어로 다시 확인해보면 OSS 세션이 연결되어 있는 것을 확인할 수 있다.

Session Check

 

 

추가적으로 여러개의 네트워크를 사용하는 경우, LNet을 통한 네트워크 설정을 해주는 편이 좋다.

기본적으로 Lustre는 첫번째 네트워크를 기본 네트워크로 인식하여 사용하기 때문에,

서버 재부팅 시 다른 네트워크로 연결되어 문제가 발생할 수 있어 추가적인 설정을 해주어야 한다.

 

연구실의 설정에서는 네트워크 인터페이스를 확인한 뒤, 해당 인터페이스를 사용하도록 추가해주었다.

mds# lnetctl net lnetctl net add --net tcp0 --if enp179s0f0

mds# lnetctl net show
net:
    - net type: lo
      local NI(s):
        - nid: 0@lo
          status: up
    - net type: tcp
      local NI(s):
        - nid: 120.70.10.103@tcp
          status: up
          interfaces:
              0: enp179s0f0

 

자세한 LNet 설정 방법은 Lustre Manual의 9 챕터를 참고하면 도움이 될 것이다.

Lustre를 2.12.5 버전으로 설치하기로 결정했으니, 해당 버전에 맞춰 서버와 클라이언트의 커널 버전 또한 맞춰줘야 한다.

 

우선 MDS와 OSS에 CentOS 7.8 버전을 설치하고, 클라이언트는 Ubuntu 18.04버전을 설치한다.

 

주의할 점은 OS를 설치할 때 디스크를 LVM으로 설치하면 안된다는 것이다.

LVM을 이용해 설치하게 될 경우 서버에 설치되어있는 HDD와 SSD를 모두 하나의 가상 볼륨으로 묶어버리기 때문에,

Lustre 파일 시스템을 설치할 때 문제가 발생할 수 있다. (블럭 파티션 포맷이 안되는 문제 발생)

 

본인도 이를 모른 채 설치를 진행했다가 3대의 서버 전부를 포맷하는 불상사를 겪었기에...

꼭 디스크는 개별 디스크로 분리한 뒤, OS용 디스크를 따로 설정하여 진행하도록 하자.

 

OS 설치는 워낙 간단하기도 하고 다양한 설정이 존재하기 때문에 작성하지 않았다. 필요한 정보는 검색을 통해 찾으면 나온다.

 

OS 설치가 끝났다면 호환되는 커널 버전을 확인하기 위해서 Changelog를 확인하고,

해당하는 커널로 업/다운그레이드를 진행해준다.

 

Lustre 2.12.5 Changelog

Changelog를 참고하여 연구실의 환경 구성은 서버에서 CentOS, 클라이언트에서 Ubuntu를 사용하도록 하였다.

서버의 경우 CentOS 7.8, 커널버전 3.10.0-1127.8.2.el7,

클라이언트의 경우 Ubuntu 18.04, 커널버전 4.15.0-72를 사용한다.

 

커널 버전의 업/다운그레이드 방법은 검색하면 많은 결과가 나오니 이를 참고하여 진행한다.

본인은 안정성을 위해 yum과 apt-get을 통해 커널을 설치하고, 기존 커널을 제거해주는 방식으로 진행하였다.

 

Client의 Kernel Version

 

MDS Server의 Kernel Version

 

이와 같이 커널 버전을 조정해준 뒤, Lustre 실행에 필요한 패키지를 설치해준다.

패키지는 공식 홈페이지의 Download 페이지의 All Lustre Releases 페이지를 통해 다운로드 받는다.

Lustre Release Download Page

 

 각 버전마다 -ib 라는 디렉토리가 있는데, 이는 InfiniBand 네트워크를 이용하는 Lustre 패키지이므로 일반 디렉토리에서 다운로드 받도록 한다.

 

다운받고자 하는 버전의 디렉토리에 들어가서 다운로드

 

위 사진과 같이 OS에 따라 디렉토리가 나뉘므로, 각 서버와 클라이언트에 맞는 디렉토리로 들어가면 된다.

Lustre Client Packages (Ubuntu)

클라이언트는 다음과 같은 패키지들을 다운받을 수 있으며,

연구실에서는

lustre-client-modules, lustre-client-utils, lustre-iokit

의 세가지 패키지를 받아서 진행한다.

 

각 패키지의 역할은 다음과 같다.

Name Description
lustre-client-modules Lustre의 리눅스 커널 모듈
lustre-client-utils Lustre의 Client Userspace 유틸리티
lustre-iokit Lustre File System 벤치마크 툴 모음

 

클라이언트 패키지 종속성은 다음과 같다. 패키지를 설치하기 전에 의존성을 해결해두고, 그 이후에 설치하는 것을 권장한다.

Ubuntu Client Packages Dependencies

 

 

Lustre Server Packages (RHEL 7.8)

서버의 경우 클라이언트보다 더 많은 패키지가 있으며, 필수 패키지를 제외하고는 필요에 따라 설치하면 된다.

또한 서버에서는 e2fsprogs 소프트웨어를 필수적으로 설치해줘야 하기 때문에, 다운로드 페이지에서 OS 버전에 맞는 패키지를 다운로드한다.

설치하는 서버 패키지의 목록과 각 패키지의 역할은 다음과 같다.

Name Description
e2fsprogs ext2/ext3/ext4 파일 시스템의 관리를 위한 패키지
e2fsprogs-libs e2fsprogs의 라이브러리
e2fsprogs-static e2fsprogs의 static 라이브러리
kernel-3.10.0-1127.8.2.el7_lustre Lustre 최적화 리눅스 커널
kmod-lustre Lustre 커널 모듈
kmod-lustre-osd-ldiskfs ldiskfs의 커널 모듈 (ldiskfs 설명은 링크)
libcom_err e2fsprogs의 오류 처리를 위한 라이브러리
libnvpair1 name-value pair의 pack/unpack을 위한 라이브러리
libss CLI Parser 생성 및 컴파일, 사용을 위한 라이브러리
libuutil1 FS 관련 라이브러리의 묶음 파일
libzpool2 zpool의 라이브러리
lustre Lustre Userspace tools and files
lustre-iokit Lustre File System 벤치마크 툴 모음
lustre-osd-ldiskfs-mount LDISKFS hooks for mount/mkfs into a dynamic library.
perf-3.10.0-1127.8.2.el7_lustre 리눅스 커널 성능 모니터링 툴

 

커널 버전 조정과 패키지 설치가 끝났다면, 본격적으로 파일 시스템을 구성하도록 한다.

대학원 연구실 서버에 새로 Lustre 파일 시스템을 설치하게 되었는데, 국문으로 된 설치 가이드도 오래된 버전뿐이라 정보 공유 및 정리 차원에서 작성한다.

 

러스터 파일 시스템에 대해 잘 모르는 사람은 해당 링크를 참고하면 도움이 될 것이다.

시스존 블로그 : http://nblog.syszone.co.kr/wp-content/uploads/2014/12/Lustre.pdf

Lustre 위키 : http://wiki.lustre.org/Introduction_to_Lustre

 

Introduction to Lustre - Lustre Wiki

Overview Lustre* is an open-source, global single-namespace, POSIX-compliant, distributed parallel file system designed for scalability, high-performance, and high-availability. Lustre runs on Linux-based operating systems and employs a client-server netwo

wiki.lustre.org

 

Lustre를 구축하려는 서버는 총 3대이며, 1대의 MDS 서버와 2대의 OSS 서버로 구축한다.

MDS와 OSS 서버의 사양은 다음과 같다.

CPU : Intel Xeon Silver 4208 * 1

RAM : DDR4 32GB PC4-21300 ECC/REG (MDS : * 1, OSS : * 2)

SSD : WD Blue 500GB SATA3 2.5" * 1 

HDD : WD HC310 4TB 7200RPM/256MB 3.5" (MDS : * 1, OSS : * 4)

 

Lustre 파일 시스템을 주 사용처인 슈퍼컴퓨팅센터에서는 I/O 성능을 위해 InfiniBand를 내부 네트워크로 이용하지만,

연구실의 여건 상 InfiniBand 구성이 불가능하여 10G 네트워크 허브를 이용한 10G 이더넷 구성을 진행하기로 하였다.

 

Lustre LTS Release Support Matrix

 

러스터는 서버와 클라이언트에서 지원하는 OS가 각각 다르고, 굉장히 제한적이기 때문에

LTS Release Support Matrix 를 참고하여 서버 OS는 Red Hat 기반의 CentOS 7.8을 선택하였고,

Lustre 버전은 이에 맞춰 2.12.5로 설치한다. 

러스터 파일 시스템을 사용할 클라이언트는 Ubuntu 18.04를 사용하여 구성한다.

+ Recent posts