ページ ツリー
メタデータの末尾にスキップ
メタデータの先頭に移動

PVEで共有ストレージを使おうとすると、Infiniband+NFSoRDMAが割と使いやすくて且つ高速なストレージの候補になります。その構築メモです。

個人的な慣れから例によってDebianでの構築となります。ProxmoxBackupServer(PBS)でも可能です。

設定手順

 

ストレージサーバーのセットアップ

DebianでのInfinibandのあれこれ をもとに、OpenSM,IPoIBが使えるようにしておきます。

root@dev:~# apt install opensm infiniband-diags
 
root@dev:~# for m in ib_umad ib_uverbs ib_ipoib ; do modprobe $m ; echo $m >> /etc/modules ; done

また、 nfs-kernel-serverも入れます。

root@dev:~# apt  install nfs-kernel-server

次に、NFSのRDMAを有効にします。その後、NFSサービスの再起動を行います。

サービス再起動後、portlistにrdma 20049というのが増えていることを確認します。

root@dev:~# vim /etc/nfs.conf
# Uncomment
vers4.2=y
rdma=y
rdma-port=20049

root@dev:~# systemctl restart nfs-kernel-server.service

root@dev:~# cat /proc/fs/nfsd/portlist
rdma 20049
rdma 20049
tcp 2049
tcp 2049

その後、生えてきたipoibインターフェースにIPを割り当てます。マルチパスを使う場合は適宜2つのサブネットを割り当てます。ibのインターフェースについてはip lなどでどの名前で生えてきたか確認します。

また、その際に違うサブネットをVLANを切らずに1つのスイッチ上に生やすことになりますが、IBサブネットでDHCPが動いていない限りは問題ありません。

下記の場合はibp101s0とibp101s0d1の2ポートが生えてきた環境の設定です。PCIEスロットの構成によりこの番号は変動します。

root@dev:~# vim /etc/network/interfaces
...
auto ibp101s0
iface ibp101s0 inet static
 address 10.1.1.101/24

auto ibp101s0d1
iface ibp101s0d1 inet static
 address 10.1.2.101/24

設定追加後、 ifreload (入っていれば)もしくは  networking.serviceを再起動します。

root@dev:~# ifreload -a
#or
root@dev:~# systemctl restart networking.service

正しくIFにIPが振られたか確認します。

root@dev:~# ip a
...
6: ibp101s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2044 qdisc fq_codel state UP group default qlen 256
    link/infiniband 80:00:00:2b:fe:80:00:00:00:00:00:00:58:49:56:0e:6a:1a:02:01 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
    inet 10.1.1.101/24 brd 10.111.1.255 scope global ibp101s0
       valid_lft forever preferred_lft forever
    inet6 fe80::5a49:560e:6a1a:201/64 scope link
       valid_lft forever preferred_lft forever
7: ibp101s0d1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 2044 qdisc fq_codel state UP group default qlen 256
    link/infiniband 80:00:00:2d:fe:80:00:00:00:00:00:00:58:49:56:0e:6a:1a:02:09 brd 00:ff:ff:ff:ff:12:40:1b:ff:ff:00:00:00:00:00:00:ff:ff:ff:ff
    inet 10.1.2.101/24 brd 10.111.2.255 scope global ibp101s0d1
       valid_lft forever preferred_lft forever
    inet6 fe80::5a49:560e:6a1a:209/64 scope link
       valid_lft forever preferred_lft forever

最後に、NFSのexportsを編集します。かなりガバオプションですが、このへんは環境により変更してください。

root@dev:~# vim /etc/exports
/srv/ssd/exports 10.1.0.0/16(rw,async,wdelay,insecure,no_root_squash,no_subtree_check)

root@dev:~# exportfs -arv
exporting 10.1.0.0/16:/srv/ssd/exports 

以上でNFS側の設定は完了です。PVE側の設定に移ります。

PVE側のIPoIBモジュールなどの読み込みとIP設定

PVE側で初めてIBを使う場合、必要なモジュールを読み込む必要があるので忘れないように読み込んでおきます。

root@pve15:~# for m in ib_umad ib_uverbs ib_ipoib ; do modprobe $m ; echo $m >> /etc/modules ; done

IPoIBモジュールを読み込むとPVEのGUIに新しいIFが生えてくるので、そのIFにNFSサーバと同じサブネットのIPを追加し、Applyを押しておきます。

直接 /etc/network/interfaces に追加してもよいです。

PVEでNFSoRDMAをマウントする

まずはテストでNFSがマウントできるか直接ターミナルで検証します。マルチパスを使う場合はオプションに max_connect=2を指定する必要があります。4ポートマルチパスもmax_connect=4で可能だとは思いますが検証してません。

root@pve15:~# mkdir /t
root@pve15:~# mount -v -t nfs -o vers=4.2,max_connect=2,proto=rdma,soft 10.1.1.101:/srv/ssd/exports /t
#マルチパスをテストする場合
root@pve15:~# mkdir /t2
root@pve15:~# mount -v-t nfs -o vers=4.2,max_connect=2,proto=rdma,soft 10.1.2.101:/srv/ssd/exports /t2

#rdmaが有効になっているか確認
#マルチパスが有効になっている場合、2回目の/t2が10.1.2.101ではなく10.1.1.101になる
root@pve15:~# mount|grep rdma
10.1.1.101:/srv/ssd/exports on /t type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,soft,proto=rdma,max_connect=2,port=20049,timeo=600,retrans=2,sec=sys,clientaddr=10.1.1.3,local_lock=none,addr=10.1.1.101)
10.1.1.101:/srv/ssd/exports on /t2 type nfs4 (rw,relatime,vers=4.2,rsize=1048576,wsize=1048576,namlen=255,soft,proto=rdma,max_connect=2,port=20049,timeo=600,retrans=2,sec=sys,clientaddr=10.1.1.3,local_lock=none,addr=10.1.1.101)

fioなどを実行し、RDMAが効いているか確認します。問題がなさそうdれあればテストのマウントを解除します

root@pve15:~# apt install fio
root@pve15:~# mkdir /t/fio
root@pve15:~# cd /t/fio
root@pve15:/t/fio# fio --name=fiotest --ioengine=io_uring --iodepth=8 --time_based --runtime=20 --rw=randwrite --bs=8k --size=1G --numjobs=8 --group_reporting
#マルチパスが有効な場合、このときにNFSサーバ側でもPVE側でもいいので新しいターミナルを開きatopなどで2つのパスが使われていることを確認する
#問題がなければゴミ掃除
root@pve15:/t/fio# rm fiotest*
root@pve15:/t/fio# cd 
root@pve15:~# umount /t
root@pve15:~#  umount /t2


storage.cfgの編集

PVEのGUIからストレージの追加を行ってもよいのですが、GUIからNFSを追加しても結局optionsが指定できないため直に編集してしまいます。名前などは適宜変えてください。

一つのホストでstorage.cfgを変更するとその変更が全ホストに伝搬します。

今回はマルチパスを有効にしていますが、2つ目のセッションはマウントできていれば何でもいいのでVMやCTを作るときの選択の邪魔にならないようにcontentをsnippetsだけ有効にしています。(検証してませんがなくても良いかも?)


また、NFSサーバのメンテナンスなどでサーバを落とすときにhardマウントだとマウント側のカーネルが刺さるためsoftにしていますが、環境によって変えてください。

(PVEのストレージのEnableのチェックを外すだけだと既存のNFSのマウントがアンマウントされないように見えます)

root@pve15:~# vim /etc/pve/storage.cfg
...
nfs: nfs-rdma-1
        export /srv/ssd/exports 
        path /mnt/pve/nfs-rdma-1
        server 10.1.1.101
        content iso,images,snippets,vztmpl,backup,rootdir
        options max_connect=2,proto=rdma,soft,vers=4.2
        preallocation off
        prune-backups keep-all=1

nfs: nfs-rdma-2
        export /srv/ssd/exports 
        path /mnt/pve/nfs-rdma-2
        server 10.1.2.101
        content snippets
        options max_connect=2,proto=rdma,soft,vers=4.2
        preallocation off
        prune-backups keep-all=1

保存後、PVEのGUIに追加したストレージが増えていることを確認してください。しばらくするとクラスターの全ホストでマウントされます。


VMなどを作成して動きを確認する

マウントされたことを確認したら、VMやCTなどを作成して動作を確認します。

この際に、VMのストレージコントローラーにVirtIO SCSI singleを選択し、ディスクにscisiを選択する必要があります。virtioなどだと思った速度が出ませんでした。

マルチパスが有効な場合、atopなどを開き、2つのIFBインターフェースが使われていることを確認します。

今回はストレージとPVE側でPCIE 30. x16でリンクしたConnect-IBを利用していますが、PCIE x8でリンクしている場合はQDRだと両ポート合計で50Gbps程度になります。FDRだともう少し早いです。

こちらもFDRで全機リンクさせたい気持ちはあるのですが、FDR対応のケーブルを今更何本も買うのは…という気持ちがありQDR止まりです。

まあ、QDRでもその下のストレージさえ速ければ十分な速度が出るので、出物があれば検討しようかな、という感じです。



ひとまず、3ヶ月40TB程度の通信をNFSoRDMAで行いましたが、大きな問題には直面していません。

PVEでIBがまともに使えるというのがわかれば自宅IB人口が増えるのだろうか…?

0 コメント

ログインしていません。加える変更にはすべて匿名と記されます。 すでにアカウントを持っている場合、ログインできます。