阅读目录
第1章 NFS介绍1.1 NFS服务内容的概述□ RPC服务知识概念介绍说明,以及RPC服务存在价值(必须理解掌握) □ NFS服务工作原理讲解(必须理解掌握) □ NFS共享文件系统使用原理讲解(必须理解掌握) □ NFS服务配罝文件exports编写格式说明(必须理解掌握) 1.2 NFS是什么NFS(Network File System)即网络文件系统 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。 分布式文件系统Moosefs(mfs)\glusterFS 1.2.1 NFS的qudiannfs属于本地文件存储服务 缺点一: winndows上无法使用 缺点二: 在高并发场景,以及存储量比较高的场景,对数据安全性要求比较高场景 需要采用分布式储存(mfs FastDFS) 分布式文件系统:无法在服务器中看到真实的文件信息 1.2.2 实现Windows与linux系统文件数据共享方法a.ftp(ftp服务部署) b.samba服务 1.3 NFS共享网络文件系统企业应用主要用于存储web服务器上用户上传的数据信息,图片 附件 头像 视频 音频 1.4 NFS文件系统存在意义实现数据共享,数据统一一致 1.4.1 实现的不同方法软件实现: 本地文件系统NFS 分布式文件系统 mfs 硬件实现: IBM (服务器 小型机 大型机 存储 DS V7000 V5000) Oracle EMC = 去IOE 回到顶部
1.5 NFS 网络文件系统工作方式在nfs服务端创建共享目录 通过mount 网路挂载,将NFS客户端本地目录挂载到NFS服务端共享目录上 NFS客户端挂载目录上创建、删除、查看数据操作,等价于在服务端进行的创建、删除、查看数据操作
如图10-5所示,在 NFS服务器端设置好一个共享目录 /video后,其他有权限访问 NFS服务器端的客户端都可以将这个共享目录 /video挂载到客户端本地的某个挂载点(其实就是一个目录,这个挂载点目录可以自己随意指定),图10-5中的两个 NFS客户端本地的挂载点分別为/ v/video和/video ,不同客户端的挂载点可以不相同。 客户端正确挂载完毕后,就可以通过 NFS客户端的挂载点所在的/v/video或 /video目录查看 到 NFS服务器端 /video共享出来的目录下的所有数据。在客户端上查看时 ,NFS服务器端的 /video目录就相当于客户端本地的磁盘分区或目录,几乎感觉不到使用上的区别,根据 NFS服务器端授予 的 NFS共享权限以及共享目录的本地系统权限,只要在指定的 NFS客户端操作挂载/ v/video或/video的目录,就可以将数据轻松地存取到NFS服务器端上的/video目录中了。 1.6 NFS网络文件系统重点要了解两个重要服务RPC服务 NFS服务 1.6.1 NFS工作流程图
1.6.2 RPC服务工作原理1.6.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服务的各项功能对应的端口号(port number)、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端□。也就是说,NFS需要有RPC服务的协助才能成功对外提供服务。从上面的描述,我们不难推断,无论是NFS客户端还是NFS服务器端,当要使用NFS时,都需要首先启动RPC服务,NFS服务必须在RPC服务启动之后启动,客户端无需启动NFS服务,但需要启动RPC服务。 第2章 实践操作NFS 服务2.1 进行服务器架构规划NFS服务器部署角色IP
2.2 NFS服务端部署过程2.2.1 第一个里程碑-确认软件是否已经安装,安装NFS服务相关软件rpm -qa|grep nfs rpm -qa|grep rpc 安装rpcbind nfs-utils服务程序,并进行验证安装是否成功 yum install -y nfs-utils rpcbind rpm -qa nfs-utils rpcbind
2.2.2 第二个里程碑-编写nfs配置文件nfs配置文件默认存在/etc/exports vim /etc/exports #share /data by oldboy for share at 20170220 /data 172.16.1.0/24(rw,sync) /etc/exports文件说明: 第一部分:/data --指定共享目录信息 第二部分:172.16.1.0/24 --指定了一个网段信息,表示允许指定的网段主机挂载到我本地的共享目录上 第三部分:(rw,sync) --表示定义共享参数信息, rw 表示读写,对共享目录设置的权限 sync 同步,数据会先写入到NFS服务器内存中,会立刻同步到磁盘里面==直接存储硬盘中 2.2.3 第三个里程碑:创建共享目录,进行权限设定mkdir /data -p chown -R nfsnobody.nfsnobody /data 说明: NFS共享目录管理用户为nfsnobody,此用户不用创建,安装nfs软件时会自动创建 2.2.4 第四个里程碑:启动服务(注意顺序)首先,启动rpc服务 /etc/init.d/rpcbind start 其次,启动nfs服务 /etc/init.d/nfs 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启动后查看信息 [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 100024 1 udp 28467 status 100024 1 tcp 56269 status 100011 1 udp 875 rquotad 100011 2 udp 875 rquotad 100011 1 tcp 875 rquotad 100011 2 tcp 875 rquotad 100005 1 udp 32886 mountd 100005 1 tcp 6154 mountd 100005 2 udp 38339 mountd 100005 2 tcp 60288 mountd 100005 3 udp 49824 mountd 100005 3 tcp 24427 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 61803 nlockmgr 100021 3 udp 61803 nlockmgr 100021 4 udp 61803 nlockmgr 100021 1 tcp 6064 nlockmgr 100021 3 tcp 6064 nlockmgr 100021 4 tcp 6064 nlockmgr 2.2.5 到此服务端部署配置完成[root@nfs01 ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24 NFS服务开启后,默认的参数文件位置,注意:修改此文件,对nfs服务没有任何影响[root@nfs01 ~]# cat /var/lib/nfs/etab /data 172.16.1.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) 2.3 NFS 客户端部署2.3.1 第一个里程碑:确认软件有没有安装,进行nfs rpc 服务软件安装部署yum install rpcbind nfs-utils -y 2.3.2 第二个里程碑:启动服务提示: rpcbind和nfs软件都可以不启动 2.3.3 第三个里程碑: 检查NFS服务端是否有可以进行挂载的目录[root@nfs01 ~]# rpm -qf `which showmount` nfs-utils-1.2.3-75.el6.x86_64 说明:showmount使用,需要安装nfs-utils软件 2.3.4 第四个里程碑:进程nfs客户端挂载mount -t nfs 172.16.1.31:/data /mnt
[root@backup ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24 [root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt 说明: 如果nfs软件不安装 a 无法使用showmount 命令 b 客户端无法识别nfs 文件系统类型 2.3.5 第五个里程碑: 进行检查测试[root@backup ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 19G 1.5G 17G 9% / tmpfs 238M 0 238M 0% /dev/shm /dev/sda1 190M 40M 141M 22% /boot 172.16.1.31:/data 19G 1.5G 17G 9% /mnt 【测试】本地nfs客户端 进行增删改数据 等价于 nfs服务端共享目录操作 [root@backup mnt]# echo "test123">test.txt [root@backup mnt]# ll test.txt -rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt [root@nfs01 data]# cat test.txt test123 第3章 知识深入3.1 NFS服务相关进程信息3.1.1 简略说明rpcbind rpc启动进程 主进程 rpc state 检查数据存储的一致性 rpc.rquotad 磁盘配额 rpc.mountd 权限管理验证 nfsd NFS主进程 rpc.idmapd 用户压缩映射 3.1.1 进程/服务 详细说明
3.2 /etc/exports配置文件说明3.2.1 /etc/exports文件说明□ NFS共享目录: 为 NFS服务器端要共享的实际目录,要用绝对路径,如 (/data )。注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被 NFS客户端的用户 (nfsnobody)读写。 □ NFS客户端地址: 为NFS服务器端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段地址。还可以用来匹配所有客户端服务器,这里所谓的客户端一般来说是前端的业务的业务服务器,例如:web服务。 □权限参数集 对授权的NFS客户端的访问权限设置。 nfs权限(共享目录\借给你手机)nfs配置的/ etc/exports /data 172.16.1.0/24(rw) 本地文件系统权限(\手机密码不告诉你)挂载目录的权限rwxr- xr-x root root/data 3.2.2 指定 NFS客户端地址的配置详细说明
3.2.3 常见案例
3.2.4 nfs客户端访问服务原理
3.2.5 nfs服务访问原理
客户端(无论用什么用户访问)---门---服务端(nfsnobody) rpc.idmapd 3.3 NFS服务端设置rpcbind nfs服务开机自启动[root@nfs01 ~]# chkconfig rpcbind on [root@nfs01 ~]# chkconfig nfs on [root@nfs01 ~]# chkconfig |egrep "rpcbinf|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 3.4 NFS配置文件编写说明3.4.1 官方举例配置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) 3.4.2 /etc/exports文件配置格式为:NFS共享目录 NFS客户端地址1(参数1,参数2,...) 客户端地址2(参数1,参数2,...) 或 NFS共享目录 NFS客户端地址1(参数1,参数2,...) NFS共享目录 NFS客户端地址2(参数1,参数2,...) 注意:nfs服务默认没有认证机制,安全性不如分布式文件系统 只能通过控制配置文件中网络地址信息,实现安全性 3.5 nfs配置参数说明
3.6 nfs配置参数实践3.6.1 all_squash 参数实践服务端修改配置 [root@nfs01 ~]# vim /etc/exports #share 20171013 hzs /data 172.16.1.0/24(rw,sync,all_squash) [root@nfs01 ~]# /etc/init.d/nfs reload 配置修改需要平滑重启nfs 服务 reload 平滑重启 用户的访问体验更好 nfs客户端进行测试 [root@backup mnt]# touch test.txt [root@backup mnt]# ll -rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt [root@backup ~]# su - oldboy [oldboy@backup ~]$ cd /mnt/ [oldboy@backup mnt]$ touch oldboy1.txt [oldboy@backup mnt]$ ll -rw-rw-r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 oldboy1.txt -rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt 说明: 不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody 3.6.2 no_all_squash,root_squash 参数实践服务端修改配置 [root@nfs01 ~]# vim /etc/exports #share 20171013 hzs /data 172.16.1.0/24(rw,sync,no_all_squash,root_squash) [root@nfs01 ~]# /etc/init.d/nfs reload
客户端卸载重新挂载(服务器配置修改后客户端要重新挂载) [root@backup ~]# umount /mnt/ [root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt nfs客户端测试结果: [root@backup mnt]# touch test1.txt [root@backup mnt]# ll -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:37 test1.txt [root@backup mnt]# su - oldboy [oldboy@backup ~]$ cd /mnt/ [oldboy@backup mnt]$ touch oldboy1.txt touch: cannot touch `oldboy1.txt': Permission denied [oldboy@backup mnt]$ touch oldboy2.txt touch: cannot touch `oldboy2.txt': Permission denied 服务端验证: [root@nfs01 ~]# ll /data/ -rw-rw-r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 oldboy1.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:37 test1.txt -rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt 说明: no_all_squash,是所有用户都不进行压缩,所以oldboy用户对nfs的目录没有写入的权限(与nfs服务器的共享目录权限有关)。root用户进行压缩所以可以写入。 3.6.3 no_root_squash 参数实践(root用户不进行压缩映射)服务端修改配置 [root@nfs01 ~]# vim /etc/exports #share 20171013 hzs /data 172.16.1.0/24(rw,sync,no_root_squash) [root@nfs01 ~]# /etc/init.d/nfs reload 客户端卸载重新挂载(服务器配置修改后客户端要重新挂载) [root@backup ~]# umount /mnt/ [root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt nfs客户端测试结果: [root@backup mnt]# touch root.txt [root@backup mnt]# ll total 16 -rw-rw-r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 oldboy1.txt -rw-r--r-- 1 root root 0 Oct 13 12:45 root.txt -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:37 test1.txt -rw-r--r-- 1 nfsnobody nfsnobody 8 Oct 13 11:28 test.txt 删除测试 [root@backup mnt]# rm -rf ./* [root@backup mnt]# ll total 0 说明: 由于对root用户没有进行压缩,所以到达nfs服务器后依旧是root身份,root用户默认对所有的文件都有权限,所以可以写入。(很危险) 本文使用的系统版本为: CentOS Linux release 7.4.1708 (Core) 内核版本为: 3.10.0-693.el7.x86_64 CentOS 7下NFS实例笔记 http://www./Linux/2016-12/138708.htm Linux下NFS搭建步骤 http://www./Linux/2016-08/134022.htm NFS文件系统详解 http://www./Linux/2016-06/131940.htm 基于LAMP平台利用NFS远程共享资源实现站点构建 http://www./Linux/2016-07/133510.htm Linux NFS服务器的安装与配置详解 http://www./Linux/2017-01/139886.htm CentOS 7.2中NFS1.3 安装 http://www./Linux/2016-10/135970.htm NFS网络文件共享存储服务器 http://www./Linux/2017-06/145030.htm Ubuntu 14.04安装配置NFS服务器 http://www./Linux/2016-04/129848.htm Linux的NFS配置 http://www./Linux/2017-04/143135.htm 本文永久更新链接地址:http://www./Linux/2017-12/149493.htm ![]() |
|