您的位置:首页 > 其它

NFS存储服务(下)

2018-01-28 17:47 197 查看

第1章 回顾及练习

1.1 回顾总结

1.1.1 NFS存储服务是什么?

网络文件系统,实现数据共享统一一致

1.1.2 NFS工作原理

1. 什么是rpc服务
rpc服务类似于中介,nfs服务将启动的进程和端口信息,向rpc服务进行注册
nfs客户端向rpc服务发出请求,进行共享目录挂载,从而实现通过网络存储数据信息
2. 服务端做了三件事:
①. 首先启动rpc服务
②. 其次启动nfs服务
③. nfs服务向rpc服务进行注册,只注册一次(如果nfs服务进行了重启,会再次注册)
3. 客户端做了三件事:
①. 启动rpc服务(可以不用启动)
②. 利用tcp协议,与nfs服务端rpc服务(111端口)建立网络连接
③. 利用mount命令进行网络存储设备挂载

1.1.3 NFS服务部署流程

1. 服务端部署流程:
01. 检查服务软件是否正确安装,进行软件安装
02. 编写nfs配置文件
03. 创建共享存储目录,并进行授权
04. 启动nfs相关服务(先启动rpcbind服务 再启动nfs服务)
05. 检查服务启动情况
rpcinfo -p 172.16.1.31 ---检查nfs服务是否向rpc服务进行注册
showmount -e 172.16.1.31 ---检查nfs服务端是否有可以使用的共享目录
2. 客户端部署流程:01. 检查服务软件是否正确安装,进行软件安装
02. 检查服务启动情况
rpcinfo -p 172.16.1.31 ---检查nfs服务是否向rpc服务进行注册
showmount -e 172.16.1.31 ---检查nfs服务端是否有可以使用的共享目录
03. 进行网络挂载
mount -t nfs 172.16.1.31:/data /mnt

1.1.4 NFS配置文件编写说明

1. 配置共享目录信息
2. 设置允许网络共享目录的主机或网络信息
3. 设置共享目录权限和相关参数

1.1.5 配置文件中重要参数说明

rw ---共享目录权限为读写
ro ---共享目录权限为只读
sync ---将数据同步存储到硬盘中(经过内存之后存储到硬盘)
async ---将数据异步存储到内存中
root_squash ---root进行压缩映射
no_root_squash ---root用户不进行压缩映射
all_squash ---全部用户进行压缩映射
no_all_squash ---全部用户不进行压缩映射
anonuid ---修改默认映射用户信息,将默认nfsnobody映射用户变为指定用户
说明:实现用户灵活压缩映射的进程rpc.idmapped
为什么默认映射用户是nfsnobody?
[root@nfs01 ~]# cat /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash)
[root@nfs01 ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
[root@nfs01 ~]# cat /var/lib/nfs/etab ---etab文件为nfs默认配置记录文件
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,all_squash)
说明:在默认配置记录文件中,已经默认指明,默认映射用户为nfsnobody
知识点总结:
man exports查阅更多exports参数说明
配置好NFS服务后,通过cat /var/lib/nfs/etab命令可以看到NFS配置的参数以及默认自带的参数

1.2 测验连接nfs服务配置

1.2.1 要求:共享不同的两个目录,分别赋予读和写权限

服务端上面要求:
nfs服务器172.16.1.31,共享下面两个目录:
/data/w要求的权限可读写,同步数据,所有用户都压缩为匿名用户
/data/r要求的权限为只读,同步数据,所有用户都压缩为匿名用户
客户端上面要求:
backup服务器把NFS服务器的/data/r 挂载到/data/r
web01服务器把NFS服务器的/data/w 挂载到/data/w

1.2.2 服务端部署过程

第一个里程:编写nfs配置文件
vim /etc/exports
/data/w 172.16.1.0/24(rw,sync,all_squash)
/data/r 172.16.1.0/24(ro,sync,all_squash)
第二个里程:创建配置文件中指定的共享目录,并进行授权
mkdir /data/{w,r} -p
chown -R nfsnobody.nfsnobody /data/{w,r}
第三个里程:重启nfs服务(平滑重启)
/etc/init.d/nfs reload
第四个里程:检查是否生成新的共享目录信息
showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/r 172.16.1.0/24
/data/w 172.16.1.0/24

1.2.3 客户端部署过程:(web01 和backup两台客户机)

第一个里程:确认是否安装好了nfs服务相关软件
yum install -y nfs-utlis rpcbind
rpm -qa|grep -E "nfs-utils|rpcbind"
第二个里程:进行网络挂载
web01:
mkdir /data/w -p
mount -t nfs 172.16.1.31:/data/w /data/w

backup:
mkdir /data/r -p
mount -t nfs 172.16.1.31:/data/r /data/r
第三个里程:检查测试
web01:对共享目录有读写权限
backup:对共享目录只有只读权限
[root@backup r]# touch test.txt
touch: cannot touch `test.txt': Read-only file system
说明强调:在nfs服务端配置共享目录时,会遵循目录的继承条件
当上一级共享目录为读写时,下一级共享目录就算为只读模式,也会继承上一级目录的权限

第2章 NFS服务常见故障排查

2.1 【第一个常见错误】

2.1.1 【错误出现提示】

ls: cannot open directory .: Stale file handle
提示文件句柄错误:

2.1.2 【错误出现原因】

客户端原有挂载的共享目录,在服务端已经取消共享了,但客户端并没有进行卸载

2.1.3 【错误解决方法】

在nfs客户端,将不存在共享目录进行卸载
如果通过df -h命令无法查询到不存在的共享目录的挂载点信息,可以通过一个特殊文件获取
nfs客户端查看文件:cat /proc/mounts ---nfs客户端挂载默认配置记录文件
nfs服务端查看文件:cat /var/lib/nfs/etab ---nfs服务端默认配置记录文件

2.2 【第二个常见错误】

2.2.1 【错误出现提示】

客户端挂载报错“No such file or directory”
[root@backup ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@backup ~]# mount -t nfs 172.16.1.31:/data/ /mnt/
mount.nfs: mounting 172.16.1.31:/data/ failed, reason given by server: No such file or directory

2.2.2 【错误出现原因】

NFS服务端没有共享目录/data。

2.2.3 【错误解决方法】

在NFS服务端,创建即可。

2.3 【第三个常见错误】

2.3.1 【错误出现提示】

[root@nfs-client1 ~]# showmount -e 10.0.0.7
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

2.3.2 【错误出现原因】

nfs服务端防火墙开启了,阻止了连接rpc 111端口的请求

2.3.3 【错误解决方法】

将nfs服务端防火墙服务关闭,或者配置允许用户主机访问111端口策略

2.4 【第四个常见错误】

2.4.1 【错误出现提示】

[root@nfs-client1 ~]# showmount -e 10.0.0.7
clnt_create: RPC: Program not registered

2.4.2 【错误出现原因】

01. nfs服务先启动了,rpcbind服务后启动了
02. nfs服务停止了
说明:rpc服务中没有nfs服务注册的信息了

2.4.3 【错误解决方法】

重新先启动rpcbind服务,在启动nfs服务

2.5 【第五个常见错误】

2.5.1 【错误出现提示】

卸载挂载设备时显示device is busy
[root@nfs-client mnt]# umount /mnt
umount.nfs: /mnt: device is busy
umount.nfs: /mnt: device is busy

2.5.2 【错误出现原因】

01. 可能nfs客户端挂载和nfs服务端共享目录有网络数据传输
02. 你所处的目录路径,就是在挂载点之中

2.5.3 【错误解决方法】

umount -lf /data/r
-l Lazy unmount --- 懒惰卸载
-f Force unmount --- 表示强制卸载

2.6 【第六个常见错误】

2.6.1 【错误出现提示】

共享目录挂载很卡

2.6.2 【错误原因说明】

当nfs服务端服务进行重启的时候(不是平滑重启),nfs服务会进入一个90s无敌时间
nfs服务重启就好比发出一个大招, 要有90秒冷却时间
在系统配置中/etc/sysconfig/nfs中指定了无敌时间的配置参数
NFSD_V4_GRACE=90
NFSD_V4_LEASE=90
NLM_GRACE_PERI0D=90

2.7 NFS报错排查思路

2.7.1 排查nfs服务端是否存在问题

rpcinfo -p 172.16.1.31
showmount -e 172.16.1.31
本地挂载测试:mount -t nfs 172.16.1.31:/data /mnt (挂载成功,进入mnt目录创建文件 删除文件测试一下)

2.7.2 排查nfs客户端是否存在问题

rpcinfo -p 172.16.1.31
showmount -e 172.16.1.31
网络挂载测试:mount -t nfs 172.16.1.31:/data /mnt (挂载成功,进入mnt目录创建文件 删除文件测试一下)

第3章 NFS服务的重点知识梳理

3.1 权限相关

3.1.1 NFS客户端访问服务端的权限

当多个NFS客户端访问服务器端的读写文件时,需要具有以下几个权限:
① NFS服务器/etc/exports设置需要开放可写入的权限,即服务器端的共享权限。
② NFS服务器实际要共享的NFS目录权限具有可写入w的权限,即服务器端本地目录的安全权限。
③ 每台机器对应存在和NFS默认配置UID的相同UID 65534的nfsnobody用户(确保所有客户端的访问权限统一,否则每个机器需要同时建立相同UID的用户,并覆盖NFS的默认用户配置)

3.1.2 共享目录权限总结

1)与服务端配置文件中权限参数设置有关 2)本地共享目录本身权限有关 3)与客户端挂载参数有关

3.2 相关执行配置文件

/usr/sbin/exportfs ---可以管理nfs服务运行状态 可以配置共享目录
/usr/sbin/exportfs -r ---nfs服务平滑重启命令
/usr/sbin/exportfs -v #显示共享详细信息注:一般组合用/usr/sbin/expostfs -rv
[root@nfs01 ~]# /usr/sbin/exportfs -rv
exporting 172.16.1.0/24:/data/r
exporting 172.16.1.0/24:/data/w

3.2.1 扩展:exportfs

man exportfs
NAME
exportfs - maintain table of exported NFS file systems
用于管理当前的NFS共享的文件系统列表,exportfs -rv=/etc/init.d/nfs reload 加载配置生效;启动了NFS服务之后,如果修改了/etc/exports,就需要重新启动nfs,使修改的配置文件生效,就可以用exportfs命令完成。
[root@nfs01 ~]# exportfs -o rw,sync 172.16.1.0/24:/data < - 利用exportfs命令指定要共享的目 录,并指定共享给那些客户端地址
[root@nfs01 ~]# showmount -e 172.16.1.31 exportfs命令创建共享目录,是临时生效
Export list for 172.16.1.31:
/data 172.16.1.0/24
/data/r 172.16.1.0/24
/data/w 172.16.1.0/24



3.3 NFS客户端开机自启动挂载

3.3.1 利用/etc/rc.local文件实现自动挂载

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

3.3.2 利用/etc/fstab文件实现自动挂载

vim /etc/fstab
挂载什么 挂载到哪 类型 挂载参数 是否备份 是否检查磁盘
172.16.1.31:/data /mnt nfs defaults 0(dump) 0(fsck)
需要netfs服务的配合:chkconfig netfs on
说明:netfs服务作用:在网络服务启动之后,让系统重新读取加载/etc/fstab文件(因为默认情况 /etc/fstab会先启动,network服务会后启动,导致网络自动挂载不上,所以需要让netfs服务在network服务后启动一下)



查看命令的启动顺序:
[root@backup ~]# head /etc/init.d/netfs
# chkconfig: 345 25 75
# description: Mounts and unmounts all Network File System (NFS), \
[root@backup ~]# head /etc/init.d/network
# network Bring up/down networking
# chkconfig: 2345 10 90
[root@backup ~]# ll /etc/rc.d/rc3.d/|grep local ---网络服务启动后加载rc.local文件
lrwxrwxrwx. 1 root root 11 Dec 8 12:38 S99local -> ../rc.local
注:S99表示最后加载这个配置文件

3.4 NFS客户端挂载参数说明

3.4.1 共享目录权限总结:

01. 共享目录权限和配置文件中权限参数设置有关
02. 共享目录权限和目录本身权限有关
03. 共享目录权限和客户端挂载参数有关

3.4.2 查看客户端挂载历史记录与默认参数

cat /proc/mounts

3.4.3 客户端前台和后台挂载

mount -t nfs -o fg 172.16.1.31:/data /mnt --- 前台挂载(默认)
mount -t nfs -o bg 172.16.1.31:/data /mnt --- 后台挂载

3.4.4 软挂载和硬挂载

soft 软挂载 :一直尝试挂载,超时后退出(timeout后有可能丢失数据,不推荐使用)
hard 硬挂载:一直尝试挂载,不停止(一般配合intr参数使用),默认为head
hard+intr =soft软挂载

3.4.5 rsize和wsize的作用

rsize ---设定数据读取到内存中,内存中预留空间大小
wsize ---设定数据存储到内存中,内存中预留空间大小
设置大一点,提升NFS传输的能力(设置的值为2的倍数,centos6默认为130721)
类似于缓存区,会影响客户端和服务端缓存数据的存储量,最大传输速率越快,根据网络传输带宽决定大小,不要超过带宽



3.4.6 suid的作用

让普通用户执行命令时相当于root用户,一般用于脚本(默认值)
如目录和目录下的文件都是suid,root和普通用户都可以访问,其他的情况普通用户都不能访问。



3.4.7 exec和noexec的作用

相当于x权限,如果是noexec,用户则没有执行权限

3.4.8 user和nouser的作用

是否允许普通用户挂载或卸载文件系统(默认不允许,root才行)

3.4.9 auto和noauto的作用

执行mount -a 时,是否自动挂载(默认为auto)

3.4.10 atime 和noatime、nodiratime的作用

每次访问数据时,会同步更新访问文件的Inode时间戳。
高并发环境使用noatime,nodiratime,提升系统I/O性能

3.4.11 remount的作用

重新挂载,针对于已经挂载的设备或目录
例:mount -t nfs -o remount,ro 172.16.1.31:/data /mnt



3.5 NFS客户端优化挂载的参数

Centos6优化参数:
mount -t nfs -o noatime,nodiratime,nosuid,noexec,nodevp,rsize=131072,wsize=131072 172.16.1.31:/data /mnt
经过实际测试,默认参数性能也不错:mount -t nfs 172.16.1.31:/data /mnt

3.6 NFS系统应用的优点

1. 简单,易操作
2. NFS内的数据是在文件系统之上的,可以看得见的。
3. 部署方便,可控制,配置文件一条命令即可搞定,
4. 可靠性高
5. 服务非常稳定

3.7 NFS系统应用缺点

1. 存在单点故障(NFS服务器宕机了,其他用户都不能访问了)
2. 不适用于高并发(2千万以上访问量)
3. 没有认证(基于IP和主机名),安全性低
4. NFS数据是明文的(一般内网通信)
5. 其他与架构有关,比如客户端与服务端的耦合性(实时同步可解耦)
应用建议对于大中小网站(参考点2000万/日 PV以下)线上应用,都有用武之地,门户网站也会有应用,生产场景应用多将数据的访问往前推,即尽量将静态存储里的资源通过CDN或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器数量再多也是扛不住压力的,而且用户体验会很差。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息