目录

  • 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)文件挂载

nfs配置krb5 NFS配置概念_客户端

 

(2)RPC中转

nfs配置krb5 NFS配置概念_linux_02

 

(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/