NFS服务部署

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

1.NFS储存服务

1.1 概念说明

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

NFS客户端(-般为应用服务器,例如web)可以通过挂载(mount) 的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录- -样,而实际上却是远端的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 企业应用较

1.2 NFS储存服务作用

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

2、便有数据操作管理

3、节省服务器磁盘使用开销

2.NFS储存服务部署

2.1 RPC管理说明

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

nfs服务启动流程:

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

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

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

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

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

2.2 NFS服务-rpc管理流程

. 因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号port、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端口。也就是说,NFS需要有RPC服务的协助才能成功对外提供服务。

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

3. NFS服务工作原理

服务端工作原理

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

第二步:启动NFS服务

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

客户端工作原理

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

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

第三步:实现数据远程存储共享目录

补充:查看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)

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 异步方式存储数据 直接将数据保存到内存(提高数据存储效率)

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

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

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

​ no_all_squash 不要将普通用户身份进行转换(默认参数)

操作演示一: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参数

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

配置参数一: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

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 重启服务,先会把没有数据传输连接断开,再等待数据传输完毕之后断开连接

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 表示强制进行卸载

posted @ 2020-09-15 12:12  余生请你指教  阅读(1244)  评论(2编辑  收藏  举报