首页 > 代码库 > NFS文件系统
NFS文件系统
NFS文件系统
- NFS文件系统
- 1. 文件系统概述
- 1.1 文件系统介绍
- 1.2 文件系统选型
- 1.2.1 SAS/SATA硬盘文件系统选型:
- 1.2.2 常规应用:
- 1.2. NFS的介绍
- 1.21 NFS 是 Network File System 的缩写。
- 1.22 NFS应用场景:
- 2. NFS服务
- 2.1 NFS在传输数据时使用的端口的选择
- 2.2 NFS挂载原理:
- 3. 实例
- 3.1 安装软件包
- 3.2 启动服务
- 3.2.1 启动rpc服务
- 3.2.2 启动NFS服务
- 3.2.3 把nfs和rpc服务设置为开机启动
- 3.2.4 修改配置文件exports
- 3.2.5 在服务端确认已经共享了
- a 在客户端开启rpc服务
- b 在客户端上确认是否能看到共享目录:
- b1. rpc服务没开启。
- b2. 网络不通
- b3. 防火墙阻止
- b4. 再从客户端确认是否可以认到共享目录了:
- c. 在客户端挂载共享目录
- d. 在客户端上确认下是否读写不正常
- d1. 权限阻止
- d2. 查看属主和属组
- d3. 把挂载出去的目录权限设置为nfs的
- 1. 文件系统概述
NFS文件系统
1. 文件系统概述
1.1 文件系统介绍
文件系统是对一个存储设备上的数据和元数据进行组织的一种机制,文件系统是在一个磁盘或者分区组织文件的方式和方法,目的是易于查询和存取数据,文件系统是基于存储设备,也可以说是基于虚拟数据或网络存储的方法,比如NFS,MFS,GFS。
linux下的常见文件系统,ext2,ext3,ext4,zfs,xfs,reiserfs
windows常见文件系统,NTFS,FAT32
分区必须格式化创建文件系统才能存放数据,不同分区只能有一种文件系统
1.2 文件系统选型
1.2.1 SAS/SATA硬盘文件系统选型:
a. reiserfs 大量小文件业务首选的文件系统
b. xfs 数据库Mysql业务,门户案例
c . ext4 视频下载,流媒体,数据库,小文件业务
d . ext2 蓝汛的cache业务,CDN网站加速服务(没有日志功能,但是快 )
1.2.2 常规应用:
对于centos5.x系列常规应用选择ext3文件系统
对于centos6.x系列常规应用选择ext4文件系统
1.2. NFS的介绍
1.21 NFS 是 Network File System 的缩写。
主要功能是通过网络让不同的主机系统之间可以彼此共享文件或目录。
NFS客户端可以通过挂载的方式将NFS服务器端共享的数据文件目录挂载到NFS客户端
本地系统中。从NFS客户端的机器上看就像自己机器上的磁盘分区一样,实际上却是远
端的服务器目录。NFS网络系统的使用很像windows系统的网络共享,网络驱动器映射,
和linux的samba类似。
1.22 NFS应用场景:
在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频,图片,附件,注意程序不要放在NFS里
NFS是当前互联网系统架构中最常见的数据存储服务之一,特别是中小型网站公司使用频率很高。
大公司和门户网站除了使用NFS还会使用MFS,GFS,FASTFS,TFS等分布式系统。
a. 如图:数据进来先到负载均衡器,负载均衡器先做处理,负载均很器根据自己的算法把数据导给A主机做数据处理,
b. 如果没有后面的共享存储设备,那么如果有请求进来,负载均很器把该请求分给B主机做处理,该请求需要涉及到上一个
c. 已经被A主机处理的数据,那么B主机显然不存在这一数据,于是只能反馈没结果,或者从A主机发过来给B主机,这样做的话很费力.
d. 但是如果有后面的共享存储设备的话就不会出现这种情况了,A主机处理完数据后把结果 保存到后面的共享存储设备里, B主机处理完了也一样,当B主机需要找从A主机处理的数据时只需要在后面的共享存储设备里找,就像自己存在里面的数据一样。
2. NFS服务
2.1 NFS在传输数据时使用的端口的选择
其实NFS支持功能很多,不同功能使用不同的程序来启动,每个功能都会启用一些端口,所以NFS功能所对应的端口无法固定,NFS是通过RPC(远程过程调用)协议/服务来实现的,这个服务应用在门户级别的网站很多,RPC服务最主要的功能就是记录每个 NFS功能所对应的端口号,并且在NFS客户端请求时候将该端口和功能对应的信息传递请求 给数据的NFS客户端,从而可以确保客户端可以连接到正确的NFS端口上去,达到实现数据传输交互数据的目的,类似NFS服务端和客户端的中介一样。
2.2 NFS挂载原理:
NFS 挂载方法:mount -t 192.168.115.1:/video /mnt
2.2.1. 先启动RPC服务(C5:portmap,c6:rpcbind)
2.2.2. 启动nfs服务
2.2.3 客户向RPC请求NFS服务
2.2.4 RPC返回端口给客户端
2.2.5 客户端拿着地址端口向NFS服务器请求传输数据
3. 实例
3.1 安装软件包
yum install nfs-utils rpcbind -y
或者yum groupinstall “NFS file server” -y
3.2 启动服务
3.2.1 启动rpc服务
[root@maiyat ~]# /etc/init.d/rpcbind start
[root@maiyat ~]# /etc/init.d/rpcbind status
rpcbind (pid 1753) is running...
[root@maiyat ~]# rpcinfo -p maiyat
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
100024 1 udp 39331 status
100024 1 tcp 37270 status
如果出现
rpcinfo: can‘t contact portmapper: RPC: Remote system error - Connection refused
则说明rpcf服务没开启需要开启
3.2.2 启动NFS服务
/etc/init.d/nfs start
若出现
[root@maiyat ~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: Cannot register service: RPC: Unable to receive; errno = Connection refused
rpc.rquotad: unable to register (RQUOTAPROG, RQUOTAVERS, udp).
[FAILED]
Starting NFS mountd: [FAILED]
Stopping RPC idmapd: [ OK ]
Starting RPC idmapd: [ OK ]
Starting NFS daemon: rpc.nfsd: writing fd to kernel failed: errno 111 (Connection refused)
rpc.nfsd: unable to set any sockets for nfsd
[FAILED]
则没有启动rpc服务
[root@maiyat ~]# /etc/init.d/rpcbind start
Starting rpcbind: [ OK ]
[root@maiyat ~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Stopping RPC idmapd: [ OK ]
Starting RPC idmapd: [ OK ]
Starting NFS daemon: [ OK ]
[root@maiyat ~]# rpcinfo -p maiyat
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
100005 1 udp 46209 mountd
100005 1 tcp 54685 mountd
100005 2 udp 37054 mountd
100005 2 tcp 47801 mountd
100005 3 udp 51111 mountd
100005 3 tcp 34610 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 34005 nlockmgr
100021 3 udp 34005 nlockmgr
100021 4 udp 34005 nlockmgr
100021 1 tcp 59015 nlockmgr
100021 3 tcp 59015 nlockmgr
100021 4 tcp 59015 nlockmgr
3.2.3 把nfs和rpc服务设置为开机启动
[root@maiyat ~]# 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@maiyat ~]# chkconfig --list |grep rpcbind
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off
3.2.4 修改配置文件exports
在服务端的/etc/exports文件中添加入下:
echo "/home/data 192.168.50.0/24(rw,sync)" >>/etc/exports
在服务端确认
[root@maiyat sbin]# cat /etc/exports
#share /data for maiyatbbs by maiyat
/home/data 192.168.50.0/24(rw,sync)
[root@maiyat sbin]#
3.2.5 在服务端确认已经共享了
[root@maiyat sbin]# showmount -e 192.168.50.5
Export list for 192.168.50.5:
/home/data 192.168.50.0/24
服务端如果出现这个,说明服务已经正常开启了,这时候需要到客户端去查看有没有看到这个共享目录,首先也是要开启rpc服务,因为如上所说流程,主机先要开启rpc,然后rpc通过TCP/IP协议去与远程主机沟通相应开启rpc的主机,这样可以注册端口,才可以在客户端来挂载
a 在客户端开启rpc服务
[root@maiyat-T sbin]# /etc/init.d/rpcbind status
[root@maiyat-T sbin]# /etc/init.d/rpcbind status
rpcbind (pid 1740) is running...
b 在客户端上确认是否能看到共享目录:
[root@maiyat-T sbin]# showmount -e 192.168.50.5
Export list for 192.168.50.5:
/home/data 192.168.50.0/24
如果可以正常看到说明正常,但是如果出现如下提示可能需要从几方面考虑下;
[root@maiyat-T sbin]# showmount -e 192.168.50.5
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
b1. rpc服务没开启。
是否客户端机器rpc服务没正常开启,因为报错显示rpc,而且是port mapper failure:
[root@maiyat-T sbin]# /etc/init.d/rpcbind status
rpcbind (pid 2383) is running...
b2. 网络不通
是否本机网络不通,是否与服务端网络不通
[root@maiyat-T sbin]# ping 192.168.50.5
PING 192.168.50.5 (192.168.50.5) 56(84) bytes of data.
64 bytes from 192.168.50.5: icmp_seq=1 ttl=64 time=1.96 ms
b3. 防火墙阻止
因为rpc服务已开启,网络也是通的,报错日志还有显示不能收到,说明可能发出去了,但是没有收到回复的,而服务端是正常的,rpc正常注册了,也能看到共享目录,是不是客户端发过来的流量被服务端阻止了,导致服务端没收到客户端的rpc请求
[root@maiyat sbin]# /etc/init.d/iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
[root@maiyat sbin]# /etc/init.d/iptables stop
iptables: Flushing firewall rules: [ OK ]
iptables: Setting chains to policy ACCEPT: filter [ OK ]
iptables: Unloading modules: [ OK ]
[root@maiyat sbin]# cat /etc/exports
b4. 再从客户端确认是否可以认到共享目录了:
[root@maiyat-T sbin]# showmount -e 192.168.50.5
Export list for 192.168.50.5:
/home/data 192.168.50.0/24
c. 在客户端挂载共享目录
[root@maiyat-T sbin]# mount -t nfs 192.168.50.5:/home/data /date
[root@maiyat-T sbin]# df -hk |grep /data
192.168.50.5:/home/data
7178624 3408512 3408256 51% /data
d. 在客户端上确认下是否读写不正常
[root@maiyat-T data]# mkdir a
mkdir: cannot create directory `a‘: Permission denied
[root@maiyat-T data]#
d1. 权限阻止
因为登录的是root用户,所以这个问题不在于客户端,而是服务端,客户端写的这个目录本身就是属于服务端的,是被nfs共享出来的,考虑到linux每个服务都有一个用户,很多用户都事没有shell,都不需要登录的,nfs肯定也有,查询下nfs的配置文件
[root@maiyat nfs]# pwd
/var/lib/nfs
[root@maiyat nfs]# ls
etab export-lock rmtab rpc_pipefs statd state v4recovery xtab
[root@maiyat nfs]# ll etab
-rw-r--r--. 1 root root 154 Jul 27 11:03 etab
[root@maiyat nfs]# cat etab
/home/data 192.168.50.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)
[root@maiyat nfs]#
可以看到,这个挂载的文件的属主和属组分别为65534,65534
d2. 查看属主和属组
我们先查看属主和属组,然后确认我们挂载的那个目录权限是不是这个。
[root@maiyat nfs]# grep "65534" /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@maiyat nfs]# grep "65534" /etc/group
nfsnobody:x:65534:
[root@maiyat nfs]# ls -ld /home/data
drwxr-xr-x. 2 root root 4096 Jul 27 01:01 /home/data
[root@maiyat nfs]#
d3. 把挂载出去的目录权限设置为nfs的
从上述中可以清晰的看到,/home/data目录不属于nfs 的,客户端又是通过nfs来控制读写的,想象一下,nfs没有读取这个目录的权限,而你又要通过nfs来读写,那肯定是权限阻止了,所以问题得到解决
[root@maiyat nfs]# chown 65534:65534 /home/data
[root@maiyat nfs]# ls -ld /home/data
drwxr-xr-x. 2 nfsnobody nfsnobody 4096 Jul 27 01:01 /home/data
从客户端确认
[root@maiyat-T data]# mkdir a
[root@maiyat-T data]# ls -l
total 4
drwxr-xr-x. 2 nfsnobody nfsnobody 4096 Jul 27 11:27 a
-rw-r--r--. 1 nfsnobody nfsnobody 0 Jul 27 11:01 aaa
[root@maiyat-T data]#
用root创建的文件属主和属组都是nfs的,可以反映出刚刚的结论,是通过nfs在服务端的共享目录里写数据,所以属主和属组都是nfs用户的
NFS文件系统