zoukankan      html  css  js  c++  java
  • 【集群实战】NFS网络文件共享服务2-mount挂载(参数,优化)

    1. NFS客户端挂载深入

    1.1 NFS客户端挂载参数说明

    • 在NFS服务端,可以通过cat /var/lib/nfs/etab查看NFS服务器端配置参数的细节。
    • 在NFS客户端,可以通过cat /proc/mounts 查看mount的挂载参数细节。

    1.1.1 mount挂载及fstab文件说明

    通过查看/proc/mounts文件查看挂载参数:

    [root@web01-8 mnt]# grep "192.168.0.31" /proc/mounts 
    192.168.0.31:/data/ /mnt nfs4 rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.8,minorversion=0,local_lock=none,addr=192.168.0.31 0 0
    192.168.0.31:/oldboy/ /video nfs4 rw,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.8,minorversion=0,local_lock=none,addr=192.168.0.31 0 0

    1.1.2 NFS客户端挂载参数说明(mount挂载):

    如果考虑以简单、易用为原则,直接选择默认值即可:

    mount -t nfs 192.168.0.31:/data/ /mnt

    如果想要设置上述参数,则:

    mount -t nfs -o fg,hard,intr,rsize=131072,wsize=131072 192.168.0.31:/data/ /mnt

    参数说明: 

    • fg, bg
      • 默认参数 fg
      • 功能:
        • 当在客户端执行挂载时,可选择是前台(fg)还是在后台(bg)执行。
        • 若在前台执行,则mount会持续尝试挂载,直到成功或挂载时间超时为止;
        • 若在后台执行,则mount会在后台持续多次进行mount,而不会影响到前台的其它程序操作。
        • 如果网络联机不稳定,或是服务器常常需要开关机,建议使用bg比较妥当。
    • soft, hard
      • 默认参数:hard
      • 功能:
        • 当NFS 客户端以soft挂载NFS服务端时,若网络或Server出现问题,造成服务端和客户端之间无法传输资料,Client就会一直尝试,直到timeout后显示错误才停止
        • 若使用soft mount,可能会在timeout出现时造成资料丢失,不建议使用。
        • 若是hard模式挂载硬盘时,与soft相反,客户端会一直尝试连线到server,若服务端有回应则继续刚才的操作,若没有回应,客户端会一直尝试,此时无法umount或kill,所以常常配合intr使用。这是默认值
    • intr
      • 默认参数:无
      • 功能:
        • 当使用hard挂载的资源timeout后,若有指定intr参数,可以在timeout后把它中断掉,这避免出问题时系统整个被NFS锁死,建议使用intr
    • rsize, wsize
      • 默认参数:
        • CentOS 5: rsize=1024, wsize=1024
        • CentOS 6: rsize=131072, 维泽=131072
      • 功能:
        • rsize,即readsize,读出的区块大小
        • wsize,即writesize,写入的区块大小
        • 这个设置值可以影响客户端和服务器端传输数据的缓冲存储量
        • 如果在局域网内LAN,并且客户端和服务端都具有足够的内存,这个值可以设置大一点,如65535(bytes)
        • 提升缓冲区块将提升NFS文件系统的传输能力
        • 但设置的值不要太大,最好以网络能够传输的最大值为限
    • proto=udp
      • 默认参数:tcp
      • 功能:
        • proto=udp,使用UDP协议来传输资料,在LAN中会有比较好的性能
        • 默认使用tcp协议,跨越Internet,会有比较好的纠错能力

    可以通过man nfs查看上述参数信息。

    1.1.3 mount -o 参数对应的选项

    参数:

    • suid,nosuid
      • 默认值:suid
      • 说明:
        • 当挂载的文件系统上有任何SUID的程序时,只要使用nosuid就能够取消设置SUID的功能
        •  示例:

          # 在nfs服务端的/data目录下创建测试文件,设置suid
          [root@nfs-31 data]# touch test_file_for_suid
          [root@nfs-31 data]# ll test_file_for_suid 
          -rw-r--r-- 1 root root 0 Dec 10 21:44 test_file_for_suid
          [root@nfs-31 data]# chmod +s test_file_for_suid 
          [root@nfs-31 data]# ll test_file_for_suid 
          -rwSr-Sr-- 1 root root 0 Dec 10 21:44 test_file_for_suid
          [root@nfs-31 data]# stat test_file_for_suid 
            File: `test_file_for_suid'
            Size: 0               Blocks: 0          IO Block: 4096   regular empty file
          Device: 803h/2051d      Inode: 264647      Links: 1
          Access: (6644/-rwSr-Sr--)  Uid: (    0/    root)   Gid: (    0/    root)
          Access: 2019-12-10 21:44:24.393563215 +0800
          Modify: 2019-12-10 21:44:24.393563215 +0800
          Change: 2019-12-10 21:44:40.096563536 +0800
          
          # 在nfs客户端,强制卸载之前挂载好的文件系统
          [root@web01-8 mnt]# umount -fl /mnt
          
          # 重新挂载
          [root@web01-8 mnt]# mount -t nfs -o bg,hard,intr,rsize=131072,wsize=131072,nosuid 192.168.0.31:/data/ /mnt
          [root@web01-8 mnt]# grep mnt /proc/mounts
          192.168.0.31:/data/ /mnt nfs4 rw,nosuid,relatime,vers=4,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.0.8,minorversion=0,local_lock=none,addr=192.168.0.31 0 0
          
          # 在客户端上/mnt下查看文件的权限属性
          # 虽然文件上的suid位还是显示,甚至可以通过chmod进行设置,但是无法使用
          # 如:/bin/cat命令,实验比较麻烦,仅做说明
          [root@web01-8 mnt]# ll 
          总用量 4
          drwxr-xr-x 3 nfsnobody nfsnobody 4096 12月  9 18:08 backup
          -rw-r--r-- 1 nfsnobody nfsnobody    0 12月  9 18:08 file
          -rwSr-Sr-- 1 root      root         0 12月 10 21:44 test_file_for_suid
        • 注意:在nfs服务端共享目录仍然可以设置文件的suid,并可以使用。具体内容具体分析。
    • rw,ro
      • 默认值:rw
      • 说明:
        • 可以指定文件系统是只读(ro)还是读写(rw)
    • dev,nodev
      • 默认值:dev
      • 说明:
        • 是否可以保留装置文件的特殊功能?
        • 一般来说只有/dev 才会有特殊的装置,因此可以选择nodev
    • exec,noexec
      • 默认值:exec
      • 说明:
        • 是否具有执行文件的权限?
        • 如果想要挂载的仅是普通资源数据区(如:图片,附件),那么可以选择noexec
    • user,nouser
      • 默认值:nouser
      • 说明:
        • 是否允许用户拥有文件的挂载和卸载功能?
        • 如果想要保护文件系统,最要不要为用户提供挂载和卸载功能
    • auto,noauto
      • 默认值:auto
      • 说明:
        • 这个auto指的是mount -a 时会不会被挂载的项目
        • 如果不需要这个分区随时被挂载,可以设置为noauto

    下面是mount命令的-o选项后面可以接的参数,注意,有些选项只有出现在/etc/fstab 里面才有效。

    下面这些选项可以应用在绝大多数文件系统上,但是sync仅适合ext2,ext3,fat,vfat和ufs等文件系统。

    • async 
      • 异步,涉及文件系统的I/O的操作都是异步处理。即不会同步写到磁盘。
      • 此参数提高性能,但会降低数据安全。
      • 不推荐生产使用,除非对性能要求很高,对数据可靠性不要求的场合。
    • sync
      • 与async相反。
      • I/O同步,即把数据同步写入硬盘。
      • 牺牲一部分I/O性能,但是可以确保停电后数据的安全性。
    • atime
      • 在每一次数据访问时,同步更新访问文件的inode时间戳。
      • 是默认选项。
      • 在高并发情况下,建议通过noatime,取消这个默认项,以提升I/O性能。
    • ro
      • 只读
    • rw
      • 读写
    • auto
      • 能够被自动挂载通过-a选项
    • noauto
      • 不会自动挂载文件系统
    • defaults
      • 这是fstab里的默认值,包括:rw,suid,dev,exec,auto,nouser,async
      • 默认情况下,大部分都是默认值
    • exec
      • 允许文件系统执行二进制文件
      • noexec可以提升系统安全性
    • noexec
      • 在挂载的文件系统中,不允许直接执行任何二进制的程序
      • 注意,仅对二进制程序有效
      • 即使是设置了noexec,shell,php程序还是可以执行的。
    • noatime
      • 访问文件时不更新文件的inode时间戳
      • 高并发情况下,推荐应用该选项,提升系统I/O性能
    • nodiratime
      • 不更新文件系统上的directory inode时间戳
      • 高并发环境,推荐显式应用该选项,可以提升系统I/O性能
    • nosuid
      • 不允许set-user-identifier or set-group-identifier 位生效
      • 即,suid和sgid设置不生效
    • suid
      • 允许设置suid和sgid,并允许生效
    • nouser
      • 禁止一个普通用户挂载该文件系统
      • 默认挂载的默认选项
    • remount
      • 尝试重新挂载一个已经挂载了的文件系统
      • 通常被用来改变一个文件系统的挂载标志,从而使得一个只读文件系统变得可写
      • 这个动作不会改变设备或者挂载点
      • 当系统故障时进入single或rescue模式修复系统时,会发现根文件系统经常会变成只读文件系统,不允许修改,该命令就派上用场了
      • 具体的命令为:mount -o remount,rw /,表示将根文件系统重新挂载,使得可写
      • single或rescue模式修复系统时,这个命令十分重要。
    • dirsync
      • 目录更新时同步写入磁盘

    其中,

    • sync,rw,noatime,nodiratime 为性能优化重要选项,
    • noexec,nosuid,dirsync 为安全优化重要选项。

    remount实际案例:

    • fstab修改错误导致系统无法启动故障修改案例:
      • 维护模式或救援模式:
      • mount -o rw,remount
      • 然后修改/etc/fstab
    • 文件系统只读故障修复案例
      • 可能出现问题的原因:
        • rsync bug
        • 文件系统内部自动一致性(只读)
      • 维护模式或救援模式:
      • mount -o rw,remount /

    1.2 NFS客户端挂载优化

    在企业生产环境中,NFS客户端挂载有没有必须要加某些参数,比如:noexec,nosuid,nodev,bg,soft,rsize,wsize等参数。在生产环境中如何做呢?

    解答:

    这个问题属于mount挂载优化内容(有些参数也适合其它文件系统),一般来说要适当加挂载参数,但是,最好是先做好测试,用数据来说话,才能更好地确定到底是挂载还是不挂载。

    1.2.1 有关系统安全性挂载参数选项:nosuid,noexec

    在企业工作场景,一般来说,NFS服务器共享的只是普通静态数据(图片,附件,视频),不需要执行suid,exec等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性。

    例如:

    很多木马篡改站点文件都是由上传入口上传的程序到存储目录,然后执行的。

    因此,挂载的时候,用下面的命令很有必要:

    mount -t nfs -o nosuid,noexec,nodev,rw 192.168.0.31:/data /mnt

    通过mount -o 指定挂载参数与在/etc/fstab里指定挂载参数的效果是一样的。

    网络文件系统和本地的文件系统效果也是一样的。

    1.2.2 mount挂载性能优化参数选项

    下面介绍几个在企业生产环境下,NFS性能优化挂载的例子。

    • 禁止更新目录和文件时间戳挂载
      • mount -t nfs -o noatime,nodiratime 192.168.0.31:/data /mnt
    • 安全加优化的挂载方式
      • mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 192.168.0.31:/data /mnt
    • 默认的挂载方式
      • mount -t nfs 192.168.0.31:/data /mnt

    如果是本地文件系统,使用如下命令:mount /dev/sdb1 /mnt -o defaults,async,noatime,data=writeback,barrier=0

    本地文件系统挂载时,如果加nodirtime会报错。

    根据前面的测试我们知道,默认情况下,NFS Server 共享目录的参数默认配置为wsize和rsize,它们设定了NFS服务端和客户端之间传输的数据块大小。

    wsize和rsize的大小最好是1024的倍数,对于NFSV2来说,8192是rsize和wsize的最大数值,如果使用的是NFSV3,则可以尝试设置32768,如果是NFSV4可以到65536或更大。

    如果在客户端挂载时使用了这两个参数,可以让客户端在读取和写入数据时,一次性读写更多的数据包,这可以提升访问性能和效率。

    noatime和nodiratime性能优化选项,这两个选项在读写此案时候,不更新文件和目录的时间戳(即不更新文件系统中文件对应的inode信息),这样可以减少和磁盘系统的交互,提升读取和写入磁盘的效率,因为磁盘是机械的, 每次读写都会消耗磁盘I/O,而更新文件时间戳对于工作数据必要性不大,最大问题是增加了访问磁盘I/O的次数,拖慢系统性能。

    以下是NFS网络文件系统优化挂载的参数建议。

    在CentOS6服务器和客户端环境下,可使用如下命令参数:

      mount -t nfs -o noatime,nodiratime,nosuid,noexec,nodev,rsize=131072,wsize=131072 192.168.0.31:/data /mnt

    经过实际测试,CentOS 6默认的挂载参数性能还是不错的。

    注意:

    非性能的参数越多,速度可能会越慢。根据具体的业务需要以及实际测试效果选择挂载参数。

    1.2.3 NFS内核优化建议

    下面是优化选项说明:

    • /proc/sys/net/core/rmen_default
      • 该文件指定了接收套接字缓冲区大小的默认值(以字节为单位),默认设置:124928
    • /proc/sys/net/core/rmen_max
      • 该文件指定了接收套接字缓冲区大小的最大值(以字节为单位),默认设置:124928
    • /proc/sys/net/core/wmen_default
      • 该文件指定了发送套接字缓冲区大小的默认值(以字节为单位),默认设置:124928
    • /proc/sys/net/core/wmen_max
      • 该文件指定了发送套接字缓冲区大小的最大值(以字节为单位),默认设置:124928
    [root@nfs-31 data]# head /proc/sys/net/core/*mem*
    ==> /proc/sys/net/core/optmem_max <==
    20480
    
    ==> /proc/sys/net/core/rmem_default <==
    124928
    
    ==> /proc/sys/net/core/rmem_max <==
    124928
    
    ==> /proc/sys/net/core/wmem_default <==
    124928
    
    ==> /proc/sys/net/core/wmem_max <==
    124928

    上述文件对应的具体内核优化命令如下(在NFS服务器端进行配置修改):

    cat >>/etc/sysctl.conf<<EOF
    net.core.wmem_default = 8388608
    net.core.rmem_default = 8388608
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216
    EOF
    sysctl -p

    查看修改结果:

    [root@nfs-31 data]# tail -4 /etc/sysctl.conf
    net.core.wmem_default = 8388608
    net.core.rmem_default = 8388608
    net.core.rmem_max = 16777216
    net.core.wmem_max = 16777216

    1.2.4 企业生产场景NFS共享存储优化小结

    • 硬件:sas/ssd硬盘,买多块盘,raid10,硬RAID。网卡吞吐量要大,至少千兆(多块bond)
    • NFS服务器端配置:/data 192.168.0.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)
    • NFS客户端挂载优化配置命令:
      • mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,wsize=131072 192.168.0.31:/data/ /mnt
    • 对NFS服务的所有服务器内核进行优化时,执行如下命令:
      • cat >>/etc/sysctl.conf<<EOF
        net.core.wmem_default = 8388608
        net.core.rmem_default = 8388608
        net.core.rmem_max = 16777216
        net.core.wmem_max = 16777216
        EOF
      • 执行sysctl -p生效

    • 如果卸载的时候提示“umount:/mnt: device is busy”,需要退出挂载目录再进行卸载,如果是NFS服务器宕机了,则需要强制卸载。
      • 强制卸载命令:umount -lf /mnt
    • 大型网站NFS网络文件系统的替代软件为分布式文件系统Moosefs(mfs),GlusterFS,FastDFS

    2. NFS系统应用的优缺点说明

    NFS服务可以让不同的客户端挂载使用同一个共享目录,也就是将其作为共享存储使用,这样可以保证不同节点客户端数据的一致性,在集群架构环境中经常会使用到。

    如果是Windows和Linux混合环境的集群系统,可以用samba来实现。

    优点:

    • 简单,容易上手,容易掌握
    • NFS文件系统内数据是在文件系统之上的,即数据是能看得见的。
    • 部署快速,维护简单方便,且可控,满足需求就是最好的
    • 可靠,从软件层面上看,数据可靠性高,经久耐用。数据是在文件系统之上的。
    • 服务非常稳定。

    局限:

    • 存在单点故障,如果NFS服务端宕机了,所有客户端都不能访问共享目录。这个在后期会通过负载均衡及高可用方案弥补
    • 在大数据高并发的场合,NFS效率,性能有限(2千万/日以下PV的网站不是瓶颈,除非网站架构设计太差)
    • 客户端认证是基于IP和主机名的,权限要根据ID识别,安全性一般(用于内网则问题不大)
    • NFS数据是明文的,NFS本身不对数据完整性进行验证。
    • 多台客户机挂载一个NFS服务器时,连接管理维护麻烦(耦合度高)。尤其当NFS服务端出问题后,所有NFS客户端都处于挂掉状态(测试环境可使用autofs自动挂载解决,正式环境可修复NFS服务或强制卸载)
    • 涉及了同步(实时等待)和异步(解耦)的概念,NFS服务器端和客户端相对来说,就是耦合度有些高。网站程序也是一样,尽量不要耦合度太高,系统和程序架构师的重要职责就是为程序及架构解藕,让网站的扩展性变得更好。

    应用建议:

    对于大中小型网站(参考点2000万/日PV以下)线上应用,都有用武之地。

    门户网站也会有应用,生产场景应该多将数据的访问往前推,即尽量将静态存储里的资源通过CDN或缓存服务器提供服务。

    如果没有缓存服务或架构不好,存储服务器数量再多也是扛不住压力的,而且用户体验会很差。

  • 相关阅读:
    [computer graphics]世界坐标系->相机坐标系详细推导
    [Computer Vision]霍夫变换直线检测
    [OpenGL](翻译+补充)投影矩阵的推导
    [WebGL]二维变换
    [WebGL]Shader中的数据和简单的工作流
    图像梯度
    皮肤镜图片毛发去除
    胸部CT提取分割肺部
    医学影像重采样
    ES7学习笔记(十二)高亮 和 搜索建议
  • 原文地址:https://www.cnblogs.com/zoe233/p/12018875.html
Copyright © 2011-2022 走看看