nfs的調優有兩個方面:
性能調優
安全性的保障
其中,性能調優方面可以分爲三個方向來進行:
磁盤層(nfs server端上磁盤讀寫的性能)
應用層(針對於nfs建立的應用程序)
網絡層(nfs依賴的傳輸網絡)
磁盤層面的調優可以通過劃分raid來進行
client端和server端的調優都需要考慮到,下面有幾個常用的調優措施:
1、通過設置nfs數據塊大小來調優
[root@toolbox ~]# cat /proc/mounts
192.168.x.x:/data /mnt nfs rw,vers=3,rsize=32768,wsize=32768,hard,proto=tcp,timeo=600,retrans=2,sec=sys,addr=192.168.x.x 0 0
其中rsize=32768,wsize=32768指的是rpc讀寫數據包的分片大小。若設置的過小,則會增大rpc傳輸數據包的數量,也就會相應地增大網絡的流量。因此設置這個參數的時候,需要考慮到機器的網絡環境。通常情況下,高帶寬的機器可以相應地將這個參數設置大一點。
2、通過設置MTU值來調優
MTU值代表了系統的最大可傳輸單元,系統的默認值是1500。通過netstat -i可以看出網卡的相關信息
[root@toolbox ~]# netstat -i
Kernel Interface table
Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0 1500 68955307 0 0 0 88410056 0 0 0 BMRU
lo 65536 17310 0 0 0 17310 0 0 0 LRU
通過修改MTU的大小可以確保數據包傳輸的次數。可以通過修改/etc/sysconfig/network-scripts/ifcfg-eth0或ifconfig eth0 mtu 9000 up來修改
注意:由於一些正在運行的進程可能不兼容新的MTU值,所以這會存在一些丟包的風險。
3、通過timeo和restrans來調優
timeo表示等待回傳數據包的時間,默認值是0.7。請注意,這裏的單位是一秒的10分之一,即如果設置爲4個單位,則nfs客戶端會等待4/10秒後再開始回傳數據包。
testrans表示客戶端重試回傳的總次數,如果超過了這個限制就會報出一個超時。
[root@toolbox ~]# mount 192.168.0.102:/data /mnt -o timeo=4,retrans=4
可通過netstat -r來查看當前的nfs rpc傳輸情況:
[root@toolbox ~]# nfsstat -r
Client rpc stats:
calls retrans authrefrsh
5 0 0
4、開啓多線程調優
nfs默認採用了8並行進程來提供服務。如果有大量連接訪問到nfs,則可以適當提高這個值。
下面將nfs並行進程提高到16個
[root@toolbox ~]# cat /etc/sysconfig/nfs
```
RPCNFSDCOUNT=16
```
5、通過rpc同步或異步來調優
當nfs收到讀寫請求後,會通過rpc協議傳輸到server端,然後在server端上通過調用vfs的接口來對磁盤進行操作。同步(sync)請求只能夠一個接一個的執行。異步(async)請求的接受和執行是分開的。異步的調用可以保證一定較短的相應時間。
注意:異步的操作在高頻數據訪問的場景下可能會產生一些數據丟失、宕機的故障發生,最好在一些對數據不敏感的業務使用異步。
[root@toolbox ~]# mount 192.168.0.101:/data /mnt -o rw,async
6、調整socket接收隊列來調優
在傳輸大文件的過程中通常會需要申請大內存,這涉及到兩個參數rmem、wmem,分別代表了接受和發送隊列的長度。通常調高此值可以在傳輸大文件場景下提高速率,但這意味着需要更多的內存,這就會帶來oom的風險。
可以通過調整/etc/sysctl.conf來調整
echo 219136 > /proc/sys/net/core/rmem_default
echo 219136 > /proc/sys/net/core/rmem_max
echo 219136 > /proc/sys/net/core/wmem_default
echo 219136 > /proc/sys/net/core/wmem_max