目录
- NFS介绍
----什么是NFS?
----应用场景 - NFS工作原理
----文件挂载示意图
----RPC中转示意图
----NFS原理 - NFS配置常用参数及文件
----参数理解
----配置文件理解 - 搭建NFS实战
----服务端配置
----客户端配置 - 总结
一、NFS介绍
1、什么是NFS?
NFS是Network File System的缩写,中文意思是网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。
2、应用场景
(1)共享视频、图片、文件等静态资源
(2)在虚拟机动态迁移过程中,数据盘共享存储减少迁移数据量,提高迁移效率。
(3)在负载均衡场景中,为负载服务器提供统一的大数据存储。
中小型网站公司应用频率更高,大公司或门户除了使用NFS外,还可能会使用更为复杂的分布式文件系统,比如ceph,Moosefs(mfs),GlusterFS,FastDFS等。
二、NFS工作原理
(1)文件挂载
(2)RPC中转
(3)原理
- 首先用户访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询问请求。
- NFS服务端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务(rpcbind服务)
- 此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据
- NFS客户端把数据存取成功后,返回给前端访问程序,告知给用户存取结果,作为网站用户,就完成了一次存取操作
三、NFS配置常用参数及文件
1)参数理解
参数 | 作用 |
---|---|
rw | Read-write,表示可读可写权限 |
ro | Read-only,表示只读权限 |
sync | (同步,实时)请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回 |
async | (异步)写入时数据会先写到内存缓冲区,知道硬盘有空档才会写入磁盘,这样可以提高写入效率,奉献 |
no_root_squash | 访问NFS Server共享目录的用户如果是root,它对该共享目录具有root权限 |
all_squash | 不管访问共享目录的用户身份如何,它的权限都被压缩成匿名用户 |
anonuid | 指定共享文件夹里文件所有者的uid号:例如:(rw,squash,anonuid=12306,anongid=12306) |
anongid | 指定共享文件夹里文件所有者的gid号:例如:(rw,squash,anonuid=12306,anongid=12306) |
2)配置文件理解
- NFS服务的默认配置文件路径为:/etc/exports,并且默认是空的。
- /etc/exports文件位置格式为:
NFS共享的目录 NFS客户端地址1(参1,参2...)客户端地址2(参1,参2...)
NFS共享的目录 NFS客户端地址(参1,参2...)
四、搭建NFS实战
环境要求:
(1)两台centos 7机器,要求下载nfs服务,同步时间。
#安装nfs-utils,nfs-utils包会自带rpcbind包
yum install nfs-utils -y
#同步时间
ntpdate ntp1.aliyun.com
#查询安装包
rpm -qa nfs-utils
(2)处理防火墙(firewalld,selinux)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
(3)主机要求:
主机 | 地址 | 名称 | 目录 |
---|---|---|---|
Ripe1 | 192.168.139.152 | Client | 挂载目录:/mnt/ |
Ripe2 | 192.168.139.153 | Server | 共享目录:/data |
- 查询命令属于哪个包
[root@Ripe2 ~]# rpm -qf /usr/sbin/rpcbind
rpcbind-0.2.0-49.el7.x86_64
[root@Ripe2 ~]# rpm -qf `which showmount`
nfs-utils-1.3.0-0.66.el7.x86_64
- 启动rpcbind
#启动rpcbind(启动nfs前要确保rpcbind开启)
systemctl status rpcbind
systemctl start rpcbind
- 启动NFS服务并查看进程信息
#启动nfs服务
systemctl start nfs
#查看进程信息
ps -ef | grep "rpc|nfs"
------ NFS服务端配置
- 修改/etc/exports(NFS服务的默认配置文件路径为:/etc/exports,并且默认是空的)
vim /etc/exports
/data 192.168.139.152(rw,sync)
#命令说明
/data :nfs的共享目录路径
192.168.139.152 :允许挂载本机共享目录的主机IP地址
(rw):可读可写
(sync):实时同步
- 修改配置文件后,重新启动nfs服务
systemctl reload nfs
- 创建共享目录并授权
#创建共享目录
[root@Ripe2 ~]# mkdir /data
#查看nfs用户信息
[root@Ripe2 ~]# grep 'nfs' /etc/passwd
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
#更改共享目录属主属组
[root@Ripe2 ~]# chmod -R nfsnobody:nfsnobody /data
(如果不授权属主属组,那么共享目录挂载以后将不遵循配置文件exports的设定好的读写规则。虽然也能正常挂载,但是会导致写入文件时提示没有权限)
------ NFS客户端配置
- 客户端必须装nfs-utils软件
yum install nfs-utils -y
- 检查远端挂载配置
[root@Ripe1 ~]# showmount -e 192.168.139.153
Export list for 192.168.139.153:
/data 192.168.139.152
- 客户端挂载
[root@Ripe1 ~]# mount -t nfs 192.168.139.153:/data /mnt/
- 自行测试
#在客户端上创建测试文件
[root@Ripe1 ~]# touch /mnt/file{01..05}
#在服务端查看
[root@Ripe2 ~]# ls -l /data/
- 客户机开启开机自动挂载
[root@Ripe1 ~]# vim /etc/fstab
192.168.139.153:/data /mnt/ nfs defaults 0 0
此时配置NFS服务完成
总结
对于以上开机挂载是针对centos7,在centos 6中,若是直接写入
/etc/fstab
中,可能会影响正常开机。centos 6一般写在/etc/rc.local
------ >echo "mount -t nfs 192.168.139.153:/data /mnt/" >> /etc/rc.local
。在centos 7 中若要写入 /etc/rc.local 时,要先判断。/bin/bash /root/judage_nfs.sh
#判断脚本
[root@Ripe1 ~]# cat judage_nfs.sh
#!/bin/bash
while read line
do
array=($line) #tem array
df -h | grep -w "^${array[0]}" >/dev/null
if [ $? -ne 0 ]
then
mount -t nfs ${array[0]} ${array[1]}
fi
sleep 1
done < MPF #MPF为自定义挂载信息文件,编辑内容形如:192.168.139.153:/data /mnt/