---
layout: post
title:  "Lustre建置步驟"
date:   2020-12-29
categories: HPC
tags: HPC, Lustre
---
# 簡介
檔案系統對於高效能運算來說是不可或缺的一環,本次實驗為確認Lustre功能的初步環境建置。Lustre是一種平行分散式檔案系統,主要分為三大功能區塊:Metadata Server, Object Storage Server and clients。Metadata Servers (MDS)提供metadata的存儲與管理,其中存儲稱為Metadata target(MDT),管理稱為Metadata server(MDS);Object Storage Servers (OSS)管理與存放原始檔案,其中原始檔案的存放稱為Object Storage Target(OST)。另有負責管理的Management server(MGS)與相對應的Management Target(MGT)。主機間可透過ethernet或是InfiniBand(IB)互相連結溝通。一個最簡單的Lustre結構並不具有Failover的功能,另外因為MGT所占容量較低,MGS與MDS也會合併在同一台主機中,如下圖:

另外也可規劃一個OST對應多個OSS,MDT、MGT對應多個MDS、MGS等具有備援性的高可用系統,Lustre稱為Failover Configuration。如下圖:

而更為完整的系統可如下圖所示,將個部件分開並各自有互相備援功能:

本實驗將以最簡單的系統架構建置,目標就是會動就好。
# 準備
Lustre的優點為其具有很完整的[Operations Manual](https://doc.lustre.org/lustre_manual.xhtml)可供參考,同時也是缺點,太詳盡了很難快速的完全建置。相較之下BeeGFS則提供了相較之下簡單許多的[Quick Start Guide](https://doc.beegfs.io/latest/quick_start_guide/quick_start_guide.html),缺點則為缺乏詳盡的硬體需求表。依照lustre Operations Manual所列的規格,可以參考如下的舉例配置。
## 規劃範例
### 目標
Parallel File System (Lustre / BeeGFS)擇一,建議可規劃冷、熱區儲存( 至少規劃2台Metadata Severs / Storage Servers 以及提供 300TB熱區儲存 以及 500TB冷區儲存 )
### 架構圖

### 主機硬體規格表
| 角色     | 主機名  | vCPU | RAM  |
| -------- | ------- | ---- | ---- |
| MGS      | MGS-002 |      |      |
| MGS      | MGS-001 |      |      |
| MDS      | MDS-001 |      | 16GB |
| MDS      | MDS-002 |      | 16GB |
| COLD-OSS | OSS-001 |      | 64GB |
| ...      |         |      |      |
| COLD-OSS | OSS-006 |      | 64GB |
|          |         |      |      |
| HOT-OSS  | OSS-013 |      | 64GB |
| ...      |         |      |      |
| HOT-OSS  | OSS-032 |      | 64GB |
### 儲存空間硬體規格表
| 角色 | Service 1 | Service 2 | 編號      | Storage     | RAID |
| ---- | --------- | --------- | --------- | ----------- | ---- |
| MGT  | MGS-001   | MGS-002   | MGT-001   | 100MB       | 1    |
|      |           |           |           |             |      |
| MDT  | MDS-002   | MDS-001   | MDT-002   | 2*1TB SSD   | 1    |
| OST  | OSS-001   | OSS-002   | OST-00101 | 10*12TB     | 6    |
| OST  | OSS-002   | OSS-001   | OST-00201 | 10*12TB     | 6    |
| ...  |           |           |           |             |      |
| OST  | OSS-005   | OSS-006   | OST-00501 | 10*12TB     | 6    |
| OST  | OSS-006   | OSS-005   | OST-00601 | 10*12TB     | 6    |
|      |           |           |           |             |      |
| OST  | OSS-013   | OSS-014   | OST-01301 | 10*2TB  SSD | 6    |
| OST  | OSS-014   | OSS-013   | OST-01401 | 10*2TB SSD  | 6    |
| ...  |           |           |           |             |      |
| OST  | OSS-031   | OSS-032   | OST-03101 | 10*2TB SSD  | 6    |
| OST  | OSS-032   | OSS-031   | OST-03201 | 10*2TB SSD  | 6    |
#### 備註
6 cold-zone OSSs, each with one 96 TB OSTs, provide a file system with a capacity of over 500 TB. Each OST uses ten 12 TB SATA disks (8 data disks plus 2 parity disks in a RAID-6 configuration). Each OST connects with two OSS, one as primary, another as backup.
20 hot-zone OSSs, each with one 16 TB OSTs, provide a file system with a capacity of over 300 TB.
# 實際實驗
## 目標
因為實驗為單純功能驗證,因此我們將縮小規模,以另外一套配置作為實驗環境。
## 架構圖

## 主機硬體規格表
| 角色     | 主機名  | vCPU | RAM | DISK   | IP          |
| -------- | ------- | ---- | --- | ------ | ----------- |
| Client   | login01 | 1    | 2GB | 64GB   | 10.7.129.52 |
| MGS+MDS  | mds01   | 4    | 8GB | 2*20GB | 10.7.129.63 |
| COLD-OSS | oss01   | 4    | 8GB | 6*30GB | 10.7.129.64 |
| HOT-OSS  | oss02   | 4    | 8GB | 6*30GB | 10.7.129.65 |
  
## 儲存空間硬體規格表
| 角色     | Service 1 | Service 2 | 編號      | Storage    | RAID |
| -------- | --------- | --------- | --------- | ---------- | ---- |
| MGT+MDT  | mds01     |           | MGT-MDT   | 2*20GB SSD | 1    |
| COLD-OST | oss01     |           | OST-00101 | 10*30GB    | 6    |
| HOT-OST  | oss02     |           | OST-00201 | 10*30GB    | 6    |
  
  
  
## SYSTEM COFIG
  
| Common Para | Value | Description |
| ------------ | ------ | ------------------ |
| MGS Node | 10.7.129.63@tcp0 | Node for the combined MGS/MDS |
| file system | temp | name of filesystem |
| Network type | TCP/IP |Network type used for Lustre file system temp |
  
  
  
| Node | | Value | Description |
| -------- | ------------ | ---------- | ----------- |
| MGS/MDS | | | |
| | MGS/MDS | mdt0 | |
| | Block device | /dev/md0 | |
| | mount point | /mnt/mdt | |
| | | | |
| CLOD OSS | | | |
| | OSS node | oss01 | |
| | OST | ost01 | |
| | Block device | /dev/md0 | |
| | mount point | /mnt/ost01 | |
| | | | |
| HOT OSS | | | |
| | OSS node | oss02 | |
| | OST | ost02 | |
| | Block device | /dev/md0 | |
| | mount point | /mnt/ost02 | |
| | | | |
| Client | | | |
| | Client node | client1 | |
| | mount point | /lustre | |
  
## 開始建置
### 建立Key-based Autentication SHH
我們在建置的過程中要一直不斷的在個虛擬機之間來回切換,為了避免一直打密碼的麻煩,利用Key-based Autentication功能是個不錯的解決方法。
首先在本機輸入
```ssh-keygen```
然後一直按enter
這會讓本機產生public key與private key
再以以下指令將public key送到虛擬機中並依序輸入密碼
```
ssh-copy-id -i root@10.7.129.52
ssh-copy-id -i root@10.7.129.63
ssh-copy-id -i root@10.7.129.64
ssh-copy-id -i root@10.7.129.65
```
接下來ssh虛擬機就不再需要密碼囉,如:
```
ssh root@10.7.129.63
```
### 建立RAID
在oss01與oss02上透過```lsblk```指令可以查看到vd{b,c,d,e,f,g}這六個磁碟為未使用狀態,我們要將其以軟體RAID方式組在一起。
```
mdadm --create --auto=yes /dev/md0 --level=6 --raid-device=6 --spare-device=0 /dev/vd{b,c,d,e,f,g}
```
完成後等待一段時間讓sync完成,之後查詢確認RAID狀態完好
```
mdadm --detail /dev/md0
```
  
### 新增lustre repo 及e2fsprogs repo
在mds01, oss01, oss02中加入lustre以及e2fsprogs的repository以便安裝所需套件,注意這邊安裝的是lustre server repo
```vim /etc/yum.repos.d/lustre.repo```
填入
```
[lustre]
name=lustre repo
baseurl=https://downloads.whamcloud.com/public/lustre/latest-release/el7/server/
enabled=1
gpgcheck=0
  
[e2fsprogs]
name=e2fsprogs repo
baseurl=https://downloads.whamcloud.com/public/e2fsprogs/latest/el7/
enabled=1
gpgcheck=0
```
查詢packages
```yum list available | grep lustre```
或
```yum search lustre```
  
### 安裝server
```
yum install kmod-lustre.x86_64 lustre.x86_64 kmod-lustre-osd-ldiskfs.x86_64 lustre-osd-ldiskfs-mount.x86_64 lustre-osd-zfs-mount.x86_64 kmod-lustre-osd-zfs.x86_64 lustre-tests.x86_64 e2fsprogs
```
確認
```
rpm -qa|egrep "lustre|wc"|sort
```
  
  
### 新增lustre client repo
接著在login01中加入lustre client repository
```vim /etc/yum.repos.d/lustre.repo```
填入
```
[lustre]
name=lustre client repo
baseurl=https://downloads.whamcloud.com/public/lustre/latest-release/el7/client/
enabled=1
gpgcheck=0
```
接著安裝lustre client
```
yum install lustre-client lustre
```
  
### REBOOT!!!
全部虛擬機重新開機
### stop firewalld everywhere
firewalld 會阻擋虛擬機之間的通訊,可以直接關閉
```
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl status firewalld.service
```
### PING Test
在oss01與oss02上透過下列指令確認與mds01的通訊未被阻擋
```
lctl ping 10.7.129.63
```
  
### 建置 MGS/MDS on mds01
```
mkfs.lustre --fsname=temp --mgs --mdt --index=0 /dev/md0
mkdir /mnt/mdt
mount -t lustre /dev/md0 /mnt/mdt
```
  
### 建置 OSS on oss01
```
mkfs.lustre --fsname=temp --mgsnode=10.7.129.63@tcp0 --ost --index=0 /dev/md0
mkdir /mnt/ost01
mount -t lustre /dev/md0 /mnt/ost01
```
  
  
  
### 建置OSS on oss02
```
mkfs.lustre --fsname=temp --mgsnode=10.7.129.63@tcp0 --ost --index=1 /dev/md0
mkdir /mnt/ost02
mount -t lustre /dev/md0 /mnt/ost02
```
  
### client端建置 on login01
```
mkdir /lustre
mount -t lustre 10.7.129.63@tcp0:/temp /lustre
lfs df -h
lfs df -hi
```
  
#### tests on login01
確認/lustre有被mount起來
```
lfs df -h
lfs df -ih
```
讀寫測試
```
cd /lustre
dd if=/dev/zero of=/lustre/zero.dat bs=4M count=2
```
再偷看一下
```
ls -lash
```
效能測試
```
yum install lusture-iokit
ost-survey -s 10 /lustre
```
安捏就完成囉,恭喜。