文件服务器fdb,NFS网络文件系统-上

本文很长,听首歌,慢慢回味。固定了长度为2万字,估计要分三篇才能写完。

开篇为原理,中为优化及开机启动,下为碰到的各种问题解决方案。

1、 NFS产生的原因

NFS为network filesystem的缩写,为网络文件系统,主要用来存储一些共享的静态数据,例如图片,上传文件等。(通过网络让不同的主机共享目录)

b1c01fb1c22a00c2089c61869daf94e1.png

在做负载均衡之后,如果用户上传文件等资源,放在本地webserver上,那么用户通过上传文件的时候,有可能分配到webserver1,那么就有可能下次访问的时候,分配到webserver2,从而无法获取到相关的文件资源,从而就有了共享存储NFS。

共享存储的主要目的是用来存储,从而每次用户在需要文件的时候,都是会进行读取共享存储NFS服务器上的文件,在上传文件的时候,也是将文件保存在共享存储NFS文件系统中。

2、 NFS的基本原理

NFS主要划分为客户端和服务器端,客户端只要挂载网络文件系统即可使用NFS服务,服务器端提供NFS服务即可,具体步骤如下:

① 服务端开启RPC服务

② 服务端开启NFS服务(向RPC注册相关的端口信息)

③ 客户端请求RPC服务

④ 服务端的RPC返回相关的端口信息

⑤ 客户端通过端口连接NFS传输数据

RPC服务:remote procedure call,远程调用服务,记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而可以确保客户端连接到正确的NFS端口上去,达到数据传输交换的目的。

NFS启动之后,端口是随机的,从而需要在RPC服务中进行注册相关的端口信息。

具体的过程如下所示:

025e7707df3f0bf1b509b2ad1ffb3b25.png

3、 NFS服务的安装

3.1 NFS服务端的安装

在NFS服务端中,需要安装两个服务,一个是nfs-utils,提供nfs服务;一个是rpcbind,提供rpc服务,安装步骤如下所示(在启动服务的时候,先启动rpcbind服务,然后启动nfs服务):

[root@nfsserver~]# yum -y install rpcbind(安装rpcbind)

[root@nfsserver~]# yum -y install nfs-utils(安装nfs)

[root@nfsserver~]# rpm -qa nfs-utils rpcbind(检查是否安装成功)

rpcbind-0.2.0-8.el6.x86_64

nfs-utils-1.2.3-15.el6.x86_64

[root@nfsserver~]# chkconfig rpcbind on(将rpc服务加入到开机自启动中)

[root@nfsserver~]# chkconfig nfs on(将nfs服务加入到开机自启动中)

[root@nfsserver~]# chkconfig --list |grep nfs(检查服务是否添加成功)

nfs               0:off       1:off       2:on 3:on 4:on 5:on 6:off

nfslock            0:off       1:off       2:off       3:on 4:on 5:on 6:off

[root@nfsserver~]# /etc/init.d/rpcbind start(启动rpc服务)

Startingrpcbind: [  OK  ]

[root@nfsserver~]# rpcinfo -p(查看rpc服务启用的端口,发现端口为111)

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@nfsserver~]# /etc/init.d/nfs start(启动nfs服务)

Starting NFSservices:  [  OK  ]

Starting NFSquotas: [  OK  ]

Starting NFSdaemon: [  OK  ]

Starting NFSmountd: [  OK  ]

Starting RPCidmapd: [  OK  ]

[root@nfsserver~]# rpcinfo -p(查看NFS注册的端口信息,固定端口为875,2049,其他随机,在每次重启之后端口各不相同)

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

100011   1   udp    875 rquotad

100011   2   udp    875  rquotad

100011   1   tcp    875 rquotad

100011   2   tcp    875 rquotad

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  47100 nlockmgr

100021   3   udp  47100 nlockmgr

100021   4   udp  47100 nlockmgr

100021   1   tcp  58321 nlockmgr

100021   3   tcp  58321 nlockmgr

100021   4   tcp  58321 nlockmgr

100005   1   udp  47603 mountd

100005   1   tcp  46946 mountd

100005   2   udp  36259 mountd

100005   2   tcp  53345 mountd

100005   3   udp  44882 mountd

100005   3   tcp  36446 mountd

[root@nfsserver~]# ls -l /etc/exports(查看NFS的配置文件,默认为空)

-rw-r--r-- 1root root 0 Aug 20 02:50 /etc/exports

[root@nfsserver~]# echo "/kel

192.168.1.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534">>/etc/exports(配置配置文件)

[root@nfsserver~]# tail -2 /etc/exports(检查配置文件)

#this is forshare download file by kel

/kel192.168.1.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534

[root@nfsserver~]# showmount -e localhost(检查配置文件,显示共享的目录)

Export list forlocalhost:

/kel192.168.1.0/24

正常启动nfs的时候,在/var/log/messages中显示信息如下:

Aug 23 01:48:00KEL kernel: NFSD: Using /var/lib/nfs/v4recovery as the NFSv4 state recoverydirectory

Aug 23 01:48:00KEL kernel: NFSD: starting 90-second grace period

Aug 23 01:48:00KEL rpc.mountd[8819]: Version 1.2.3 starting

启动rpcbind的时候,没有日志显示。

3.2 NFS客户端的安装

在NFS客户端中只需要安装rpcbind即可,提供RPC服务,但是最好也安装上nfs-utils,因为这个提供了showmount命令,如下所示:

[root@nfsclient~]#which showmount(查询showmount命令路径)

/usr/sbin/showmount

[root@nfsclient~]#rpm -qf /usr/sbin/showmount(查询命令提供的包名称)

nfs-utils-1.2.3-15.el6.x86_64

[root@nfsclient~]#which rpcinfo(查询rpcinfo命令路径)

/usr/sbin/rpcinfo

[root@nfsclient~]#rpm -qf  /usr/sbin/rpcinfo(查询命令提供的包名称)

rpcbind-0.2.0-8.el6.x86_64

从而在客户端检查的时候,会使用shoumount命令,从而在客户端的安装和服务端相同,但是在客户端只启动rpcbind服务,并且开机自启动中也只添加rpcbind服务。

[root@nfsclient~]#yum -y install rpcbind(安装rpcbind)

[root@nfsclient~]#yum -y install nfs-utils(安装nfs)

[root@nfsclient~]#rpm -qa nfs-utils rpcbind(检查是否安装成功)

rpcbind-0.2.0-8.el6.x86_64

nfs-utils-1.2.3-15.el6.x86_64

[root@nfsclient~]#chkconfig rpcbind on(将rpc服务加入到开机自启动中)

[root@nfsclient~]#chkconfig --list |grep rpcbind(检查服务是否添加成功)

rpcbind           0:off       1:off       2:off       3:on 4:on 5:on 6:off

[root@nfsclient~]#/etc/init.d/rpcbind start(启动rpc服务)

Startingrpcbind: [  OK  ]

[root@nfsclient~]# rpcinfo -p(查看rpc注册端口信息,可以看到rpc的端口为111)

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@nfsclient~]# showmount -e 192.168.1.70(查看服务器端共享的目录)

Export list for192.168.1.70:

/kel192.168.1.0/24

[root@nfsclient~]# mount -t nfs 192.168.1.70:/kel /opt(挂载NFS文件系统)

[root@nfsclient~]# df -Ph(查看挂载之后的情况)

Filesystem            Size  Used Avail Use% Mounted on

/dev/mapper/VolGroup-lv_root  6.5G 4.1G  2.1G  67% /

tmpfs                  67M    0   67M   0% /dev/shm

/dev/sda1             485M   31M 429M   7% /boot

192.168.1.70:/kel    9.9G  4.9G  4.5G 53% /opt

[root@nfsclient~]# cd /opt(进行测试读写)

[root@nfsclientopt]# ls -l

total 0

-rw-r--r--. 1nfsnobody nfsnobody 0 Aug 19 07:45 123

-rwxrwxr-x. 1nfsnobody nfsnobody 0 Aug 19 02:59 serverfile

-rw-r--r--. 1nfsnobody nfsnobody 0 Aug 19 04:10 some

[root@nfsclientopt]# touch 456

[root@nfsclientopt]# rm -f 123

[root@nfsclientopt]# ls -l

total 0

-rw-r--r--. 1nfsnobody nfsnobody 0 Aug 20 04:11 456

-rwxrwxr-x. 1nfsnobody nfsnobody 0 Aug 19 02:59 serverfile

-rw-r--r--. 1nfsnobody nfsnobody 0 Aug 19 04:10 some

(当不能写入文件的时候,注意共享目录的NFS服务器的父目录权限。)

3.3 部署NFS的时候的注意事项

在部署NFS的时候,需要注意如下信息:

① 在NFS服务端的时候,必须先启动rpcbind服务,然后启动NFS服务,如果是先启动NFS服务,那么会出现如下错误:

[root@nfsserver~]# /etc/init.d/nfs start(先启动nfs服务,会出现无法进行注册,无法连接RPC服务的111端口)

Starting NFSservices:                                    [  OK  ]

Starting NFSquotas: Cannot register service: RPC: Unable toreceive; errno = Connection refused

rpc.rquotad: unable to register(RQUOTAPROG, RQUOTAVERS, udp).

[FAILED]

Starting NFSdaemon: rpc.nfsd: writing fd to kernel failed:errno111 (Connection refused)

rpc.nfsd:writing fd to kernel failed: errno 111 (Connection refused)

rpc.nfsd: unableto set any sockets for nfsd

[FAILED]

[root@nfsserver~]# rpcinfo -p(使用rpcinfo查看rpc信息的时候,报错无法连接rpc服务)

rpcinfo: can't contact portmapper: RPC: Remote system error-No such file or directory

② 防火墙会阻挡连接,出现错误no route to host,那么表示到NFS服务器无法连接,出现如下的错误:

[root@nfsclient~]# telnet 192.168.1.70 111(测试连接NFS服务器的111端口)

Trying192.168.1.70...

telnet: connectto address 192.168.1.70: No route to host(表示无法连接111端口)

[root@nfsclient~]# showmount -e 192.168.1.70(查看NFS服务器共享的目录)

clnt_create:RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

在出现no route to host的时候,注意检查防火墙。/etc/init.d/iptables status

③ 当NFS服务端的rpcbind服务没有开启的时候,出现的错误也是no route to host,那么表示客户端的rpc服务无法连接到NFS服务端的rpc,从而需要检查NFS服务端的服务是否开启:

[root@nfsclient~]# telnet 192.168.1.70 111(测试连接NFS服务器的111端口)

Trying192.168.1.70...

telnet: connectto address 192.168.1.70: No route to host(表示无法连接111端口)

[root@nfsclient~]# showmount -e 192.168.1.70(查看NFS服务器共享的目录)

clnt_create:RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

[root@nfsserver~]# /etc/init.d/rpcbind status(检查NFS服务端的rpcbind服务)

rpcbindis stopped

[root@nfsserver~]# /etc/init.d/nfs status(检查NFS服务端的nfs服务)

rpc.svcgssd isstopped

rpc.mountd isstopped

nfsdis stopped

rpc.rquotad isstopped

将rpcbind服务先开启,然后开启nfs服务即可。

④ 当NFS服务端出现程序未进行注册的时候,那么表示启动顺序有误,错误内容如下:

[root@nfsserver~]# /etc/init.d/rpcbind start(后启动rpcbind服务)

Startingrpcbind:                                         [  OK  ]

[root@nfsserver~]# showmount -e(查看共享目录信息,出现程序未注册)

clnt_create:RPC: Program not registered

那么这个时候必须重启nfs服务,加载配置文件是不可以的。

[root@nfsserver~]# /etc/init.d/nfs restart(重启NFS服务)

⑤ 可以ping NFS服务端地址,检查网络情况

[root@nfsclient~]# ping 192.168.1.70(ping NFS服务端地址)

PING 192.168.1.70(192.168.1.70) 56(84) bytes of data.

64 bytes from192.168.1.70: icmp_seq=1 ttl=64 time=1.18 ms

64 bytes from192.168.1.70: icmp_seq=2 ttl=64 time=0.431 ms

如果能ping通,那么表示网络能够连接

⑥ 可以在NFS服务端自己进行挂载,查看NFS服务端是否存在问题

[root@nfsserver~]# mount 192.168.1.70:/kel /opt(在服务端自己进行挂载)

[root@nfsserver~]# df -h

Filesystem            Size  Used Avail Use% Mounted on

/dev/sda3             9.9G  4.9G 4.5G  53% /

tmpfs                  55M     0  55M   0% /dev/shm

/dev/sda1             485M   32M 428M   7% /boot

/dev/sda6             2.1G   36M 2.0G   2% /mnt

192.168.1.70:/kel     9.9G 4.9G  4.5G  53% /opt

如果能挂载,那么表示服务端没有问题。

⑦ 当查看df的时候,hang住,那么表示NFS链接出现问题,查看/proc/mounts查看挂载的目录,然后卸载即可,如下:

[root@nfsclient~]# tail -1 /proc/mounts(查看挂载的信息)

192.168.1.70:/kel//opt nfs4

rw,relatime,vers=4,rsize=16384,wsize=16384,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.63,minorversion=0,local_lock=none,addr=192.168.1.700 0

[root@nfsclient~]# umount /opt(普通卸载)

[root@nfsclient~]# cd /opt

[root@nfsclientopt]# umount -lf /opt(强制卸载)

4、 NFS相关文件

4.1 NFS服务端配置文件/etc/exports

NFS服务端主要的配置文件就是/etc/exports,默认为空,如下所示:

[root@nfsserver~]# ls -l /etc/exports(配置文件路径)

-rw-r--r-- 1root root 108 Aug 20 04:03 /etc/exports

[root@nfsserver~]# cat /etc/exports(配置文件内容)

#this is forshare download file by kel(注释)

/kel192.168.1.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)(共享目录)

主要格式如下所示:共享目录网段或主机及相关参数

在进行配置配置文件的时候,也可以使用命令exportfs,但是命令配置的,在重启之后会失效。

exportfs -rv相当于/etc/init.d/nfs reload

也可以使用下面的方式来写:

[root@nfsserver~]# cat /etc/exports(对同一个目录设置不同权限,也可以不同的主机名)

#this is forshare download file by kel

/kel192.168.1.64(rw,async) *(ro)

[root@nfsserver~]# showmount -e

Export list fornfsserver:

/kel (everyone)

4.2 NFS服务端完整参数的配置文件

查看所有配置文件的路径如下所示:

[root@nfsserver~]# ls -l /var/lib/nfs/etab

-rw-r--r-- 1root root 144 Aug 20 06:52 /var/lib/nfs/etab

[root@nfsserver~]# cat /var/lib/nfs/etab

/kel 192.168.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534

常用参数如下所示:参数含义

rw可读写

ro只读

sync同步写入磁盘(数据安全性高,但是会影响写入性能)

async异步写入磁盘(写入性能高,但是会影响安全性)

all_squash将所有用户压缩为anonuid和anongid用户

anonuid匿名用户的uid(默认用户为nsnobody,65534)

anongid匿名用户的gid(默认用户组为nsnobody,65534)

root_squash用root身份的时候还是为root用户

在进行设置匿名用户的时候,必须检查客户端和服务器的用户的id号和组号,必须完全一致,否则会出现无法显示用户名的情况。

默认参数如下所示:

/kel 192.168.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)

[root@nfsserver~]# tail -1 /etc/passwd(检查服务器端匿名用户)

nfsnobody:x:65534:65534:AnonymousNFS User:/var/lib/nfs:/sbin/nologin

[root@nfsclient~]# tail -1 /etc/passwd(检查客户端匿名用户)

nfsnobody:x:65534:65534:AnonymousNFS User:/var/lib/nfs:/sbin/nologin

4.3 NFS客户端挂载参数

查看客户端挂载参数,主要查看文件为/proc/mounts,内容如下所示:

192.168.1.70:/kel//opt nfs4rw,relatime,vers=4,rsize=16384,wsize=16384,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.63,minorversion=0,local_lock=none,addr=192.168.1.700 0

常用参数解释如下:参数含义

nosuid可以设置suid但是不能不能执行(影响安全)

noexec不能直接执行脚本(影响安全)

rsize一次写入数据大小,bytes(性能)131072

wsize一次读出数据大小,bytes(性能)131072

noatime不更新文件access  time(性能)

nodiratime不更新目录access  time(性能)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值