nfs调优思路

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章