标签:nfs rpcbind mount rsize wsize
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。注意,如果企业的业务量比较小的时候,单台机器(不使用nfs)的性能是优于集群性能的,但是当业务量大的时候,单台机器支撑不住的时候,集群的优势就体现出来了。
NFS是一种简单方便的,在linux和unix系统中进行共享的网络文件系统,它在linux和unix系统中挂载就像用本地硬盘挂载一样,可以实现,多个用户共同读取,而且把各个用户读写的文件权限都压缩成一个普通用户权限,这样各个主机一起读取写入就不会造成权限问题,非常适合中小型互联网企业应用,而且在读写速度上,如果带宽足够的话,不会有延迟的现象。
在企业集群架构的工作场景中,NFS网络文件系统一般用来存储共享视频、图片、附件等静态资源文件,一般是网站用户上传的文件都放在NFS共享里,例如播客产品的图片、附件、头像、注意网站程序不要放在NFS共享里,然后前端所有的节点访问这些静态资源时都会读取NFS存储上的资源,所以NFS是当前中小型互联网架构中最常用的数据存储服务之一,大的公司可能会使用比较复杂的分布式文件系统Moosefs,glusterfs,FastDFS等。
如下图:
1 .服务端RPC服务起来,NFS服务再起来
2 待NFS服务起来后将所用的端口后向RPC上注册
3 NFS服务端将端口注册成功后等待连接进来
4 客户端不用起NFS服务,只需要起RPC服务,客户端的RPC服务向服务端的RPC daemon请求访问端口
5 服务端RPC daemon 向客户端RPC反馈NFS端口号
6 NFS客户端携带端口号向NFS服务端请求数据连接
4.1 NFS 的配置文件为:/etc/exports
配置文件格式为:NFS 共享目录 NFS客户端地址1(参数1,参数2... )NFS客户端地址2(参数1,参数2... )
[root@server www]# cat /etc/exports
/data 192.168.50.0/24(rw,sync,all_squash)
4.2 NFS和RPC安装,注意先启动rpcbind,再启动nfs服务
[root@server www]# mkdir /data
[root@server www]# chown 65536:65536 /data
[root@server mnt]# ls -ld /data
drwxr-xr-x. 2 nfsnobody nfsnobody 98304 May 18 17:28 /data
[root@server www]# yum install nfs-utils rpcbind -y
Loaded plugins: fastestmirror
Setting up Install Process
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
[root@server www]# /etc/init.d/rpcbind restart
Stopping rpcbind: [ OK ]
Starting rpcbind: [ OK ]
[root@server www]#
[root@server www]# /etc/init.d/nfs restart
Shutting down NFS daemon: [ OK ]
Shutting down NFS mountd: [ OK ]
Shutting down NFS services: [ OK ]
Shutting down RPC idmapd: [ OK ]
Starting NFS services: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
4.3 nfs服务端确定nfs端口已向rpcbind注册,并在服务端尝试挂载
[root@server www]# /etc/init.d/prcbind restart
-bash: /etc/init.d/prcbind: No such file or directory
[root@server www]# /etc/init.d/rpcbind restart
Stopping rpcbind: [ OK ]
Starting rpcbind: [ OK ]
[root@server www]#
[root@server www]# /etc/init.d/nfs restart
Shutting down NFS daemon: [ OK ]
Shutting down NFS mountd: [ OK ]
Shutting down NFS services: [ OK ]
Shutting down RPC idmapd: [ OK ]
Starting NFS services: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
[root@server www]#
[root@server www]# exportfs -av
exporting 192.168.50.0/24:/data
[root@server www]# showmount -e localhost
Export list for localhost:
/data 192.168.50.0/24
[root@server www]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100005 1 udp 45209 mountd
100005 1 tcp 58457 mountd
100005 2 udp 54966 mountd
100005 2 tcp 37880 mountd
100005 3 udp 40224 mountd
100005 3 tcp 49630 mountd
100003 2 tcp 2049 nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 2 tcp 2049 nfs_acl
100227 3 tcp 2049 nfs_acl
100003 2 udp 2049 nfs
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 2 udp 2049 nfs_acl
100227 3 udp 2049 nfs_acl
100021 1 udp 50773 nlockmgr
100021 3 udp 50773 nlockmgr
100021 4 udp 50773 nlockmgr
100021 1 tcp 46835 nlockmgr
100021 3 tcp 46835 nlockmgr
100021 4 tcp 46835 nlockmgr
[root@server www]# ifconfig eth0 |awk -F ‘[ :]+‘ ‘NR==2 {print $4}‘
192.168.50.1
[root@server www]# mount -t nfs 192.168.50.1:/data /mnt
[root@server www]# df -k |grep "mnt"
192.168.50.1:/data 18241408 2077888 15230240 13% /mnt
[root@server www]# cd /mnt
[root@server mnt]# touch file{1..100}
[root@server mnt]# ls |wc -l
4.4 NFS客户端安装nfs和rpcbind套件
一般来说客户端只需要安装rpcbind,但是因为nfs-utils里含有一些工具,如showmount等,因此最好在客户端也安装nfs但是不启动服务,如:
[root@lamp01 ~]# yum install nfs-utils rpcbind -y
Loaded plugins: fastestmirror
Setting up Install Process
Determining fastest mirrors
* base: mirrors.aliyun.com
[root@lamp01 ~]# /etc/init.d/rpcbind restart
Stopping rpcbind: [ OK ]
Starting rpcbind: [ OK ]
[root@lamp01 ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
[root@lamp01 ~]# /etc/init.d/rpcbind restart
Stopping rpcbind: [ OK ]
Starting rpcbind: [ OK ]
[root@lamp01 ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
[root@lamp01 ~]# showmount -e 192.168.50.1
Export list for 192.168.50.1:
/data 192.168.50.0/24
[root@lamp01 ~]# mkdir nfs
[root@lamp01 ~]# mount -t nfs 192.168.50.1:/data ~/nfs
[root@lamp01 ~]# df -hk |grep "nfs"
192.168.50.1:/data 18241408 2077920 15230208 13% /nfspool
192.168.50.1:/data 18241408 2077920 15230208 13% /root/nfs
4.5 配置完成后在客户端查看挂载参数,确认所需权限是不是对的,然后换成普通用户看可不可正常读写,服务端用root写数据,客户端用普通用户看可不可以修改删除。
[root@server mnt]# touch file
[root@server mnt]# ls -l
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 May 18 18:12 file
[root@lamp01 nfs]# ls -l
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 May 18 2018 file
[root@lamp01 nfs]# echo "hello" >>file
[root@lamp01 nfs]# cat file
hello
[root@lamp01 nfs]# cat /proc/mounts |grep "root/nfs"
192.168.50.1:/data/ /root/nfs nfs4 rw,relatime,vers=4,rsize=32768,wsize=32768,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.50.3,minorversion=0,local_lock=none,addr=192.168.50.1 0 0
[root@server mnt]# cat /var/lib/nfs/etab
/data 192.168.50.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,all_squash)
5.1 服务端要注意,一定要先启动rpcbind再启动nfs,因为nfs需要向rpcbind注册端口。
5.2 常用命令解释
showmount -e 127.0.0.1 显示可以挂载的文件系统
rpcinfo -p localhost 查看nfs注册的端口号
mount -t nfs 192.168.50.1:/data /mnt 挂载nfs文件系统
/etc/init.d/nfs reload 平滑重启服务
cat /proc/mounts |grep "root/nfs" 客户端查看挂载参数
cat /var/lib/nfs/etab 服务端查看nfs配置参数
5.3 如果nfs客户端查不到挂载项,排错思路,首先确认ping服务端是否通,然后telnet服务端ip看端口是否可以连接
5.4 服务一般我们用rc.local来管理,把rc.local 文件作为本机的重要文件,所有服务的开机自动启动项都放入/etc/rc.local内,这样规范的好处是,一旦服务器的运维人员离职或者业务迁移时都可以通过/etc/rc.local很容易查到服务器的相关服务,方便运维管理。例如:
[root@server ~]# tail -5 /etc/rc.local
/etc/init.d/rpcbind start
/etc/init.d/nfs start
sh /service/scripts/inotify.sh &
rsync --daemon
Starting SMB services:
[root@server ~]#
5.5 服务端配置文件中的yu允许客户端访问的ip可以设置为单个ip也可以整个网段,如
10.0.0.0/24
mount -t nfs -o bg,hard,intr,rsize=131072,wsize=131072 10.0.0.7:/data /mnt
mount -t nfs -o nosuid,noexec,nodev,rw 192.168.50.1:/data /mnt
mount -t nfs -o noatime,nodiratime,rw 192.168.50.1:/data /mnt
mount -t nfs -o noatime,nodiratime,nosuid,noexec,nodev,rw,hard,intr,rsize=131072,wsize=131072 192.168.50.1:/data /mnt
mount /dev/sdb1 /mnt -o defaults,async,noatime,data=writeback,barrier=0
umount -lf /mnt
[root@server ~]# cat /proc/sys/net/core/rmem_default
124928
[root@server ~]# echo "8388608" > /proc/sys/net/core/rmem_default
[root@server ~]# cat /proc/sys/net/core/rmem_default
8388608
[root@server ~]# cat /proc/sys/net/core/rmem_max
124928
[root@server ~]# echo "16777216" > /proc/sys/net/core/rmem_max
[root@server ~]# cat /proc/sys/net/core/rmem_max
16777216
3 . /proc/sys/net/core/wmem_default :指定发送套接字缓冲区大小的缺省值,缺省值为124928,对应优化是将值设置为最大8388608
[root@server ~]# cat /proc/sys/net/core/wmem_default
124928
[root@server ~]# echo "8388608" > /proc/sys/net/core/wmem_default
[root@server ~]# cat /proc/sys/net/core/wmem_default
8388608
[root@server ~]# cat /proc/sys/net/core/wmem_max
124928
[root@server ~]# echo "16777216" > /proc/sys/net/core/w
warnings wmem_default wmem_max
[root@server ~]# echo "16777216" > /proc/sys/net/core/wmem_max
[root@server ~]# cat /proc/sys/net/core/wmem_max
16777216
以上是临时修改,如果需要永久修改则必须写入配置文件,依次追加以上4条到/etc/sysctl.conf,然后执行,sysctl -p 使之生效,如:
[root@server ~]# echo "net.core.rmem_max = 16777216" >>/etc/sysctl.conf
[root@server ~]# echo "net.core.wmem_max = 16777216" >>/etc/sysctl.conf [root@server ~]# echo "net.core.wmem_default = 8388608" >>/etc/sysctl.conf [root@server ~]# echo "net.core.rmem_default = 8388608" >>/etc/sysctl.conf [root@server ~]# tail -4 /etc/sysctl.conf
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
[root@server ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
标签:nfs rpcbind mount rsize wsize
原文地址:http://blog.51cto.com/ouyangtao/2120820