第1章 NFS介绍
1.什么是共享存储
一句话说就是多台服务器的数据保存在同一个存储服务器上。这样无论用户请求在哪一台服务器上看到的数据都是一样的
2.什么是NFS
NFS Network File System 网络文件系统。
NFS 主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录
NFS 系统和 Windows 网络共享、网络驱动器类似, 只不过 windows用于局域网, NF 用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统 glusterfs,Ceph等
3.NFS应用场景
1.多台web服务器的图片和视频数据都保存在NFS服务器上
2.多台服务器的备份数据都保存在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 服务
第2章 NFS服务端配置
1.安装软件
yum install nfs-utils -y
2.修改配置文件
配置文件格式:
举例:
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
共享目录 允许客户端访问的IP(共享参数)解释:
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,anonuid=1000,anongid=1000)
EOF
3.创建www用户
groupadd www -g 1000
useradd www -u 1000 -M -s /sbin/nologin
4.创建数据目录并授权
mkdir /data -p
chown -R www:www /data/
5.启动NFS服务
systemctl start nfs
systemctl status nfs rpcbind
6.检查服务状态
[root@nfs-31 /]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
7.添加开机自启动
[root@nfs-31 /]# systemctl enable nfs
第3章 NFS客户端配置
1.安装软件
yum install nfs-utils -y
2.通讯测试
[root@web-7 ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
3.挂载测试
[root@web-7 /]# mkdir -p /data
[root@web-7 /]# mount -t nfs 172.16.1.31:/data/ /data/
[root@web-7 /]# df -h|grep data
172.16.1.31:/data 37G 1.5G 36G 5% /data
4.配置开机自动挂载
cat >> /etc/fstab << 'EOF'
172.16.1.31:/data /data nfs defaults 0 0
EOF
[root@web-7 /]# mount -a
[root@web-7 /]# df -h|grep data
172.16.1.31:/data 37G 1.5G 36G 5% /data
5.卸载测试
[root@web-7 ~]# umount /data
[root@web-7 ~]# df -h|grep data
第4章 NFS权限参数测试
1.验证ro权限
服务端配置:
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
客户端挂载:
mount -t nfs 172.16.1.31:/data /data
df -h|grep data
测试读取:
cat /data/123.txt
测试写入:
echo "backup" > /data/123.txt
2.验证all_squash,anonuid,anongid权限
服务端配置:
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
服务端创建用户及授权:
useradd www -u 1000 -g 1000 -M -s /sbin/nologin
重启NFS服务:
systemctl restart nfs
更改目录授权:
chown -R www:www /data/
客户端操作:
mount -t nfs 172.16.1.31:/data /data
ll -d /data/
ll -d /data/
echo "123" > /data/123.txt
cat /data/123.txt
第5章 NFS项目实战
1.项目需求
2.通讯测试
3.挂载测试
4.卸载测试
第6章 NFS故障案例
1.NFS服务故障导致目录卡住
故障现象:
如果NFS客户端挂载期间,NFS服务端服务停止了服务,会导致客户端与目录或文件相关的操作卡住。
问题解决:
第一种方法:修复NFS服务端的服务,使其正常工作 systemctl start nfs
第二种方法:强制卸载NFS挂载目录 umount -f /data
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.最后别忘记保存配置了
第7章.NFS小结
1.NFS 存储优点
1.NFS 文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。
2.NFS 文件系统内存放的数据都在文件系统之上,所有数据都是能看得见
2.NFS 存储局限
1.存在单点故障, 如果构建高可用维护麻烦 web->nfs()->backup
2.NFS 数据明文, 并不对数据做任何校验。
3.客户端挂载 NFS 服务没有密码验证, 安全性一般(内网使用)
3.NFS 应用建议
1.生产场景应将静态数据尽可能往前端推, 减少后端存储压力
2.必须将存储里的静态资源通过 CDN 缓存 jpg\png\mp4\avi\css\js
3.如果没有缓存或架构本身历史遗留问题太大, 在多存储也无用
版权归原作者 yanglilinux 所有, 如有侵权,请联系我们删除。