NFS服务部署 1.NFS储存服务 2.NFS储存服务部署 3. NFS服务工作原理 4. NFS配置文件说明 5. nfs服务问题 6. NFS客户端配置详细说明

2020年9月15号,13时14分(这个时间秒啊!)
弱者废话连篇,强者无序多言,嘿嘿!!!
下面一起学习nfs网络存储部署,有些写得不好请多多指出
博客同步:www.xiaoxuanzi.top

1.1 概念说明

NFS是Network File System的缩写中文意思是网络文件共享系统,它的主要功能是通过网络(一般是同域网)让不同的主机系统之间可以共享文件或目录。

NFS客户端(-般为应用服务器,例如web)可以通过挂载(mount) 的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录- -样,而实际上却是远端的NFS服务器的目录。
NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

存储服务的种类:

用于中小型企业存储作用:实现数据共享存储

  1. FTP存储服务:文件传输协议

运维人员01需要管理服务器01和服务器02,运维人员02需要管理服务器03和服务器04,假设运维人员01需要管理服务器03,怎么办?

在公司部署FTP共享储存服务器,把可以共享数据放在共享存储服务器,方便公司人员管理查看。

案例:中小型充值公司(游戏币,QQ币,话费)→ 每日财务对账信息存储数据库服务器 → 每月财务信息文件上传FTP服务器 → 合作公司(移动,腾讯)可以查账

  1. Samba存储服务:实现Linux和Windows之间数据传输存储(Linux部署Samba)

  2. NFS存储服务:实现Linux和Linux之间数据传输存储

    用于大型门户企业(百度,新浪):利用分布式存储

    Moosefs(mfs) 比较落伍,初学学习比较简单

    GlusterFS

    FastDFS 企业应用较
    NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

1.2 NFS储存服务作用

1、实现企业架构数据的共享存储

2、便有数据操作管理

3、节省服务器磁盘使用开销
NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

2.NFS储存服务部署

2.1 RPC管理说明

RPC: 远程过程调用服务程序--- 相当于租房的中介(网络编程支持)

nfs服务启动流程:

第一步:启动RPC服务(中介)

第二步:启动NFS服务进程(房源、房东),把NFS服务端口信息告知RPC服务进程管理

第三步:客户端访问RPC服务,询问NFS服务端口信息

第四步:RPC服务返回客户端信息(NFS服务端口)

第五步:客户端根据端口访问NFS服务器

NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

2.2 NFS服务-rpc管理流程

. 因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号port、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端口。也就是说,NFS需要有RPC服务的协助才能成功对外提供服务。
NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

2.3 NFS服务部署流程

NFS服务端部署

第一步:下载安装NFS和rpc软件

rpm -qa|grep -E "nfs|rpc"
yum install -y nfs-utils rpcbind

第二步:编写nfs配置文件

# 1.查看nfs配置参数 man exports	
exports - NFS server export table		翻译:NFS服务配置导出表

# 2.编写配置文件 /etc/exports
[root @nfs ~ ]#  vim /etc/exports
/date   172.16.1.0/24(rw,sync)

配置文件格式:存储目录		网段白名单(参数1,参数2.....)
第一列:设置数据存储目录 /date
第二列:设置nfs服务网络白名单(允许哪些网段主机可以连接存储服务器进行数据存储)
第三列:设置存储目录权限,目录一些功能信息(说明:设置信息需要小括号中,紧跟第二列白名单)

第三步:创建存储目录,对目录进行用户授权(设置存储目录属主属组为nfsnobody)

# 设置存储目录属主信息
mkdir -p /date && chown -R nfsnobody.nfsnobody /date


# 查看存储目录设置
[root @nfs ~ ]# ll /date -d
drwxr-xr-x 2 nfsnobody nfsnobody 6 Sep 30 12:36 /date

说明:nfsnobody是安装nfs-utils服务软件自动创建虚拟用户,用于管理存储目录

第四步:启动nfs服务

PS:nfs服务端口由rpc服务管理,启动顺序:先启动rpc服务,再启动nfs服务

# 启动rpc服务
systemctl restart rpcbind.service
systemctl enable rpcbind.service 

# 查看服务启动端口
[root @nfs ~ ]# netstat -lntup| grep rpc
tcp		0      0 0.0.0.0:111		0.0.0.0:*       	LISTEN	10662/rpcbind       
tcp6       	0      0 :::111         		:::*                    LISTEN   10662/rpcbind       

# 启动nfs存储服务
systemctl restart nfs		PS:tab补全可以看到nfs一推服务,systemctl restart nfs可以一块启动
systemctl enable nfs
说明:nfs服务端口信息交给rpc服务管理,netstat命令没法查看端口信息
NFS客户端部署

实现远程挂载共享存储目录

[root @backup ~ ]# mount -t nfs nfs:/date /mnt/nfs
mount: wrong fs type, bad option, bad superblock on nfs:/date,
		错误原因:Linux系统本身不识别nfs文件系统,wrong file system type 无法识别文件类型

# 第一步:安装nfs-utils软件,让Linux识别nfs文件系统
		yum install -y nfs-utils

# 第二步:实现远程挂载nfs共享存储目录
		mount -t nfs 172.16.1.31:/date /mnt/nfs
		参数说明:mount -t 指定挂载文件类型

NFS服务部署完毕,测试客户端存储数据

# 测试第一步:backup备份服务器在共享目录创建一个文件
[root @backup ~ ]# touch /mnt/nfs/backup_date.txt
[root @backup ~ ]# ll /mnt/nfs/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  2 10:09 backup_date.txt

# 测试第二步:web和nfs查看共享数据
[root @nfs ~ ]# ll /date
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  2 10:07 backup_date.txt

[root @web01 ~ ]# ll /mnt/nfs/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  2 10:09 backup_date.txt

# 测试第三步:web服务器修改backup_date.txt内容信息,在其他服务器查看
[root @web01 ~ ]# echo 123456 >/mnt/nfs/backup_date.txt 
[root @nfs ~ ]# cat /date/backup_date.txt 
123456

NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

3. NFS服务工作原理

服务端工作原理

第一步:启动PRC服务,开启111服务端口

第二步:启动NFS服务

第三步:实现NFS服务进程和端口号信息向RPC服务注册

客户端工作原理

第一步:客户端和服务端建立TCP网络连接

第二步:客户端执行挂载命令,进行远程挂载

第三步:实现数据远程存储共享目录
NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

补充:查看NFS服务开启,服务进程和端口注册RPC管理信息

# 停止NFS服务和RPC管理服务
[root @nfs ~ ]# systemctl stop nfs
[root @nfs ~ ]# systemctl stop rpcbind.service 
Warning: Stopping rpcbind.service, but it can still be activated by:
  rpcbind.socket
[root @nfs ~ ]# systemctl stop rpcbind.socket 

# 重新启动RCP服务,NFS服务没有注册端口。查看RPC本来端口信息
[root @nfs ~ ]# systemctl restart rpcbind.service 
[root @nfs ~ ]# 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
	说明:rpcinfo查看NFS和RPC服务端口信息	-p 指定查看主机信息(localhost表示查看本地主机RPC信息

# 启动NFS服务,查看注册端口信息
systemctl restart nfs
rpcinfo  -p 172.16.1.31
	注意:由于NFS服务端口是随机的,当NFS服务重启,部分服务端口信息会改变!!!   

4. NFS配置文件说明

1. 配置文件格式

/etc/exports配置实现多个网段主机可以进行挂载

第一种方式:
	/data   172.16.1.0/24(rw,sync) 10.0.0.0/24(rw,sync)

格式:NFS存储目录	 NFS服务地址1(参数1,参数2...)NFS服务地址2(参数1,参数2...)
第一列:/data为要共享的NFS服务器端的目录,注意,被共享的目录一定要用绝对路径
第二列:10.0.0.0/24表示允许NFS客户端访问共享目录的网段范围。24表示255.255.255.0
第三列:(rw,sync)中的rw表示允许读写,sync 表示数据同步写入到NFS服务器端的硬盘中

第二种方法:
	/data   172.16.1.0/24(rw,sync) 
	/data   10.0.0.0/24(rw,sync)

NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

2. 共享目录的权限问题

1)和存储目录的本身权限有关 (755 属主:nfsnobody)

[root @backup ~ ]# ll /mnt/nfs -d
dr-x-w--w- 2 nfsnobody nfsnobody 47 Sep  2 11:01 /mnt/nfs

[root @backup ~ ]# touch /mnt/nfs/1.txt
touch: cannot touch ‘/mnt/nfs/1.txt’: Permission denied

	说明:挂载存储目录权限不是755以上,提示没有权限touch

2)和配置文件中的权限配置有关 rw/ro

# 修改nfs配置参数为 rw → ro ,设置只读目录数据
[root @nfs ~ ]# cat /etc/exports
/date	172.16.1.0/24(ro,sync)
[root @nfs ~ ]# systemctl restart nfs 


# 设置ro参数,无法创建文件
[root @backup ~ ]# touch /mnt/nfs/1.txt
touch: cannot touch ‘/mnt/nfs/1.txt’: Read-only file system

3)和客户端挂载命令的参数有关 ro/rw 等

3. NFS配置参数权限

rw 存储目录是否有读写权限

​ ro 存储目录是否时只读权限

​ sync 同步方式存储数据 直接将数据保存到磁盘(数据存储安全)

​ async 异步方式存储数据 直接将数据保存到内存(提高数据存储效率)
NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

​ no_root_squash 不要将root用户身份进行转换 (默认参数)

​ root_squash 将root用户身份进行转换

​ all_squash 将所有普通用户身份都进行转换

​ no_all_squash 不要将普通用户身份进行转换(默认参数)
NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

操作演示一:all_squash参数功能

# nfs服务端修改配置文件参数
[root @nfs ~ ]# cat /etc/exports
/date	172.16.1.0/24(rw,sync,all_squash)

[root @nfs ~ ]# systemctl restart nfs

# 客户端backup挂载存储目录,创建数据。(需要重新挂载共享目录)
[root @backup ~ ]# mount -t nfs 172.16.1.31:/date /mnt/nfs
[root @backup ~ ]# su - xuan
[xuan @backup ~ ]$ touch /mnt/nfs/xuan_backup.txt

[xuan @backup ~ ]$ ll /mnt/nfs/xuan_backup.txt
-rw-rw-r-- 1 nfsnobody nfsnobody 0 Sep  3 08:55 /mnt/nfs/xuan_backup.txt

操作演示二:no_all_squash参数功能

# nfs服务端修改配置文件参数
[root @nfs ~ ]# cat /etc/exports
/date	172.16.1.0/24(rw,sync,no_all_squash)

# 客户端操作,没有权限创建。原因:no_all_squash取消其他用户映射nfsnobody身份,以共享目录其他身份权限操作
[xuan @backup ~ ]$ touch /mnt/nfs/xuan_backup_no_squash.txt
touch: cannot touch ‘/mnt/nfs/xuan_backup_no_squash.txt’: Permission denied

解决权限问题:
1.修改目录属主信息
2.修改目录其他用户权限
	chmod o+w /date

操作演示三:root_squash参数功能

# nfs服务端修改配置文件参数
[root @nfs ~ ]# cat /etc/exports
/date	172.16.1.0/24(rw,sync,root_squash)

# 客户端使用root用户创建数据 
[root @backup ~ ]# touch /mnt/nfs/root_date.txt
[root @backup ~ ]# ll /mnt/nfs/root_date.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  3 09:21 /mnt/nfs/root_date.txt

4. 企业互联网公司如何配置NFS 各种squash参数

NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

保证存储目录数据的安全性

配置参数一:no_all_squash 禁止其他用户访问共享目录,可以删除数据或者存储数据

说明1:当nfs存储目录配置all_squash参数,其他用户会以nfsnobody身份访问共享目录,其他用户可以进入共享目录进行创建删除数据操作

说明2:配置 no_all_squash 参数,其他用户以共享目录其他用户身份权限操作

问题:配置no_all_squash,当web服务的站点用户www如何存储数据?

[root @nfs ~ ]# cat /etc/exports
/date	172.16.1.0/24(rw,sync,no_all_squash)


# 第一步: nfs服务器操作:创建www用户,设置共享目录/date属主属组信息
[root @nfs ~ ]# useradd www;echo 123456 |passwd --stdin www
[root @nfs ~ ]# id www
uid=2001(www) gid=2001(www) groups=2001(www)
[root @nfs ~ ]# chown -R www. /date
[root @nfs ~ ]# ll -d /date
drwxr-xr-x 2 www www 217 Sep  3 11:53 /date

# 第二步:web服务器(客户端)以www用户存储数据
[root @web01 ~ ]# su - www
[root @web01 ~ ]# useradd www -u 1001
[www @web01 ~ ]$ touch /mnt/nfs/www_date.txt

	说明:当让www用户可以管理共享目录,方法是把共享存储目录修改属主信息为www用户,确保客户端www用户必须和服务端www用户uid号码一致,否则没有权限操作目录数据

配置参数二:root_squash

说明:当修改共享目录属主不是nfsnobody时,root用户也不可以修改共享目录数据。原因:root_squash默认把root用户转换为nfsnobody用户

此时nfsnobody为共享目录其他用户身份操作,没有权限修改数据

# 修改nfs配置文件,并且共享目录不是nfsnobody
[root @nfs ~ ]# vim /etc/exports
/date   172.16.1.0/24(rw,sync,no_all_squash,root_squash)


# 客户端以root用户身份也无法操作
[root @web01 ~ ]# touch /mnt/nfs/root_date.txt
touch: cannot touch ‘/mnt/nfs/root_date.txt’: Permission denied

以上默认配置(很多服务默认配置都是从安全角度出发)

如何查看nfs默认配置 /val/lib/nfs/etab

[root @nfs ~ ]# cat /var/lib/nfs/etab

/var/lib/nfs/etab文件作用:只是记录nfs服务默认配置信息,不会对nfs服务产生影响

nfs服务配置文件参数:no_all_squash,root_squash ,如何让root用户可以管理www属主共享目录?

root → root_squash → www → 管理/date

客户端root用户可以映射nfs服务端www = 1001管理数据

[root @nfs ~ ]# vim /etc/exports
/date   172.16.1.0/24(rw,sync,no_all_squash,root_squash,anonuid=1001,anongid=1001)

nfs配置参数:

anonuid = 65534 指定客户端用户映射服务端用户uid号码

anongid = 65534 指定客户端用户组映射服务端用户组gid号码

说明:65534用户就是nfs服务创建的nfsnobody用户,但是nfsnobody虚拟用户,也有家目录

[root @nfs ~ ]# grep 65534 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

5. 企业中如何编辑nfs配置文件

​ 1. 通用方法 *****

​ /data 172.16.1.0/24(rw,sync)

  1. 特殊情况 (让部分人员不能操作存储目录 可以看目录中的数据)

​ /data 10.0.0.0/24(ro,sync)

  1. 修改默认的匿名用户

​ /data 10.0.0.0/24(ro,sync,anonuid=xxx,anongid=xxx)

5. nfs服务问题

nfs服务器重启,挂载后创建数据比较慢

原因:服务器重启方式不正确

重启方式一:restart 重启服务 强制断开所有连接 用户感受不好

​ 说明:当多台客户端访问服务端建立网络连接时,其中俩台客户端主机向服务端传输数据,服务端突然 restart 重启服务,会把和服务端建立所有连接强制断开,影响数据传输。 再次重新连接连接的冷却时间为90秒(就是TCP的walk_time)

重启方式二:reload 重启服务(平滑重启) 强制断开没有数据传输的连接 提升用户感受

​ 说明:reload 重启服务,先会把没有数据传输连接断开,再等待数据传输完毕之后断开连接
NFS服务部署
1.NFS储存服务
2.NFS储存服务部署
3. NFS服务工作原理
4. NFS配置文件说明
5. nfs服务问题
6. NFS客户端配置详细说明

6. NFS客户端配置详细说明

客户端挂载共享目录

	mount -t nfs 172.16.1.31:/date /mnt/nfs
参数说明:mount -t		指定挂载文件系统类型

# 实现开机自动挂载共享目录
方法一:利用开机脚本 rc.local
	echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local

方法二. 利用fstab文件
	vim /etc/fstab
	172.16.1.31:/data                         /mnt                    nfs     defaults        0 0

问题:编写fstab文件,无法开机自动挂载网络共享存储目录?

centos6:无法实现网路存储服务自动挂载原因(依赖autofs服务)

centos6是串行启动服务方式,按照服务启动先后顺序启动对应服务程序,直到最后一个服务启动完毕才算服务器服务开机启动时间

顺序依次启动 network服务--- sshd服务--- crond服务--- rsync服务--- rpcbind服务--- nfs服务

实现开机挂载:

1.先加载fstab文件 ,加载最后一行共享目录挂载时,主机的网络服务还没有启动,导致无法挂载

2.启动系统其它服务 network

3.启动 aotufs服务

作用:开机启动autofs服务,会重新加载fstab配置文件信息。实现开机可以挂载共享目录

centos7:无法实现网路存储服务自动挂载原因(依赖remote-fs.target服务)

centos7是并行启动服务方法,把系统所有开机启动服务一并进行启动,开机启动时间取决于最慢启动服务数据

顺序依次启动

​ network服务

​ sshd服务

​ crond服务

​ rsync服务

实现开机挂载:需要开机启动centos7特殊加载fstab服务 remote-fs.target

systemctl start remote-fs.target

systemctl enable remote-fs.target

客户端mount命令参数

rw 实现挂载后挂载点目录可读可写 (默认)

ro 实现挂载后挂载点目录可读可写

suid 在共享目录中可以让setuid权限位生效 (默认)

nosuid 在共享目录中可以让setuid权限位失效 提供共享目录的安全性

exec 共享目录中的执行文件可以直接执行(默认)

noexec 共享目录中的执行文件可以无法直接执行 提供共享目录的安全性

auto 可以实现自动挂载 (默认) root用户:mount -a 实现加载fstab文件自动挂载

noauto 不可以实现自动挂载

nouser 禁止普通用户可以卸载挂载点(默认)

user 允许除了root的普通用户可以卸载挂载点 选项隐含了 noexec, nosuid, nodev 选项,除非你特意进行了修改(比如:users,exec,dev,suid

users 允许任意用户可以卸载挂载点

# 配置 user参数,普通用户无法卸载??
[xuan @web01 ~ ]$ tail -1 /etc/fstab 
172.16.1.31:/date	/mnt/nfs	nfs 	auto,user	0	0

[xuan @web01 ~ ]$ umount /mnt/nfs 
umount: /mnt/nfs: umount failed: Operation not permitted

# 配置 users参数,可以实现普通用户卸载
[xuan @web01 ~ ]$ tail -1 /etc/fstab 
172.16.1.31:/date	/mnt/nfs	nfs 	auto,users	0	0

[xuan @web01 ~ ]$ umount /mnt/nfs 
	说明:配置参数users配合aotu实现普通用户卸载共享目录挂载

客户端如何卸载

umount -lf /mnt/nfs 表示:强制卸载挂载点

参数说明:

umount -l 表示不退出挂载点目录进行卸载

umount -f 表示强制进行卸载