标签:defaults syn man tin 配置 优化参数 存储设备 use 时间戳
网络文件系统,实现数据共享统一一致
1. 什么是rpc服务
rpc服务类似于中介,nfs服务将启动的进程和端口信息,向rpc服务进行注册
nfs客户端向rpc服务发出请求,进行共享目录挂载,从而实现通过网络存储数据信息
2. 服务端做了三件事:
①. 首先启动rpc服务
②. 其次启动nfs服务
③. nfs服务向rpc服务进行注册,只注册一次(如果nfs服务进行了重启,会再次注册)
3. 客户端做了三件事:
①. 启动rpc服务(可以不用启动)
②. 利用tcp协议,与nfs服务端rpc服务(111端口)建立网络连接
③. 利用mount命令进行网络存储设备挂载
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. 配置共享目录信息
2. 设置允许网络共享目录的主机或网络信息
3. 设置共享目录权限和相关参数
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配置的参数以及默认自带的参数
服务端上面要求:
nfs服务器172.16.1.31,共享下面两个目录:
/data/w 要求的权限可读写,同步数据,所有用户都压缩为匿名用户
/data/r 要求的权限为只读,同步数据,所有用户都压缩为匿名用户
客户端上面要求:
backup服务器 把NFS服务器的/data/r 挂载到/data/r
web01服务器 把NFS服务器的/data/w 挂载到/data/w
第一个里程:编写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
第一个里程:确认是否安装好了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服务端配置共享目录时,会遵循目录的继承条件
当上一级共享目录为读写时,下一级共享目录就算为只读模式,也会继承上一级目录的权限
ls: cannot open directory .: Stale file handle
提示文件句柄错误:
客户端原有挂载的共享目录,在服务端已经取消共享了,但客户端并没有进行卸载
在nfs客户端,将不存在共享目录进行卸载
如果通过df -h命令无法查询到不存在的共享目录的挂载点信息,可以通过一个特殊文件获取
nfs客户端查看文件:cat /proc/mounts ---nfs客户端挂载默认配置记录文件
nfs服务端查看文件:cat /var/lib/nfs/etab ---nfs服务端默认配置记录文件
客户端挂载报错“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 |
NFS服务端没有共享目录/data。
在NFS服务端,创建即可。
[root@nfs-client1 ~]# showmount -e 10.0.0.7
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
nfs服务端防火墙开启了,阻止了连接rpc 111端口的请求
将nfs服务端防火墙服务关闭,或者配置允许用户主机访问111端口策略
[root@nfs-client1 ~]# showmount -e 10.0.0.7
clnt_create: RPC: Program not registered
01. nfs服务先启动了,rpcbind服务后启动了
02. nfs服务停止了
说明:rpc服务中没有nfs服务注册的信息了
重新先启动rpcbind服务,在启动nfs服务
卸载挂载设备时显示device is busy
[root@nfs-client mnt]# umount /mnt umount.nfs: /mnt: device is busy umount.nfs: /mnt: device is busy |
01. 可能nfs客户端挂载和nfs服务端共享目录有网络数据传输
02. 你所处的目录路径,就是在挂载点之中
umount -lf /data/r
-l Lazy unmount --- 懒惰卸载
-f Force unmount --- 表示强制卸载
共享目录挂载很卡
当nfs服务端服务进行重启的时候(不是平滑重启),nfs服务会进入一个90s无敌时间
nfs服务重启就好比发出一个大招, 要有90秒冷却时间
在系统配置中/etc/sysconfig/nfs中指定了无敌时间的配置参数
NFSD_V4_GRACE=90
NFSD_V4_LEASE=90
NLM_GRACE_PERI0D=90
rpcinfo -p 172.16.1.31
showmount -e 172.16.1.31
本地挂载测试:mount -t nfs 172.16.1.31:/data /mnt (挂载成功,进入mnt目录创建文件 删除文件测试一下)
rpcinfo -p 172.16.1.31
showmount -e 172.16.1.31
网络挂载测试:mount -t nfs 172.16.1.31:/data /mnt (挂载成功,进入mnt目录创建文件 删除文件测试一下)
当多个NFS客户端访问服务器端的读写文件时,需要具有以下几个权限:
① NFS服务器/etc/exports设置需要开放可写入的权限,即服务器端的共享权限。
② NFS服务器实际要共享的NFS目录权限具有可写入w的权限,即服务器端本地目录的安全权限。
③ 每台机器对应存在和NFS默认配置UID的相同UID 65534的nfsnobody用户(确保所有客户端的访问权限统一,否则每个机器需要同时建立相同UID的用户,并覆盖NFS的默认用户配置)
1)与服务端配置文件中权限参数设置有关
2)本地共享目录本身权限有关
3)与客户端挂载参数有关
/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 |
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 |
echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
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表示最后加载这个配置文件 |
01. 共享目录权限和配置文件中权限参数设置有关
02. 共享目录权限和目录本身权限有关
03. 共享目录权限和客户端挂载参数有关
cat /proc/mounts
mount -t nfs -o fg 172.16.1.31:/data /mnt --- 前台挂载(默认)
mount -t nfs -o bg 172.16.1.31:/data /mnt --- 后台挂载
soft 软挂载 :一直尝试挂载,超时后退出(timeout后有可能丢失数据,不推荐使用)
hard 硬挂载:一直尝试挂载,不停止(一般配合intr参数使用),默认为head
hard+intr =soft软挂载
rsize ---设定数据读取到内存中,内存中预留空间大小
wsize ---设定数据存储到内存中,内存中预留空间大小
设置大一点,提升NFS传输的能力(设置的值为2的倍数,centos6默认为130721)
类似于缓存区,会影响客户端和服务端缓存数据的存储量,最大传输速率越快,根据网络传输带宽决定大小,不要超过带宽
让普通用户执行命令时相当于root用户,一般用于脚本(默认值)
如目录和目录下的文件都是suid,root和普通用户都可以访问,其他的情况普通用户都不能访问。
相当于x权限,如果是noexec,用户则没有执行权限
是否允许普通用户挂载或卸载文件系统(默认不允许,root才行)
执行mount -a 时,是否自动挂载(默认为auto)
每次访问数据时,会同步更新访问文件的Inode时间戳。
高并发环境使用noatime,nodiratime,提升系统I/O性能
重新挂载,针对于已经挂载的设备或目录
例:mount -t nfs -o remount,ro 172.16.1.31:/data /mnt
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
1. 简单,易操作
2. NFS内的数据是在文件系统之上的,可以看得见的。
3. 部署方便,可控制,配置文件一条命令即可搞定,
4. 可靠性高
5. 服务非常稳定
1. 存在单点故障(NFS服务器宕机了,其他用户都不能访问了)
2. 不适用于高并发(2千万以上访问量)
3. 没有认证(基于IP和主机名),安全性低
4. NFS数据是明文的(一般内网通信)
5. 其他与架构有关,比如客户端与服务端的耦合性(实时同步可解耦)
应用建议:
对于大中小网站(参考点2000万/日 PV以下)线上应用,都有用武之地,门户网站也会有应用,生产场景应用多将数据的访问往前推,即尽量将静态存储里的资源通过CDN或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器数量再多也是扛不住压力的,而且用户体验会很差。
标签:defaults syn man tin 配置 优化参数 存储设备 use 时间戳
原文地址:http://blog.51cto.com/12805107/2066035