一、硬件设备的选择
随着计算机技术的发展,以硬盘为首的I/O设备对计算机的整体性能影响越来越大,通讯服务器(messaging/E-mail/VOD):快速的I/O是这类应用的关键,硬盘的I/O吞吐能力是主要瓶颈;数据仓库:大型商业数据存储、编目、索引、数据分析,高速商业计算等,需要具有良好的网络和硬盘I/O吞吐能力;数据库(ERP/OLTP等)服务器,除了需要具有强大的CPU处理能力,同时需要有很好的磁盘I/O吞吐性能;
NFS网络文件系统性能的主要瓶颈是硬盘的I/O性能和网络带宽。SCSI(Small Computer System Interface,小型计算机系统接口)技术在需要高性能的网络服务器和工作站领域却得到了广泛应用,现在已经成为网络服务器的标准的接口选择。速度从SCSI-I最初的5MBps到2005年的320MBps。内部传输率的高低是评价一个硬盘整体性能的决定性因素,硬盘数据传输率分为内外部传输率。通常称外部传输率也为突发数据传输率或接口传输率,指从硬盘的缓存中向外输出数据的速度。由于硬盘的内部传输率要小于外部传输率,所以只有内部传输率才可以作为衡量硬盘性能的真正标准。SCSI硬盘技术在内部传输率要性能上有更大优势。通常在一个50个用户的NFS网络系统中使用10个基于RAID5级别10000rpm的SCSI硬盘可以达到较好的效果。
在服务器磁盘I/O性能之后,网络带宽是网络文件系统下一个瓶颈。通常应当使用单独的1000兆快速以太网连接NFS服务器和客户机发送报文信息。同时确保NFS服务器和客户机工作正常,交换机、路由器等网络设备工作正常。图-1是一个理想的NFS网络拓扑结构。
图-1 一个理想的NFS网络拓扑结构
二、软件环境优化
如果我们没有很高硬件环境,可以考虑从软件方面优化性能。
1、清理NFS服务器磁盘碎片:
不论Linux文件系统采用什么文件格式(ext3、JFS、XFS、ReiserFS )、何种类型的硬盘(IDE 、SCSI),随着时间的推移文件系统都会趋向于碎片化。ext3、JFS等高级文件系统可以减少文件系统的碎片化,但是并没有消除。在繁忙的数据库服务器中,随着时间的过去,文件碎片化将降低硬盘性能,硬盘性能从硬盘读出或写入数据时才能注意到。时间长了会发现每个磁盘上确实积累了非常多的垃圾文件,释放磁盘空间可以帮助系统更好地工作。Linux最好的整理磁盘碎片的方法是做一个完全的备份,重新格式化分区,然后从备份恢复文件。但是对于7×24小时工作关键任务服务器来说是比较困难的。Kleandisk是一个高效的磁盘清理工具,它能把磁盘上的文件分成不同的"组",比如把所有的"core"文件归成一组(Group),这样要删除所有core文件时只要删除这个组就行了。core文件是当软件运行出错时产生的文件,它对于软件开发人员比较有用,对于其他用户(比如电子邮件服务器)却没有任何意义。因此,如果没有软件开发的需要,见到core文件就可以将其删除。
2、开启硬盘DMA
现在使用的IDE硬盘基本支持DMA66/100/133(直接内存读取)但是Linux发行版本安装后一般没有打开,可以/etc/rc.d/rc.local 最後面加上一行: /sbin/hdparm -d1 ?x66 -c3 -m16 /dev/hda 这样以后每次开机,硬盘的 DMA 就会开启,不必每次手动设定。添加前后你可以使用命令:hdparm -Tt /dev/hda 来测试对比一下。
3、调整缓冲区刷新参数
Linux内核中,包含了一些对于系统运行态的可设置参数。缓冲刷新的参数可以通过调整 /proc/sys/vm/bdflush文件来完成,这个文件的格式是这样的:
# cat /proc/sys/vm/bdflush 30 64 64 256 500 3000 60 0 0 |
每一栏是一个参数,其中最重要的是前面几个参数。第一个数字是在"dirty"缓冲区达到多少的时候强制唤醒bdflush进程刷新硬盘,第二个数字是每次让bdflush进程刷新多少个dirty块。所谓dirty块是必须写到磁盘中的缓存块。接下来的参数是每次允许bd flush将多少个内存块排入空闲的缓冲块列表。 以上值为RHEL 4.0中的缺省值。可以使用两种方法修改:
(1)使用命令
# echo "100 128 128 512 5000 3000 60 0 0">/proc/sys/vm/bdflush |
并将这条命令加到/etc/rc.d/rc.local文件中去。
(2)在/etc/sysctl.conf 文件中加入如下行:
vm.bdflush = 100 128 128 512 5000 3000 60 0 0 |
以上的设置加大了缓冲区大小,降低了bdflush被启动的频度,VFS的缓冲刷新机制是Linux文件系统高效的原因之一。
4、NFS版本的选择
NFS协议从诞生到现在为止,已经有多个版本,如NFS V2(rfc1094),NFS V3(rfc1813)(最新的版本是V4(rfc3010)。最早,Sun公司曾将NFS v2设计成为只使用UDP协议,主要原因是当时机器的内存、网络速度和CPU的影响,不得不选择对机器负担较轻的方式。而到了NFS v3,Sun公司选择了TCP协议作为缺省的传输方式。
V3相对V2的主要区别:
1、文件尺寸
V2版本最大只支持32BIT的文件大小(4G),而NFS V3版本新增加了支持64BIT文件大小的技术。
2、文件传输尺寸
V3版本没有限定传输尺寸,V2版本最多只能设定为8k,可以使用-rsize and -wsize 选项来进行设定。
3、完整的信息返回
V3版本增加和完善了许多错误和成功信息的返回,对于服务器的设置和管理能带来很大好处。
4、增加了对TCP传输协议的支持
V2版本只提供了对UDP协议的支持,在一些高要求的网络环境中有很大限制,V3增加了对TCP协议的支持。UDP有着传输速度快,非连接传输的便捷特性,但是UDP在传输上没有TCP来的稳定,当网络不稳定或者黑客入侵的时候很容易使NFS的 Performance 大幅降低甚至使网络瘫痪。所以对于不同情况的网络要有针对的选择传输协议。
5、异步写入特性。
6、改进了服务器的mount性能。
在Linux上,UDP协议是缺省使用的协议。作为服务器而言,别无选择。但作为客户端,可以使用TCP协议和其它使用TCP的NFS服务器互连。在局域网中使用UDP协议较好,因为局域网有比较稳定的网络保证,使用UDP可以带来更好的性能,RHEL 4.0默认使用V2版本。但是 Linux也可以通过mount option的nfsvers=n进行选择。
5、优化输入输出
I/O程序对Linux系统性能也是相当重要的,网络硬件I/O对服务器尤其重要。现在大多数Linux服务器使用10/100 Mb以太网。如果有较重的网络负载,则可以考虑千兆以太网卡。如果没有能力购买千兆网卡的话:可以使用多块网卡虚拟成为一块网卡,具有相同的IP地址。这项技术,在Linux中,这种技术称为Bonding。Bonding在Linux2.4以上内核中已经包含了,只需要在编译的时候把网络设备选项中的Bonding driver support选中见图2。当然利用Bonding技术配置双网卡绑定的前提条件是两块网卡芯片组型号相同,并且都具备独立的BIOS芯片。
图2 Linux内核的Bonding driver support选项
??然后,重新编译核心,重新起动计算机,执行如下命令:
#ifconfig eth0 down #ifconfig bond0 ipaddress |
现在两块网卡已经象一块一样工作了。这样可以提高集群节点间的数据传输.bonding对于服务器来是个比较好的选择,在没有千兆网卡时,用两块100兆网卡作bonding,可大大提高服务器到交换机之间的带宽.但是需要在交换机上设置连接bonding网卡的两个子口映射为同一个虚拟接口。编辑/etc/modules.conf文件,加入如下内容,以使系统在启动时加载Bonding模块。
alias bond0 bonding options bond0 mode=0 |
“mode”的值表示工作模式,共有0、1、2和3四种模式,这里设定为0。Bonding工作在负载均衡(Load Balancing (round-robin))方式下,即两块网卡同时工作,这时理论上Bonding能提供两倍的带宽。Bonding运行在网卡的混杂(Promisc)模式下,而且它将两块网卡的MAC地址修改为一样的。混杂模式就是网卡不再只接收目的硬件地址是自身MAC地址的数据帧,而是可以接收网络上所有的帧。
6、关闭NFS服务器不用的服务
Linux在启动时需要启动很多系统服务,它们向本地和网络用户提供了Linux的系统功能接口,直接面向应用程序和用户。但是,开启不必要服务则会给操作系统带来安全和性能上的影响。以root身份运行:
#ntsysv |
把不需要的服务和进程前面的*去掉(用空格键),然后重新启动系统服务,这样就可以使不需要的服务和进程不再启动。不但安全,而且还能提高系统的性能,一举两得。
7、设定客户机合适的最大传输单元MTU
每个网络都存在最大传输单元MTU(maximum transfer unit),要求每个数据报必须适合MTU。如果一个数据报进入了一个MTU小于该数据报长度的网络,那么处于网络边界上的路由器会把该数据报分解为多个小的数据报。这样会影响NFS网络系统的性能。tracepath它是一个工具:它用?跟踪MTU的路?:首先使用超级用户权限登陆客户机,使用命令::
Resume: pmtu 1500 hops 1 back 1 |
其中192.168.1.4是NFS服务器IP地址,2049是NFS服务器开启的UDP协议的端口号。
可以使用命令查看:rpcinfo -p 192.168.1.4。最后tracepath命令会给出一个MTU值。
然后使用ifconfig命令查看客户机上用于连接NFS服务器的网卡接口的MTU值。如果两者相差很多,可以使用Ifconfig命令修改。
proc3 22 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 |
在第五行“th”后的 8表示8个线程。其他数字代表每秒钟线程使用的最大百分比。如果后边三个数字比较大表示可能现在挂载客户机数目比较多,需要增加线程数目。
(1)首先停止nfs服务
图3自动挂载NFS文件系统
打开如图3所示的窗口,在autofs和apmd服务选项加上*(用空格键),然后重新启动系统,这样可以自动挂载NFS文件系统。
13. 使用stand-alone模式运行NFS
NFS服务器可以以stand-alone、xinetd两种模式运行。stand-alone方式是Unix传统的C/S模式的访问模式。服务器监听(Listen)在一个特点的端口上等待客户端的联机。如果客户端产生一个连接请求,守护进程就创建(Fork)一个子服务器响应这个连接,而主服务器继续监听。以保持多个子服务器池等待下一个客户端请求。stand-alone模式工作原理见图4。
图4 stand-alone工作模式
工作在stand-alone模式下的网络服务有route、gated。另外是大家最熟悉是Web服务器:Apache和邮件服务器Sendmail、NFS。因为在NFS这种负载很大服务器上,预先创子服务器,可以通过客户的服务速度。在Linux系统中通过stand-alone工作模式启动的服务由/etc/rc.d/下面对应的运行级别当中的符号链接启动。和stand-alone工作模式相比,xinetd模式不想要每一个网络服务进程都监听其服务端口。运行单个xinetd就可以同时监听所有服务端口,这样就降低了系统开销,保护系统资源。但是对于访问量大、经常出现并发访问时,xinetd想要频繁启动对应的网络服务进程,反而会导致系统性能下降。察看系统为Linux服务提供那种模式方法在Linux命令行可以使用pstree命令可以看到两种不同方式启动的网络服务。一般来说系统一些负载高的服务:NFS、sendmail、Apache服务是单独启动的。
14、 NFS服务器设置的调优步骤:
(1)首先挂接NFS服务器和每个客户端。(2) 然后测量当前网络、服务器和每个客户端的执行效率。(3)优化读写块大小。(4) 调整服务器 。 重复第一到第三步直到达到你渴望的性能。
1、挂载/home/cao目录
首先建立这个目录,然后再利用mount指令来挂载NFS 服务器的/home/cao目录:
# mount -t nfs 192.168.1.4:/home/cao /home/nfs/cao |
下面使用df命令查看挂载的目录中已经包括:NFS 服务器的IP地址的共享目录,见图5。
图5 挂载NFS服务器的共享目录
将资料挂载进来后,只要进入/home/nfs/cao目录,就等于到了IP地址:192.168.1.4那部NFS 服务器的/home/cao目录中。
2、测试读写数据时间
NFS V2版本的文件传输尺寸设定(-rsize, -wsize)V2最多只能设定为8k,缺省情况是4k(4098字节),实际情况可能和缺省值有差别。这时需要进行实际测试得到一个最佳值。方法是:
(1)测试NFS网络文件系统的写性能
首先以超级用户身份挂载NFS服务器的/home/cao目录。然后进入本地目录使用命令:
time dd if=/dev/zero of=/home/nfs/cao/nfs.dat bs=16k count=16384 |
这个命令意思使用命令 dd 向/dev/zero不断输入一个文件,是在NFS服务器的nfs.dat文件里写16384个16KB的块,bs是值是16K也就是一个256MB的文件,通常文件大小(256MB)设定为NFS服务器内存的2倍。同时回写到客户机中同样大小、数量的块。正常的输出结果可能是:
输出了 16384+0 个块 user 0m0.200s |
输出了 66535+0 个块 user 0m0.420s |
| <p '>192.168.1.4: :/home/cao /home/nfs/cao nfs rsize=8192,wsize=8192,timeo=10,intr |
重新使用命令挂载NFS服务器的/home/cao的目录,然后重复上面的(1)、(2)、(3)步骤。比较修改读写块大小后,读写性能是否有所提高。如果没有提高的话可以直接删除/etc/fstab文件。接着寻找最佳值。用于测试的rsize和wsize必须是1024的倍数,对于NFS V2版本来说8192是RSIZE和WSIZE的最大数值。
总结:本文介绍了如何在现有条件下提高NFS文件服务器性能,网络管理员充分了解自己的计算机和网络,从而找到真正的瓶颈所在。在预算短缺的今天,理解如何优化系统性能比以往任何时候都重要。一味地硬件投资并不是能够让人们接受的办法,并且也不一定生效。
·双核服务器技术 (5840篇文章)
·网站服务器的选型 (6685篇文章)
·网吧流媒体服务器 (5367篇文章)
·刀片服务器专题 (4676篇文章)
·网吧服务器专栏 (4618篇文章)
·系统优化大全 (14520篇文章)
·网络管理实用手册 (18466篇文章)
·系统安全设置 (19302篇文章)
·网络故障手册 (11234篇文章)
·Linux下的FTP服务器配置 (3068次浏览)
·Linux入门时必学60个文件处理命令 (3067次浏览)
·清爽漂亮 Ubuntu 7.04 新手指南 (3019次浏览)
·Linux系统中如何实现远程控制 (2834次浏览)
·RedHat7.2下ADSL双网卡共享上网实战 (2829次浏览)
·linux下安装软件的办法 (2775次浏览)
·菜鸟大学堂:一步一步配置WEB服务器 (2654次浏览)
·Linux下用vsftpd构建FTP服务器 (1102次浏览)
·Windows外衣Linux心 红旗桌面版详测 (1081次浏览)
·Debian下系统时间比正常时间快8小时的问题 10-12
·开源空间:交叉编译Linux内核(2.6.22.6) 10-12
·新手学堂:类Linux中各种各样的编程语言 10-12
·用Tftp向目标板烧写Linux的系统内核过程 10-11
·RedHat Linux9.0 安装过程 10-11
·7大最有影响力的GNU/Linux发行版 10-11
·Linux系统下的C语言开发都需要学些什么 10-11
·Linux 技巧: 用cron 和at 调度作业 10-11
·各种Linux操作系统版本安装图解教程下载 10-11








