第1章 NFS介绍
1.1 什么是NFS?
NFS是Network File System的缩写,中文意思是网络文件系统,
它的主要功能是通过网络(一般是局域网)让不同的主机
NFS属于本地文件存储服务:
缺点一:windows上无法使用
如果想实现windows与linux系统结合,采用文件数据共享
a FTP(FTP服务部署)
b samba服务
缺点二:高并发场景,以及存储量比较高的场景,对数据安全性要求比较高场景
需要采用分布式存储Moosefs(mfs)、GlusterFS、FastDFS 无法再服务器中看到真实的文件信息
1.2 NFS共享网络文件系统企业应用
主要用于存储web服务器上用户上传的数据源信息,图片 附件 头像 视频 音频
1.3 NFS文件系统存在的意义
实现数据共享,数据统一一致
软件实现:本地文件系统NFS 分布式文件系统mfs
硬件实现:IBM (服务器 小型机 大型机 存储 DS V7000 V5000) oracle EMC =去IOE
互联网领域发展过程想详细了解(浪潮之巅)---AT&XX(贝尔实验室)
冯诺伊曼
1.4 NFS网络文件系统工作方式
如图所示在NFS服务器端设置好一个共享目录/video后,其他有权限访问NFS服务器端的客户端都可以将这个共享目录/video挂载到客户端本地的某个挂载点(其实就是一个目录,这个挂载点目录可以自己隨意指定) 图10-5中的两个NFS客户端本地的挂载点分别为/v/video和/video,不同客户端的挂载点可以不相同。
客户端正确挂载完毕后,就可以通过NFS客户端的挂载点所在的/V/video或/video目录查看到NFS服务器端/video共享出来的目录下的所有数据。在客户端上查看时,NFS服务器端的/video目录就相当于客户端本地的磁盘分区或目录,几乎感觉不到使用上的区别,根据NFS服务器端授予的NFS共享权限以及共享目录的本地系统权限,只要在指定的NF$客户端操作挂载/video或/v/video的目录就可以将数据轻松地存取到NFS服务器端上的/Video目录中了。
第2章 NFS网络文件系统重点要了解的两个服务
2.1 rpc服务
2.2 nfs服务
2.3 NFS请求数据流程
当访问程序通过NFS客户端向NFS服务器存取文件时,其请求数据流程大致如下:
01.首先用户访问网站程序,由程序在NFS客户端上发出存取NFS 文件的请求,这时NFS客户端( 即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询问请求。
02.NFS服务器端的RPC 服务( rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC 服务(rpcbind服务)。
03.此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据。
04.NFS客户端把数据存取成功后,返回给前端访问程序,告知用户存取结果,作为网站用户,就完成了一次存取操作。
因为NFS的各项功能都需要向RPC 服务(rpcbind服务)注册,所以只有RPC 服务才能获取到NFS服务的各项功能对应的端口号( portnumber) PID.NFS在主机所监听的IP等信息,而NFS 客户端也只能通过向RPC 服务询问才能找到正确的端口。也就是说,NFS 需要有RPC服务的协助才能成功对外提供服务。从上面的描述,我们不难推断,无论是NFS客户端还是NFS服务器端,当要使用NFS 时,都需要首先启动RPC 服务,NFS 服务必须在RPC 服务启动之后启动,客户端无需启动NFS服务,但需要启动RPC服务。
第3章 NFS实践操作
3.1 NFS服务端部署过程
第一个里程碑-确认软件是否已经安装,安装NFS服务相关软件
rpm -qa|grep nfs
rpm -qa|grep rpc
# 安装rpcbind nfs-utils服务程序,并进行验证安装是否成功
yum install -y nfs-utils rpcbind
rpm -qa nfs-utils rpcbind
# 第二个里程碑-编写nfs配置文件
nfs配置文件默认存在/etc/exports
vim /etc/exports
#share /data by oldboy for share at 20170220
/data 172.16.1.0/24(rw,sync)
第一部分:/data --指定共享目录信息
第二部分:172.16.1.0/24 --指定了一个网段信息,表示允许指定的网段主机挂载到我本地的共享目录上
第三部分:(rw,sync) --表示定义共享参数信息,
rw 表示读写,对共享目录设置的权限
sync 同步,数据会先写入到NFS服务器内存中,会立刻同步到磁盘里面==直接存储硬盘中
# 第三个里程碑:创建共享目录,进行权限设定
mkdir /data -p
chown -R nfsnobody.nfsnobody /data
说明:NFS共享目录管理用户为nfsnobody,此用户不用创建,安装nfs软件时会自动创建
# 第四个里程碑:启动服务
首先启动,rpc服务
/etc/init.d/rpcbind start
rpcbind服务启动信息查看
[root@nfs01 ~]# ps -ef|grep rpcbind
rpc 4050 1 0 10:55 ? 00:00:00 rpcbind
root 4054 3878 0 10:55 pts/1 00:00:00 grep --color=auto rpcbind
[root@nfs01 ~]# netstat -lntup|grep 111
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 4050/rpcbind
tcp 0 0 :::111 :::* LISTEN 4050/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:* 4050/rpcbind
udp 0 0 :::111 :::* 4050/rpcbind
[root@nfs01 ~]# 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
其次启动,nfs服务
/etc/init.d/nfs start
nfs服务启动后,查看信息
[root@nfs01 ~]# ps -ef|grep nfs
root 4112 2 0 10:58 ? 00:00:00 [nfsd4]
root 4113 2 0 10:58 ? 00:00:00 [nfsd4_callbacks]
root 4114 2 0 10:58 ? 00:00:00 [nfsd]
root 4115 2 0 10:58 ? 00:00:00 [nfsd]
root 4116 2 0 10:58 ? 00:00:00 [nfsd]
root 4117 2 0 10:58 ? 00:00:00 [nfsd]
root 4118 2 0 10:58 ? 00:00:00 [nfsd]
root 4119 2 0 10:58 ? 00:00:00 [nfsd]
root 4120 2 0 10:58 ? 00:00:00 [nfsd]
root 4121 2 0 10:58 ? 00:00:00 [nfsd]
root 4156 3878 0 10:59 pts/1 00:00:00 grep --color=auto nfs
[root@nfs01 ~]# netstat -lntup|grep nfs
[root@nfs01 ~]# 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
100011 1 udp 875 rquotad
100011 2 udp 875 rquotad
100011 1 tcp 875 rquotad
100011 2 tcp 875 rquotad
100005 1 udp 33411 mountd
100005 1 tcp 30112 mountd
100005 2 udp 57676 mountd
100005 2 tcp 47232 mountd
100005 3 udp 52338 mountd
100005 3 tcp 22981 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 64834 nlockmgr
100021 3 udp 64834 nlockmgr
100021 4 udp 64834 nlockmgr
100021 1 tcp 29200 nlockmgr
100021 3 tcp 29200 nlockmgr
100021 4 tcp 29200 nlockmgr
[root@nfs01 ~]# showmount -e 10.0.0.31
Export list for 10.0.0.31:
[root@nfs01 ~]# /etc/init.d/nfs restart
Shutting down NFS daemon: [ OK ]
Shutting down NFS mountd: [ OK ]
Shutting down NFS quotas: [ OK ]
Shutting down RPC idmapd: [ OK ]
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
[root@nfs01 ~]# showmount -e 10.0.0.31
Export list for 10.0.0.31:
/data 172.16.1.0/24
至此:服务端部署配置完成NFS客户端部署过程
3.2 NFS客户端部署过程
第一个里程碑:确认软件有没有,进行nfs rpc服务软件安装部署
# 检查软件是否安装
# 安装软件
yum install rpcbind nfs-utils -y
PS:nfs软件安装后,不需要启动nfs服务
rpcbind软件安装后,也可以不启动rpcbind服务
如果nfs软件不安装会造成的问题
a 客户端无法使用showmountmingling
b 客户端无法识别nfs文件系统类型
第二个里程碑:启动rpcbind服务
/etc/init.d/rpcbind start
第三个里程碑:检查nfs服务端是否有可以进行共享挂载的目录
[root@nfs01 ~]# rpm -qf `which showmount`
nfs-utils-1.2.3-75.el6.x86_64
说明:showmount使用,需要安装nfs-utils软件
第四个里程碑:进行nfs客户端挂载
mount -t nfs 172.16.1.31:/data /mnt
第五个里程碑:进行检查测试
[root@backup ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 2.0G 6.4G 24% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
172.16.1.31:/data 8.8G 1.6G 6.8G 19% /mnt
# 本地nfs客户端进行 增删改数据 等价于在nfs服务端共享目录中进行的操作
[root@backup mnt]# touch oldboy.txt
touch: cannot touch `oldboy.txt': Permission denied
[root@backup mnt]# touch oldboy.txt
[root@backup mnt]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 11:24 oldboy.txt
[root@backup mnt]# echo "HQ hen danchun" >oldboy.txt
[root@backup mnt]# cat oldboy.txt
HQ hen danchun
[root@backup mnt]# rm -f oldboy.txt
[root@backup mnt]# ll
total 0
至此,客户端部署过程完毕
第4章 知识扩展
4.1 NFS服务相关进程信息说明
rpcinfo -p localhost
服务或进程名 |
说明 |
portmapper |
rpcbind服务的进程(centod5 protmap centos6 rpcbind) |
rquotad |
磁盘配额进程 |
mountd |
服务端挂载进程,提供客户端进行挂载操作 |
nfs/nfs_acl |
nfs服务进程 |
rpc.idmapd(重要) |
用户映射或用户压缩(名字映射后台进程) |
4.2 NFS 服务端设置 rpcbind nfs服务开机自启动
[root@nfs-server ~]# chkconfig rpcbind on
[root@nfs-server ~]# chkconfig nfs on
4.3 NFS配置文件编写说明
官方举例配置
EXAMPLE
# sample /etc/exports file
/ master(rw) trusty(rw,no_root_squash)
/projects proj*.local.domain(rw)
/usr *.local.domain(ro) @trusted(rw)
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
/pub *(ro,insecure,all_squash)
/srv/www -sync,rw server @trusted @external(ro)
/foo 2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
/build buildhost[0-9].local.domain(rw)
企业生产环境中常见的NFS配置实例:
常用格式说明 |
要共享的目录客户端IP地址或IP段(参1..2... |
配 置 例一
|
/data 10 0.0 0/24( rw,sync ) 说明:允许客户端读写,并且数据同步写入到服务器端的磁盘里 注意: 24和" (" 之间不能有空格
|
配置例二
|
/data10.0.00/24(rw,sync,allsquash,anonuid=2000,anongid=2000 ) 说明: 允许客户端读写,井且数据同步写到服务器端的磁盘里,并且指定客户端的用户UID和GID.早期生产环境的一种配置。适合多客户端共享一个NFS服务单目录,如果所有服务器nfsnobody账户UID那是65534,则本例没什么必要了。早期centos5.5的系统默认情况下nfsnobody的UID不一定是65534,此时如果这些服务器共享一个NFS目录,就会出现访问权限问题. |
配置例三
|
/home/oldboy 10.0.0.0/24( ro ) 说明只读共享 用途:例如在生产环境中,开发人员有查看生产服务器日志的需求,但又不希望给开发生产服务器的权限,那么就可以给开发提供从某个测试服务器NFS客户端上查看某个生产服务器的日志目录(NFS共享)的权限,当然这不是唯一的方去,例如可以把程序记录的日志发送到测试服务器供开发查看或者通过收集日志等其它方式展现 |
/etc/exports文件配置格式为:
NFS共享目录 NFS客户端地址1(参数1,参数2,...) 客户端地址2(参数1,参数2,...)
或
NFS共享目录 NFS客户端地址1(参数1,参数2,...)
NFS共享目录 NFS客户端地址2(参数1,参数2,...)
注意:nfs服务默认没有认证机制,安全性不如分布式文件系统
只能通过控制配置文件中网络地址信息,实现安全性
实践操作:
nfs客户端进行测试:
[root@backup mnt]# touch oldboy.txt
[root@backup mnt]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:33 oldboy.txt
[root@backup mnt]# su - oldboy
[oldboy@backup ~]$ cd /mnt
[oldboy@backup mnt]$ touch oldboy1.txt
[oldboy@backup mnt]$ ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 oldboy1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:33 oldboy.txt
nfs配置参数实践:all_squash
nfs服务端配置:
[root@nfs01 data]# vim /etc/exports
#share /data by oldboy for share at 20170220
/data 172.16.1.0/24(rw,sync,no_all_squash,root_squash)
# 配置修改需要平滑重启nfs服务
/etc/init.d/nfs reload
nfs客户端测试:
[root@backup /]# umount /mnt
[root@backup /]# mount -t nfs 172.16.1.31:/data /mnt
[root@backup /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 2.0G 6.4G 24% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
172.16.1.31:/data 8.8G 1.6G 6.8G 19% /mnt
[root@backup /]# cd /mnt/
[root@backup mnt]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 oldboy1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:33 oldboy.txt
[root@backup mnt]# touch oldboy2.txt
[root@backup mnt]# su - oldboy
[oldboy@backup ~]$ cd /mnt
[oldboy@backup mnt]$ touch oldboy3.txt
touch: cannot touch `oldboy3.txt': Permission denied
nfs配置参数实践:no_root_squash(root用户不进行压缩映射)
nfs服务端查看共享目录数据权限
[root@nfs01 data]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 oldboy1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:38 oldboy2.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:33 oldboy.txt
nfs服务进行配置修改:
[root@nfs01 data]# vim /etc/exports
#share /data by oldboy for share at 20170220
/data 172.16.1.0/24(rw,sync,no_root_squash)
# 配置修改需要平滑重启nfs服务
/etc/init.d/nfs reload
nfs客户端进行测试:
[root@backup /]# umount /mnt
[root@backup /]# mount -t nfs 172.16.1.31:/data /mnt
[root@backup /]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 2.0G 6.4G 24% /
tmpfs 491M 0 491M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
172.16.1.31:/data 8.8G 1.6G 6.8G 19% /mnt
[root@backup /]# cd /mnt
[root@backup mnt]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 oldboy1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:38 oldboy2.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:33 oldboy.txt
[root@backup mnt]# touch oldboy4.txt
[root@backup mnt]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 oldboy1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:38 oldboy2.txt
-rw-r--r-- 1 root root 0 Oct 13 12:45 oldboy4.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:33 oldboy.txt
[root@backup mnt]# rm ./* -rf
[root@backup mnt]# ll
total 0