1. 共享存储服务概念:
# NFS是Network File System的缩写,中文意思是网络文件系统,
# 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。
2. NFS共享存储服务的应用:
# 将数据存储到一台服务器上,实现数据统一一致,共享访问
# NFS存储服务器中主要存储哪些信息:用户上传的图片 音频 视频 附件等信息
# NFS服务是分为服务端和客户端
# 存储服务器:NFS服务端 网站web服务器:NFS客户端
# 实现共享存储好处:
01. 实现数据统一一致
02. 节省网站磁盘资源
03. 节省网站访问带宽
3. NFS共享存储服务的原理:
①. nfs服务端创建共享存储目录
②. nfs客户端创建远程挂载点目录
③. nfs客户端进行远程挂载
④. 实现客户端数据信息统一一致
4. NFS服务重要概念说明:
4.1 NFS共享文件系统RPC服务介绍
4.2 NFS共享文件系统RPC服务由来:
# NFS服务启动进程和端口过程,需要由rpc服务统一管理
5. NFS服务部署实践过程
5.1 NFS服务端部署流程:
# 第一步:检查服务软件是否安装
[root@nfs01 ~]# rpm -qa|egrep "nfs-utils|rpcbind" # 检查 nfs 和 rpc 服务是否已经安装
# 第二步:进行软件服务安装
[root@nfs01 ~]# yum install -y nfs-utils rpcbind
...
[root@nfs01 ~]# rpm -qa|egrep "nfs-utils|rpcbind"
nfs-utils-lib-1.1.5-13.el6.x86_64
rpcbind-0.2.0-16.el6.x86_64
nfs-utils-1.2.3-78.el6_10.1.x86_64
[root@nfs01 ~]#
# 补充说明:nfs-utils 和 rpcbind两个软件大礼包
rpm -ql nfs-utils # 查看软件包内容 的命令
/etc/rc.d/init.d/nfs <-- nfs服务启动脚本文件
/usr/sbin/showmount <-- 检查nfs服务共享目录信息
rpm -ql rpcbind
/etc/rc.d/init.d/rpcbind <-- rpcbind服务启动脚本文件
/usr/sbin/rpcbind <-- 检查nfs服务向rpc服务注册信息
# 第三步:编写nfs服务配置文件
[root@nfs01 ~]# ll /etc/exports
-rw-r--r--. 1 root root 0 Jan 12 2010 /etc/exports
[root@nfs01 ~]# vim /etc/exports # 编写服务配置文件; /etc/exports ---> 系统默认的配置共享存储的文件,NFS服务会识别这个文件实现共享存储
[root@nfs01 ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync) # /data 表示数据存储的目录; 172.16.1.0/24 表示允许哪个网段的主机可以挂载到我这台共享服务器上; (rw,rsync) ---> rw 表示共享目录是可读可写的,rsync 是一个同步参数; 172.16.1.0/24 和 (rw,sync) 之间不能有空格
[root@nfs01 ~]#
# 说明:配置文件信息 指定共享目录 指定共享目录访问控制网段或主机信息(共享目录参数信息)
# 第四步:创建nfs服务共享目录,并且进行授权
[root@nfs01 ~]# mkdir /data
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data/
[root@nfs01 ~]#
# 第五步:启动nfs和rpc服务
[root@nfs01 ~]# /etc/init.d/rpcbind start # 要先启动 rpc 这个“中介”服务
Starting rpcbind: [ OK ]
[root@nfs01 ~]# /etc/init.d/nfs start # 再启动 nfs 服务
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
[root@nfs01 ~]#
# 第六步:进行服务配置检查
# 检查 nfs 是否向 rpc 服务注册
[root@nfs01 ~]# rpcinfo -p 172.16.1.31 # 检查本地主机(172.16.1.31,也可用10.0.0.31)是否已经向 rpc 注册
...
# 检查是否存在可用的共享目录
[root@nfs01 ~]# showmount -e 10.0.0.31 # showmount -e 服务端的地址 ---> 检查是否有可用的共享目录
Export list for 10.0.0.31:
/data 172.16.1.0/24
[root@nfs01 ~]#
5.2 NFS客户端部署流程:
# 第一步:检查服务软件是否安装
[root@web01 ~]# rpm -qa|egrep "nfs-utils|rpcbind"
[root@web01 ~]#
# 第二步:进行软件服务安装
# 第三步:进行共享目录挂载
[root@web02 ~]# mount -t nfs 172.16.1.31:/data /mnt # -t nfs 表示挂载 nfs 文件系统类型 ; 172.16.1.31:/data ---> 这个服务器上的 /data 目录; /mnt 表示挂载到 /mnt 目录
[root@web02 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 190M 40M 141M 22% /boot
172.16.1.31:/data 8.8G 1.5G 6.9G 18% /mnt # 共享目录挂载到了 /mnt
[root@web02 ~]#
# 第四步:进行共享存储测试
# 网站服务器01上的操作
[root@web01 ~]# cd /mnt/
[root@web01 mnt]# ll
total 0
[root@web01 mnt]# touch test.txt
[root@web01 mnt]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 3 16:58 test.txt
[root@web01 mnt]#
# 存储服务器上的操作
[root@nfs01 ~]# ll /data/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 3 16:58 test.txt # 存储在 网站服务器的 /mnt 目录下的内容 就相当于 存储在了 存储服务器的 /data目录下
[root@nfs01 ~]#
# 网站web服务器02 上的操作
[root@web02 ~]# ll /mnt/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 3 16:58 test.txt # 在 web02 上也能看到 web01 上的数据
[root@web02 ~]#
# 说明:在web01的mnt目录中创建的数据,在nfs和web02服务器上都可以看到,即已经实现数据共享存储
客户端上不需要启动NFS服务
# 共享文件系统的工作原理(服务端3步 客户端3步)
# 服务端做了三件事:
1. 启动rpcbind服务,创建中介
2. 启动nfs服务,创建“房源”信息
3. 将“房源”信息向中介进行注册,在nfs服务稳定运行过程中,“房源”信息只注册一次
# 客户端做了三件事:
1. 启动rpcbind服务(可选)
2. 确保客户端和服务端网络连接建立成功
3. 执行mount命令进行网络存储挂载
6. NFS服务部署进程信息详述
[root@oldboy ~]# ps -ef|egrep "rpc|nfs"
rpc 1564 1 0 09:32 ? 00:00:00 rpcbind
rpc 1065 1 0 09:32 ? 00:00:00 rpc statd # <- 检查数据存储一致性
root 4736 2 0 21:31 ? 00:00:00 [rpciod/0]
root 5363 1 0 21:47 ? 00:00:00 rpc.rquotad # <- 磁盘配额进程(remote quote server)
root 5368 1 0 21:47 ? 00:00:00 rpc.mountd # <- 权限管理验证等(NFS mount daemon)
root 5375 2 0 21:47 ? 00:00:00 [nfsd4]
root 5376 2 0 21:47 ? 00:00:00 [nfsd4_callbacks]
root 5377 2 0 21:47 ? 00:00:00 [nfsd] # <- NFS主进程
root 5378 2 0 21:47 ? 00:00:00 [nfsd] # <- NFS主进程
root 5379 2 0 21:47 ? 00:00:00 [nfsd] # <- NFS主进程,管理登入,ID身份判别等。
root 5380 2 0 21:47 ? 00:00:00 [nfsd]
root 5381 2 0 21:47 ? 00:00:00 [nfsd]
root 5382 2 0 21:47 ? 00:00:00 [nfsd]
root 5383 2 0 21:47 ? 00:00:00 [nfsd]
root 5384 2 0 21:47 ? 00:00:00 [nfsd] # <- NFS主进程
root 5415 1 0 21:47 ? 00:00:00 rpc.idmapd # <- name mapping daemon
# 用户压缩/用户映射(记录)
root 5512 4670 0 22:02 pts/0 00:00:00 egrep rpc|nfs
7. NFS共享存储服务配置说明
7.1 NFS共享文件系统配置文件格式说明:
# NFS共享目录:
为NFS服务器端要共享的实际目录,要用绝对路径,如(/data)。
注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被NFS客户端的用户(nfsnobody)读写。
# NFS客户端地址:
为NFS服务器端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段地址。
还可以用“*”来匹配所有客户端服务器,这里所谓的客户端一般来说是前端的业务的业务服务器,例如:web服务。具体说明见表10-3
权限参数集
对授权的NFS客户端的访问权限设置。参数具体说明见后文。
nfs权限(共享目录【借给你手机】) nfs配置的/etc/exports /data 172.16.1.0/24(rw)
本地文件系统权限(【手机密码不告诉你】) 挂载目录的权限rwxr-xr-x root root /data
NFS共享配置文件语法格式:
同步和异步(sync 和 async):
NFS客户端地址配置说明: