簡介

檔案系統對於高效能運算來說是不可或缺的一環,本次實驗為確認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可供參考,同時也是缺點,太詳盡了很難快速的完全建置。相較之下BeeGFS則提供了相較之下簡單許多的Quick Start Guide,缺點則為缺乏詳盡的硬體需求表。依照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 | 21TB SSD | 1 | | OST | OSS-001 | OSS-002 | OST-00101 | 1012TB | 6 | | OST | OSS-002 | OSS-001 | OST-00201 | 1012TB | 6 | | … | | | | | | | OST | OSS-005 | OSS-006 | OST-00501 | 1012TB | 6 | | OST | OSS-006 | OSS-005 | OST-00601 | 1012TB | 6 | | | | | | | | | OST | OSS-013 | OSS-014 | OST-01301 | 102TB SSD | 6 | | OST | OSS-014 | OSS-013 | OST-01401 | 102TB SSD | 6 | | … | | | | | | | OST | OSS-031 | OSS-032 | OST-03101 | 102TB 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功能是個不錯的解決方法。 首先在本機輸入

然後一直按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_server]

name=lustre_server_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_client] 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


### Automount 設定

開啟
FSTAB

vim /etc/fstab

輸入

10.7.129.63@tcp:/temp /lustre lustre defaults,noatime,flock,_netdev 0 0

安捏就完成囉,恭喜。

### Set Stripe
為了要實現分散式儲存的特性,我們要利用Set stripe的功能。
首先在client測試:

[root@h2-login01 lustre]# dd if=/dev/zero of=testfile bs=1M count=100 100+0 records in 100+0 records out 104857600 bytes (105 MB) copied, 0.5589 s, 188 MB/s [root@h2-login01 lustre]# lfs df UUID 1K-blocks Used Available Use% Mounted on temp-MDT0000_UUID 11591404 2444 10542852 1% /lustre[MDT:0] temp-OST0000_UUID 123387612 9436 117073820 1% /lustre[OST:0] temp-OST0001_UUID 123387612 103572 116946628 1% /lustre[OST:1]

filesystem_summary: 246775224 113008 234020448 1% /lustre


顯然檔案都存進OST01去了。

這時我們檢查看看設定:

[root@h2-login01 lustre]# lfs getstripe -d /lustre/ stripe_count: 1 stripe_size: 1048576 pattern: 0 stripe_offset: -1


stripe count為1實在母湯。更改設定

[root@h2-login01 lustre]# lfs setstripe -S 4M -c 2 /lustre/ [root@h2-login01 lustre]# lfs getstripe -d /lustre/ stripe_count: 2 stripe_size: 4194304 pattern: raid0 stripe_offset: -1

大功告成,再測試一次。

[root@h2-login01 lustre]# lfs df UUID 1K-blocks Used Available Use% Mounted on temp-MDT0000_UUID 11591404 2448 10542848 1% /lustre[MDT:0] temp-OST0000_UUID 123387612 1244 117082012 1% /lustre[OST:0] temp-OST0001_UUID 123387612 1244 117077892 1% /lustre[OST:1]

filesystem_summary: 246775224 2488 234159904 1% /lustre

[root@h2-login01 lustre]# dd if=/dev/zero of=testfile bs=1M count=1000 1000+0 records in 1000+0 records out 1048576000 bytes (1.0 GB) copied, 1.52067 s, 690 MB/s [root@h2-login01 lustre]# lfs df UUID 1K-blocks Used Available Use% Mounted on temp-MDT0000_UUID 11591404 2448 10542848 1% /lustre[MDT:0] temp-OST0000_UUID 123387612 513248 116022048 1% /lustre[OST:0] temp-OST0001_UUID 123387612 513248 116033360 1% /lustre[OST:1]

filesystem_summary: 246775224 1026496 232055408 1% /lustre ``` 成功!