跳到主要内容

第8章 NFS共享存储

第1章 NFS介绍

1.什么是共享存储

 一句话说就是多台服务器的数据保存在同一个存储服务器上。这样无论用户请求在哪一台服务器上看到的数据都是一样的。

2.什么是NFS

NFS Network File System 网络文件系统。
NFS 主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录
NFS 系统和 Windows 网络共享、网络驱动器类似, 只不过 windows用于局域网, NF 用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统 glusterfs,Ceph等

3.NFS应用场景

多台web服务器的图片和视频数据都保存在NFS服务器上

多台服务器的备份数据都保存在NFS服务器上

4.NFS通讯原理

1.服务端启动后将自己的端口信息注册到rpcbind

2.NFS客户端通过TCP/IP的方式连接NFS服务端的rpcbind并获得真实的端口信息

3.NFS客户端获得真实的端口后,将自己需要的操作函数通过网络发送给NFS服务端对应的端口

4.NFS服务端接收到请求后,由rpc.nfsd进程判断NFS客户端是否拥有连接权限

5.NFS服务端的rpc.mount进程判断客户端是否有对应的操作权限

6.最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件

注意: rpc 是一个远程过程调用,那么使用 nfs 必须有 rpc 服务

1715160844269-cc3b300f-db41-4e9a-9562-b657652274db.png

第2章 NFS服务端配置

1.安装软件

 yum install nfs-utils -y

2.修改配置文件

配置文件格式:

举例:
/data 172.16.1.0/24(rw,sync,all_squash)

解释:
NFS共享目录路径 允许NFS客户端访问的IP地址(挂载参数)

注意:
访问地址和参数之间没有空格

配置文件解释:

执行 man exports 命令,然后切换到文件结尾,可以快速查看如下样例格式:
rw #读写权限
ro #只读权限
root_squash #当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用)
no_root_squash #当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)
all_squash #无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)
no_all_squash #无论NFS客户端使用什么账户访问,都不进行压缩
sync #同时将数据写入到内存与硬盘中,保证不丢失数据
async #优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
anonuid #配置all_squash使用,指定NFS的用户UID,必须存在系统
anongid #配置all_squash使用,指定NFS的用户GID,必须存在系统

配置命令:

cat > /etc/exports <<EOF
/data 172.16.1.0/24(rw,sync,all_squash)
EOF

3.创建www用户

useradd -u 1000 -M -s /sbin/nologin www

4.创建数据目录并授权

mkdir /data -p
chown -R www:www /data/

5.启动NFS服务

systemctl start nfs-server.service

6.检查服务状态

showmount -e 172.16.1.31

7.添加开机自启动

systemctl enable rpcbind nfs-server

第3章 NFS客户端配置

1.安装软件

yum install nfs-utils -y

2.通讯测试

showmount -e 172.16.1.31

3.挂载测试

mkdir /data -p
mount -t nfs 172.16.1.31:/data /data
df -h
echo "oldzhang" > /data/oldzhang.txt
cat /data/oldzhang.txt

4.配置开机自动挂载

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

mount -a
df -h

5.卸载测试

umount /data/

第5章 NFS权限实验

1.权限实验:root_squash

NFS服务端配置:

第一步:创建data目录并更改权限

mkdir /data
chown -R nfsnobody:nfsnobody /data/

第二步:编写配置文件

cat > /etc/exports << 'EOF'
/data 10.0.0.0/24(rw,root_squash,sync)
EOF

第三步:启动NFS服务端

systemctl start nfs
systemctl status nfs

第四步:检查

[root@nfs-31 ~]# showmount -e 10.0.0.31
Export list for 10.0.0.31:
/data 10.0.0.0/24

NFS客户端配置:

第一步:安装NFS

yum install nfs-utils -y

第二步:创建数据目录

mkdir /data

第三步:挂载NFS服务端的数据目录

mount -t nfs 10.0.0.31:/data /data

第四步:检查挂载情况

[root@web-7 ~]# df -h|grep data
10.0.0.31:/data 37G 1.6G 36G 5% /data

第五步:写入测试

2.权限实验:all_squash

NFS服务端和NFS客户端的用户UID和GID统一:

Nginx --> www 1000
NFS Server --> www 1000
NFS Client --> www 1000

NFS服务端配置:

第一步:创建www用户并更改用户

groupadd www -g 1000
useradd www -u 1000 -g 1000 -M -s /sbin/nologin
chown -R www:www /data

第二步:修改配置文件

cat > /etc/exports << 'EOF'
/data 10.0.0.0/24(rw,all_squash,sync,anonuid=1000,anongid=1000)
EOF

第三步:重启服务

systemctl restart nfs

第四步:检查

showmount -e 10.0.0.31

NFS客户端配置:

第零步:卸载已经挂载的目录

umount /data

第一步:创建www用户并更改用户

groupadd www -g 1000
useradd www -u 1000 -g 1000 -M -s /sbin/nologin
chown -R www:www /data

第二步:挂载

mount -t nfs 10.0.0.31:/data /data

第三步:写入测试

cd /data
touch web7.txt
ll

第四步:写入开机自启动挂载

[root@web-7 ~]# cat /etc/fstab|grep nfs
10.0.0.31:/data /data nfs defaults 0 0
[root@web-7 ~]# mount -a
[root@web-7 ~]# df -h|grep data
10.0.0.31:/data 37G 1.6G 36G 5% /data

3.权限实验:多个目录不同权限实验

NFS服务端配置:

mkdir /data
mkdir /data1
mkdir /data2
chown -R www:www /data*
cat > /etc/exports << 'EOF'
/data 10.0.0.0/24(rw,all_squash,sync,anonuid=1000,anongid=1000)
/data1 10.0.0.7/32(rw,all_squash,sync,anonuid=1000,anongid=1000)
/data2 10.0.0.7/32(ro,all_squash,sync,anonuid=1000,anongid=1000)
/data1 10.0.0.8/32(ro,all_squash,sync,anonuid=1000,anongid=1000)
/data2 10.0.0.8/32(rw,all_squash,sync,anonuid=1000,anongid=1000)
EOF
systemctl restart nfs
showmount -e 10.0.0.31

客户端配置:

web-7和web-8服务器相同的操作:

mkdir /data
mkdir /data1
mkdir /data2
mount -t nfs 10.0.0.31:/data /data
mount -t nfs 10.0.0.31:/data1 /data1
mount -t nfs 10.0.0.31:/data2 /data2

第6章 NFS故障案例

1.NFS服务故障导致目录卡住

故障现象:

如果NFS客户端挂载期间,NFS服务端服务停止了服务,会导致客户端与目录或文件相关的操作卡住。

问题解决:

第一种方法:修复NFS服务端的服务,使其正常工作
第二种方法:强制卸载NFS挂载目录

2.NFS服务故障导致开机卡住

故障现象:

如果NFS客户端服务器设置了开机自动挂载,但是NFS客户端系统启动的时候NFS服务端并没有提供服务,就会导致开机自检的时候卡在挂载那一步,至少会卡住1分30秒。

问题解决:

第一种方法:修复NFS服务端的服务,使其正常工作
第二种方法:进入单用户模式,注释掉/etc/fstab里的挂载信息,然后重新启动系统

3.防火墙阻挡

查看nfs端口:

rpcinfo -p

firewall防火墙配置:

firewall-cmd --add-service=nfs --permanent
firewall-cmd --add-service=mountd --permanent
firewall-cmd --add-service=rpc-bind --permanent
firewall-cmd --reload

iptables防火墙配置:

#1.启动NFS会开启如下端口:
portmapper 端口:111 udp/tcp;
nfs/nfs_acl 端口:2049 udp/tcp;
mountd 端口:"32768--65535" udp/tcp
nlockmgr 端口:"32768--65535" udp/tcp
系统 RPC服务在 nfs服务启动时默认会给 mountd 和 nlockmgr 动态选取一个随机端口来进行通讯。

#2.查看nfs端口
rpcinfo -p

#3.将随机的端口号设置固定:
[root@nfs-31 ~]# vim /etc/sysconfig/nfs
[root@nfs-31 ~]# tail -5 /etc/sysconfig/nfs
RQUOTAD_PORT=4001
LOCKD_TCPPORT=4002
LOCKD_UDPPORT=4002
MOUNTD_PORT=4003
STATD_PORT=4004

#4.重启nfs和rpc服务
systemctl restart rpcbind.service nfs-server.service

#5.再次查看端口信息,发现端口号已经固定了
rpcinfo -p

#6.设置iptables
iptables -A INPUT -p tcp -m tcp --dport 111 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 111 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 2049 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 4001:4004 -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 4001:4004 -j ACCEPT

#7.最后别忘记保存配置了

第8章.NFS小结

1.NFS 存储优点

NFS 文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。
NFS 文件系统内存放的数据都在文件系统之上,所有数据都是能看得见

2.NFS 存储局限

存在单点故障, 如果构建高可用维护麻烦 web->nfs()->backup
NFS 数据明文, 并不对数据做任何校验。
客户端挂载 NFS 服务没有密码验证, 安全性一般(内网使用)

更新: 2024-11-23 09:13:42