這篇文章顯示瞭如何通過RDMA(RoCE)配置NFS。 在本文中,它是通過CentOS7完成的,其他Linux OS發行版是相似的
基本設置
兩臺配有通過Mellanox以太網SX1036交換機連接的ConnectX-3適配器(40GbE)的服務器。
先決條件
1.CentOS 7與MLNX-OFED 2.4一起安裝在兩臺服務器上
操作系統:CentOS 7
驅動程序:MLNX_OFED 2.4
2.在連接到交換機的ConnectX-3適配器端口上配置IP地址
在主機A上進行配置,類似地,在主機B(IP地址爲19.19.19.8)上進行配置。
Host A # ifconfig ens1 19.19.19.7/24 up
3.驗證MLNX_OFED版本
Host A # ofed_info -s
MLNX_OFED_LINUX-2.4-1.0.0:
4.驗證服務器之間的IP連接
Host A # ping 19.19.19.8
PING 19.19.19.8 (19.19.19.8) 56(84) bytes of data.
64 bytes from 19.19.19.8: icmp_seq=1 ttl=64 time=0.099 ms
5.確保RDMA在服務器之間正常運行。 有關示例,請參考如何啓用,驗證和診斷RDMA故障。
6.驗證不帶RDMA的NFS是否正常工作(從服務器安裝NFS目錄,檢查基本的讀/寫操作)
配置nfs
1.創建要通過NFS掛載的目錄
Host A # mkdir /root/my_directory
2.在服務器端(主機A)上,將/etc/exports文件配置爲
/root/my_directory *(rw,async,insecure,no_root_squash)
3.在服務器上加載RDMA傳輸模塊
Host A # modprobe svcrdma
4.啓動NFS服務
HostA # service nfs start
Redirecting to /bin/systemctl start nfs.service
HostA # service nfs status
Redirecting to /bin/systemctl status nfs.service
nfs-server.service - NFS Server
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; disabled)
Active: active (exited) since Thu 2015-02-26 02:49:15 IST; 3 weeks 6 days ago
Process: 3099 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS $RPCNFSDCOUNT (code=exited, status=0/SUCCESS)
Process: 3096 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
Process: 3093 ExecStartPre=/usr/libexec/nfs-utils/scripts/nfs-server.preconfig (code=exited, status=0/SUCCESS)
Main PID: 3099 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/nfs-server.service
Mar 13 20:47:52 HostA systemd[1]: Started NFS Server.
Mar 17 01:10:21 HostA systemd[1]: Started NFS Server.
Mar 25 18:20:07 HostA systemd[1]: Started NFS Server.
Mar 25 20:34:09 HostA systemd[1]: Started NFS Server.
5.指示服務器偵聽RDMA傳輸端口。
注意,20049是默認端口(由IANA選擇),但是任何其他端口都可以工作(要與NFS客戶端中一致)
Host A # echo rdma 20049 > /proc/fs/nfsd/portlist
Host A # cat /proc/fs/nfsd/portlist
rdma 20049
udp 2049
tcp 2049
6.在客戶端(主機B)上加載RDMA傳輸模塊
HostB # modprobe xprtrdma
7.通過rdma協議將目錄(在步驟1中創建)安裝到客戶端的本地目錄
HostB # mount -o rdma,port=20049 19.19.19.7:/root/my_directory /mnt/my_directory
8.檢查安裝參數
Host B # mount | grep my_directory
19.19.19.7:/root/my_directory on /mnt/my_directory type nfs (rw,relatime,vers=3,rsize=262144,wsize=262144,namlen=255,hard,proto=rdma,port=20049,timeo=600,retrans=2,sec=sys,mountaddr=19.19.19.7,mountvers=3,mountproto=tcp,local_lock=none,addr=19.19.19.7)
9.驗證對遠程目錄的訪問
Host B # touch /mnt/my_directory/1.txt
Host A # ls /root/my_directory
1.txt
10.要檢查RDMA上NFS的吞吐量/延遲,可以使用fio(或任何類似的測試)
# fio --rw=randread --bs=64k --numjobs=4 --iodepth=8 --runtime=30 --time_based --loops=1 --ioengine=libaio --direct=1 --invalidate=1 --fsync_on_close=1 --randrepeat=1 --norandommap --exitall --name task1 --filename=/mnt/my_directory/1.txt --size=10000000
11.測試NFS並更改/etc/exports下的配置文件時,需要使用命令“ exportfs -a”導出該文件(exportfs命令維護NFS服務器的當前導出表)
# exportfs -a
12. Wireshark對NFSoRDMA的支持已添加到開發樹1.99.7中,並將作爲Wireshark 2.0的一部分發布