码迷,mamicode.com
首页 > 其他好文 > 详细

NFS存储服务(下)

时间:2018-01-28 18:18:45      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:defaults   syn   man   tin   配置   优化参数   存储设备   use   时间戳   

第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 65534nfsnobody用户(确保所有客户端的访问权限统一,否则每个机器需要同时建立相同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    0dump  0fsck

需要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 rsizewsize的作用

rsize      ---设定数据读取到内存中,内存中预留空间大小

wsize      ---设定数据存储到内存中,内存中预留空间大小

设置大一点,提升NFS传输的能力(设置的值为2的倍数,centos6默认为130721)

类似于缓存区,会影响客户端和服务端缓存数据的存储量,最大传输速率越快,根据网络传输带宽决定大小,不要超过带宽

技术分享图片 

3.4.6  suid的作用

让普通用户执行命令时相当于root用户,一般用于脚本(默认值)

  如目录和目录下的文件都是suid,root和普通用户都可以访问,其他的情况普通用户都不能访问。

技术分享图片              

3.4.7 execnoexec的作用

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

3.4.8 usernouser的作用

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

3.4.9  autonoauto的作用

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

3.4.10 atime noatimenodiratime的作用

每次访问数据时,会同步更新访问文件的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 noatimenodiratime,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或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器数量再多也是扛不住压力的,而且用户体验会很差。


NFS存储服务(下)

标签:defaults   syn   man   tin   配置   优化参数   存储设备   use   时间戳   

原文地址:http://blog.51cto.com/12805107/2066035

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!