欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

优化和实践:改善NFS共享存储在生产场景中的性能

最编程 2024-08-13 20:41:26
...

生产场景NFS共享存储优化:

1、硬件:sas/ssd磁盘,买多块,raid0/raid10,网卡好

2、NFS服务器端优化加all_squash,async

   /backup/NFS 192.168.0.0/24(rw,async,all_squash)用这两个选项效率高了,但是就不可靠了。

3、客户端挂载:rsize,wsize,noatime,nodiratime四个选项为性能优化选项,nosuid,noexec两个选项为安全优化选项

mount -t nfs -o noatime,nodiratime,rsize=131072,wsize=131072 192.168.0.114:/backup/NFS /mnt


mount -t nfs -o nosuid,noexec,noatime,nodiratime,rsize=131072,wsize=131072 192.168.0.114:/backup/NFS /mnt

4、内核优化:

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216


一、NFS高并发环境下的服务端重要优化(mount -o 参数)

a.async 异步同步,此参数会提高I/O性能,但会降低数据安全(除非对性能要求很高,对数据可靠性不要求的场合。一般生产环境,不推荐使用)

b.noatime 取消更新文件系统上的inode访问时间,提升I/O性能,优化I/O目的,推荐使用。

c.nodiratime 取消更新文件系统上的directory inode访问时间,高并发环境,推荐显式应用该选项,提高系统性能

d.noexec  挂载的这个文件系统,要不要执行程序(安全选项)

e.nosuid  挂载的这个文件系统上面,可不可以设置UID(安全选项)

f.rsize/wsize 读取(rsize)/写入(wsize)的区块大小(block size),这个设置值可以影响客户端与服务端传输数据的缓冲存储量。一般来说,如果在局域网内,并且客户端与服务端都具有足够的内存,这个值可以设置大一点,比如说32768(bytes),提升缓冲区块将可提升NFS文件系统的传输能力。但设置的值也不要太大,最好是实现网络能够传输的最大值为限。


查看客户端挂载的参数:

grep mnt /proc/mounts


[root@oldboy ~]#grep mnt /proc/mounts

192.168.0.114:/backup/NFS /mnt nfs4 rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.131,minorversion=0,local_lock=none,addr=192.168.0.114 0 0


二、企业生产环境文件系统只读案例(1):


解决办法

1.重启看是否可以修复(很多机器可以)

2.使用用fsck – y 来修复文件系统

3.若,在进行修复的时候有的分区会报错,重新启动系统问题依旧

查看下分区结构


[root@localhost mobile]# more /etc/fstab


[root@localhost ~]# more /proc/mounts 


[root@localhost ~]# mount

/dev/sda3 on / type ext3 (rw)

proc on /proc type proc (rw)

sysfs on /sys type sysfs (rw)

devpts on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/sda1 on /boot type ext3 (ro)

tmpfs on /dev/shm type tmpfs (rw)

none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)

sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)


查看ro挂载的分区,如果发现有ro,就重新mount

umount /dev/sda1

mount /dev/sda1 /boot

如果发现有提示“device is busy”,找到是什么进程使得他busy

fuser -m /boot 将会显示使用这个模块的pid

fuser -mk /boot 将会直接kill那个pid

然后重新mount即可。


4.直接remount,命令为

[root@localhost ~]# mount -o rw,remount /boot


==================================================

linux系统重启或无故变为只读造成网站无法正常访问的简单临时的做法:

1、mount:

用于查看哪个模块输入只读,一般显示为:


/dev/hda1 on / type ext3 (rw)

none on /proc type proc (rw)

usbdevfs on /proc/bus/usb type usbdevfs (rw)

none on /dev/pts type devpts (rw,gid=5,mode=620)

/dev/hda5 on /home type ext3 (rw)

none on /dev/shm type tmpfs (rw)

/dev/hda2 on /usr/local type ext3 (rw)

/dev/nb1 on /EarthView/RAW type ext3 (ro)(变为只读了)



2、如果发现有ro,就重新mount,或者umount以后再remount


3、umount /dev/nb1

如果发现有提示“device is busy”,找到是什么进程使得他busy


fuser -m /mnt/data 将会显示使用这个模块的pid

fuser -mk /mnt/data 将会直接kill那个pid


然后重新mount即可。


4、还有一种方法是直接remount,命令为


mount -o rw,remount /mnt/data


具体深入的做法,情况不同可以自行选择:

服务器/var/log/messages报错 :


end_request: I/O error, dev sda, sector 122194293 Buffer I/O error on device sda1, logical block 446493 lost page write due to I/O error on sda1

下面是整个处理全过程


[root@php5 ~]# fdisk -lu #第一步 :找出本地扇片所在的分区。 

Disk /dev/sda: 73.4 GB, 73407868928 bytes

255 heads, 63 sectors/track, 8924 cylinders, total 143374744 sectors

Units = sectors of 1 * 512 = 512 bytes


Device Boot Start End Blocks Id System

/dev/sda1 * 63 4096574 2048256 83 Linux

/dev/sda2 4096575 75778604 35841015 83 Linux

/dev/sda3 75778605 129034079 26627737+ 83 Linux

/dev/sda4 129034080 143364059 7164990 5 Extended

/dev/sda5 129034143 139267484 5116671 83 Linux

/dev/sda6 139267548 143364059 2048256 82 Linux swap



[root@php5 ~]# tune2fs -l /dev/sda3 |grep "Block size" #找到block大小。 

Block size: 4096


(122194293-75778605)*512/4096 =528691 利用公式算出逻辑块地址


b = (int)((L-S)*512/B)


[root@php5 ~]# debugfs

debugfs 1.35 (28-Feb-2004)

debugfs: open /deb/sda3

/deb/sda3: No such file or directory while opening filesystem

debugfs: open /dev/sda3

debugfs: icheck 582391

Block Inode number

582391 277584

debugfs: ncheck 277584

Inode Pathname

277584 /users/inn.net.cn/data/upload/download/innshow004.rar

debugfs: quit

[root@php5 ~]#dd if=/dev/zero of=/dev/sda1 bs=4096 count=1 seek=582391 #找到这个快的文件之后,需要做好备份,我们强制把它设置为0字节。 

[root@php5 ~]# sync


企业生产环境fstab修改错误导致系统无法启动故障修复案例(2):

1.进入维护模式或救援模式

2.mount -o rw,remount /

3.然后修改/etc/fstab


三、NFS客户端mount挂载优化


a.安全性挂载参数:

mount -t nfs -o nosuid,noexec,nodev,rw 10.0.0.19:/data/bbs /mnt


[root@oldboy ~]#grep mnt /proc/mounts

192.168.0.114:/backup/NFS /mnt nfs4 rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.131,minorversion=0,local_lock=none,addr=192.168.0.114 0 0

[root@oldboy ~]#df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3             7.6G  2.2G  5.1G  31% /

tmpfs                 495M     0  495M   0% /dev/shm

/dev/sda1             190M   27M  153M  15% /boot

192.168.0.114:/backup/NFS

                      7.6G  4.7G  2.6G  65% /mnt

[root@oldboy ~]#umount /mnt

[root@oldboy ~]#df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/sda3       7.6G  2.2G  5.1G  31% /

tmpfs           495M     0  495M   0% /dev/shm

/dev/sda1       190M   27M  153M  15% /boot

[root@oldboy ~]#history |grep mount

  117  mount

  645  mount /dev/sdb1 /mnt

  649  umount /mnt

  652  mount /dev/sdb2 /mnt

  680  showmount -e 192.168.0.114

  686  umount /mnt

  688  mount -t nfs 192.168.0.114:/backup/NFS /mnt

  724  echo "mount -t nfs 192.168.0.114:/backup/NFS /mnt" >>/etc/rc.local

  727  mount

  729  showmount -e 192.168.0.114

  737  mount

  739  grep mnt /proc/mounts

  741  umount /mnt

  743  history |grep mount

[root@oldboy ~]#mount -t nfs -o nosuid,noexec,nodev,rw 192.168.0.114:/backup/NFS /mnt  

[root@oldboy ~]#grep mnt /proc/mounts

192.168.0.114:/backup/NFS /mnt nfs4 rw,nosuid,nodev,noexec,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.131,minorversion=0,local_lock=none,addr=192.168.0.114 0 0


[root@oldboy ~]#ll

total 16

-rw-r--r-- 1 root root  292 May 12 22:16 a.log

drwxrwxr-x 7 1000 kl   4096 May 11 22:07 keepalived-1.2.7

-rw-r--r-- 1 root root    0 Jul 11 10:06 oldboy.log

drwxr-xr-x 3 root root 4096 Jul  5 20:58 server

drwxr-xr-x 4 root root 4096 May 11 22:07 tools

[root@oldboy ~]#cd server

[root@oldboy server]#ll

total 4

drwxr-xr-x 2 root root 4096 Jul  5 21:57 scripts

[root@oldboy server]#cd scripts

[root@oldboy scripts]#ll

total 8

-rw-r--r-- 1 root root  33 Jul  5 21:00 ping.sh

-rw-r--r-- 1 root root 160 Jul  5 21:57 tar.sh

[root@oldboy scripts]#pwd

/root/server/scripts

[root@oldboy scripts]#cp ping.sh /mnt

[root@oldboy scripts]#ll /mnt

total 8

drwxrwxrwx 5 nfsnobody nfsnobody 4096 Apr 13 00:00 data

-rw-r--r-- 1 nfsnobody nfsnobody   33 Jul 18 22:30 ping.sh

[root@oldboy scripts]#cd /mnt

[root@oldboy mnt]#./ping.sh

-bash: ./ping.sh: Permission denied

[root@oldboy mnt]#chmod +x ping.sh

[root@oldboy mnt]#ll

total 8

drwxrwxrwx 5 nfsnobody nfsnobody 4096 Apr 13 00:00 data

-rwxr-xr-x 1 nfsnobody nfsnobody   33 Jul 18 22:30 ping.sh

[root@oldboy mnt]#./ping.sh       

-bash: ./ping.sh: Permission denied

[root@oldboy mnt]#/mnt/ping.sh

-bash: /mnt/ping.sh: Permission denied


[root@oldboy ~]#chmod +x /mnt/ping.sh

[root@oldboy ~]#ll /mnt/ping.sh

-rwxr-xr-x 1 nfsnobody nfsnobody 33 Jul 18 22:30 /mnt/ping.sh

[root@oldboy ~]#sh /mnt/ping.sh      

PING www.a.shifen.com (220.181.111.188) 640(668) bytes of data.

648 bytes from 220.181.111.188: icmp_seq=1 ttl=53 time=49.4 ms

648 bytes from 220.181.111.188: icmp_seq=2 ttl=53 time=45.9 ms

648 bytes from 220.181.111.188: icmp_seq=3 ttl=53 time=46.9 ms


--- www.a.shifen.com ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 6053ms

rtt min/avg/max/mdev = 45.912/47.431/49.432/1.487 ms


[root@oldboy ~]#cp /bin/cat /opt/  

[root@oldboy ~]#/opt/cat /mnt/ping.sh

ping -c3 -s640 -i3 www.baidu.com


[root@oldboy ~]#cp /bin/rm /mnt/

[root@oldboy ~]#ll /mnt/rm    

-rwxr-xr-x 1 nfsnobody nfsnobody 48568 Jul 20 20:50 cat

drwxrwxrwx 5 nfsnobody nfsnobody  4096 Apr 13 00:00 data

-rwxr-xr-x 1 nfsnobody nfsnobody    33 Jul 18 22:30 ping.sh

-rwxr-xr-x 1 nfsnobody nfsnobody 57440 Jul 20 20:59 rm

[root@oldboy ~]#chmod u+s /mnt/rm

上一篇: 深入了解KUnit:Linux内核新一代单元测试工具(下)

下一篇: Debugfs的使用简介:在Linux驱动调试中调试驱动

推荐阅读