- NFS用户映射4种squash在架构中的选择
- 存储服务配置参数
- nfs挂载常见问题
- NFS服务相关重要文件命令总结
- 挂载参数说明
第一部分 NFS4种squash
image
1.1NFS存储服务用户映射原理图
客户端映射原理图
1.2 NFS用户映射的练习
服务端:
/data/w 可读可写权限,所有用户都做映射, 采用同步传输数据
/data/r 只能读取数据,只有root用户组映射,采用异步传输数据
客户端:
backup /data/w --挂载点 /data/w 可以存储数据
web01 /data/r --挂载点 /data/r 不能存储数据
解题步骤
服务端:
第一个历程:编写配置文件
vi /etc/exports
/data/w 172.16.1.0/24(rw,sync,all_squash)
/data/r 172.16.1.0/24(ro,async,root_squash)
第二个历程:创建共享存储目录
mkdir /data/{r,w}
chown nfsnobody. /data/{r,w}
第三个历程:重启存储服务
systemctl reload nfs
###########################
客户端:
第一个历程:创建挂载点目录
mkdir /data/{r,w}
第二个历程:进行挂载
backup
mount -t nfs 172.16.1.31:/data/w /data/w
web01
mount -t nfs 172.16.1.31:/data/r /data/r
1.3 NFS服务影响存储权限原因
1. 服务端配置文件参数 ro/rw
2. 服务端本身目录权限(如果是多级目录,要看上一级目录的权限)
3. 服务端共享目录权限存在继承关系
PS:建议设置共享目录时,不要存在父级与子级关系
4. 客户端挂载参数是否为 ro
5.千万不要将配置文件格式进行对齐。注意格式问题。
exportes配置文件的父级与子集
image
第二部分 nfs挂载常见问题
异常问题一:
ls: cannot open directory .: Stale file handle (文件句柄错误)
出现原因: 当父级和子级目录同时进行挂载时,一旦父级目录取消共享,但是客户端还是处于挂载状态 挂载也会显示异常 看不到
问题解决: 将和父级目录有关的所有挂载点全部卸载,重新挂载
异常问题二:
Cannot register service: RPC: Unable to receive;
出现原因: 服务启动顺序不正确 先启动rpcbind
问题解决: 关闭所有服务,按顺序进行启动
centos 6 会出现这样问题
异常问题三:
出现挂载卡死情况
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
出现原因: 服务端开启防火墙,阻止客户端访问
问题解决: 关闭防火墙
异常问题四:
服务端采用restart情况,会有一个90s延迟;造成客户端挂载好共享目录,90s内无法存储数据
出现原因:
cat /etc/sysconfig/nfs|grep 90
#NFSD_V4_GRACE=90
#NFSD_V4_LEASE=90
异常问题五:
客户端未安装nfs-utils
第三部分 nfs存储排错原理
01. 检查服务端服务是否启动
02. 检查nfs服务是否向rpc服务注册
[root@nfs01 ~]# rpcinfo -p localhost nfs并未向rpcbind注册情况
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
[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
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 60318 nlockmgr
100021 3 udp 60318 nlockmgr
100021 4 udp 60318 nlockmgr
100021 1 tcp 32828 nlockmgr
100021 3 tcp 32828 nlockmgr
100021 4 tcp 32828 nlockmgr
03. 检查nfs服务是否存在可以共享目录
showmount -e 172.16.1.31
[root@backup ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31: 没有共享目录
/data 172.16.1.0/24 有共享目录
第四部分 NFS服务相关重要文件命令总结
/etc/exports
/var/lib/nfs/etab --- 记录nfs服务默认配置参数信息(不能修改)
rpcinfo -p 172.16.1.31
showmount -e 172.16.1.31
/usr/sbin/exportfs --- 可以平滑重启nfs服务,可以临时设置共享存储目录
平滑重启服务:exportfs -rv
临时创建目录:exportfs -o rw,sync 192.168.232.0/24:/data01
第五部分 NFS服务客户端操作介绍
NFS服务客户端操作介绍
如何进行挂载:
mount -t nfs 172.16.1.31:/data /mnt
实现开机自动挂载:
方法一:编写/etc/rc.local
mount -t nfs 172.16.1.31:/data /mnt
方法二:编写/etc/fstab文件
172.16.1.31:/data /mnt nfs defaults 0 0
centos6
启动系统 -- 加载fstab(本地) -- 启动network网络服务 -- netfs (在系统启动完毕之后,再次加载fstab)
centos7
启动系统 -- 加载fstab(本地) -- 启动network网络服务 -- remote-fs.target(在系统启动完毕之后,再次加载fstab)
启动nfs服务客户端很慢:
出现原因:在客户端上配置自动nfs服务挂载,有时候服务端的存储目录会出现问题,所以客户端会一直挂载。
--- 耦合度太高(服务器和服务器的关系太过于紧密了)
解决问题:取消自动挂载
启动顺序 先开启后端服务 nfs mysql backup 缓存服务 在开启前端服务 web服务 负载均衡服务
挂载参数说明
defaults:
rw, suid(setuid), dev, exec, auto(mount -a), nouser, and async(异步存储)
noatime
访问文件时不更新文件的inode时间戳,高并发环境下,推荐显示应用该选项,可以提高系统I/O性能。性能优化
? nodiratime
不更新文件系统上的directory inode时间戳,高并发环境,推荐显式应用该选项,可以提高系统I/O性能。性能优化
remount
在不进行卸载挂载点时,直接重新挂载修改挂载参数
文件系统只读,mount -o remount,rw /
rsize=262144 用户 (读取) --- web01 /data 2M --- nfs /data 10M 压力大
web设置一个缓存区 262144字节 设置大小和内存有关 把用户上次读过的数据存在缓存区
wsize=262144 用户(存储) --- web01 /data 10M --- nfs存储服务器压力大 /data 10M
在客户端设置一个缓冲区 262144字节
hard(了解) --- 当服务端处于关闭状态,客户端会处于一直挂载 不是好的状态,会造成网站的耦合度过高。
soft(了解) --- 当服务端处于关闭状态,不会一直挂载
proto=tcp(了解 ) --- 挂载协议
客户端重要文件:/proc/mounts --- 查看到mount挂载命令默认参数信息
进行卸载:umount -lf
第六部分 NFS存储服务的优缺点
优点:配置 安装简单
缺点:没有认证功能 分布式存储/ftp/samba
无法支持高并发存储 日PV 2000万
无法实现高可用 分布式存储/keepalived