NFS存储服务概念介绍

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

NFS存储服务作用

1、实现数据的共享存储

2、便于数据操作管理

3、节省购买服务器磁盘开销

NFS服务部署流程

服务端部署

第一个历程:下载安装软件

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

第二个历程:编写nfs服务配置文件 /etc/exports

man exports

vim /etc/exports

格式:01 02(03)

01:设置数据存储的目录 /data

02:设置网络一个白名单(允许哪些主机连接到存储服务器进行数据存储)

03:配置存储目录的权限信息 存储目录一些功能

/data 172.16.1.0/24(rw,sync)(实现多个网段挂载以空格分隔)

第三个历程:创建一个存储目录,修改目录属主属组信息

mkdir /data 
chown nfsnobody.nfsnobody /data

第四个历程:启动服务程序(先启动rpc,后启动nfs)

先启动 rpc服务

systemctl start rpcbind.service 
systemctl enable rpcbind.service
systemctl status rpcbind.service/netstat -lntup|grep 111

再启动 nfs服务

systemctl start nfs 
systemctl enable nfs
systemctl status nfs(端口被隐藏无法直接查看,可通过rpc查看)

客户端部署

第一个历程:安装nfs服务软件

yum install -y nfs.utils

第二个历程:实现远程挂载共享目录

mount -t nfs 172.16.1.31:/data /mnt

-t:type(后面跟文件系统类型)

远程挂载主机IP:存储目录

/mnt(本地挂载点)

NFS服务工作原理:

服务端步骤:

1. 启动RPC服务,开启111端口

2. 启动nfs服务

3. 实现nfs服务进程和端口号的注册

补充:检查nfs服务进程与端口注册信息

没有注册时候:

[root@nfs01 ~]# 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

nfs服务注册之后信息:


[root@nfs01 ~]# 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
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100024 1 udp 35258 status
100024 1 tcp 51892 status
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 35567 nlockmgr
100021 3 udp 35567 nlockmgr
100021 4 udp 35567 nlockmgr
100021 1 tcp 46662 nlockmgr
100021 3 tcp 46662 nlockmgr
100021 4 tcp 46662 nlockmgr

客户端步骤:

1. 建立TCP网络连接

2. 客户端执行挂载命令,进行远程挂载(需要先安装nfs.utils)

3. 可以实现数据远程传输存储


nfs服务端详细配置说明

实现多个网段主机可以进行挂载

第一种方法:

/data    172.16.1.0/24(rw,sync) 10.0.0.0/24(rw,sync)

第二种方法:

/data    172.16.1.0/24(rw,sync) 
/data 10.0.0.0/24(rw,sync)

总结:共享目录的权限和哪些因素有关:

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

2)和配置文件/etc/exports中的权限配置有关(ro为只读)rw/ro xxx_squash anonuid/anongid

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

NFS配置参数权限

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

ro -- 存储目录是否有只读权限

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

async -- 异步方式存储数据(直接将数据保存到内存(提高数据存储效率))

企业案例:秒杀活动使用异步方式存储数据

将用户信息先存入缓存服务器通过队列服务进行排序

活动结束后再将数据按排序顺序存入数据库服务器

no_root_squash -- 不要将root用户身份进行转换

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

all_squash -- 将所有用户身份都进行转换

no_all_squash -- 不要将普通用户身份进行转换


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

保证网站存储服务器用户数据安全性:

no_all_squash 需要进行配置 共享目录权限改为www(确保客户端用户 服务端用户 uid数值一致)

root_squash 需要进行配置 root---nfsnobody data目录---www

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

如何查看nfs默认配置

cat /var/lib/nfs/etab --- 记录nfs服务的默认配置记录信息(只是记录文件) 
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,
no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,
secure,root_squash,all_squash)

如何让root用户可以操作管理www用户管理的data目录

root --- root_squash --- www --- 操作 --- data目录

anonuid=65534,anongid=65534 --- 可以指定映射的用户信息


修改映射用户:www=1002

/data 172.16.1.0/24(rw,sync,anonuid=1002,anongid=1002)


企业中如何编写nfs配置文件

01. 通用方法

/data 172.16.1.0/24(rw,sync)

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

/data 10.0.0.0/24(ro,sync)

03. 修改默认的匿名用户

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


NFS服务重启,挂载后创建数据慢的原因

服务器重启方式不正确

服务重启:

01. restart 重启服务 强制断开所有连接 用户感受不好

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


如何实现自动挂载

01. 利用rc.local

echo "mount -t nfs 172.16.1.31:/data  /mnt" >>/etc/rc.local

02. 利用fstab文件

vim /etc/fstab 
172.16.1.31:/data /mnt nfs defaults 0 0

特殊的服务remote-fs.target已经开启了

需求问题:如何找到一台服务器开机运行了哪些服务

ll /etc/systemd/system/multi-user.target.wants/

客户端mount命令参数

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

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

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

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

exec --- 共享目录中的执行文件可以直接执行

noexec --- 共享目录中的执行文件无法直接执行 提高共享目录的安全性

auto --- 可以实现自动挂载 mount -a 实现加载fstab文件自动挂载

noauto --- 不可以实现自动挂载

nouser --- 禁止普通用户可以卸载挂载点

users --- 允许普通用户可以卸载挂载点


客户端如何卸载

umount -lf /mnt --- 强制卸载挂载点

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

-f 强制进行卸载操作