• linux运维、架构之路-nfs网络文件系统


    一、nfs介绍

             NFS是Network File System的缩写,是网络文件系统,它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录,主要存储用户上传的图片附件等信息。

    nfs共享文件实现原理

    1、nfs工作原理

    nfs服务端

    ① 先启动rpc服务 /etc/init.d/rpcbind start

    ② 再启动nfs服务 /etc/init.d/nfs start

    ③  nfs向rpc注册端口和功能,端口号为111

    nfs客户端

    ① 先启动rpc服务 /etc/init.d/rpcbind start

    ② mount命令进行挂载

    ③ 向对端rpcbind请求nfs服务端口,nfs服务端返回端口信息

    2、RPC服务介绍

          相当于租房中的中介,NFS服务启动会产生多个进程和多个端口,不便于客户端进行连接访问,通过RPC服务接收NFS端口信息的注册,并通过开启RPC服务生成111端口,提供客户端进行访问

    二、nfs服务部署

    1、nfs服务端

    ①安装nfs和rpc服务软件

    rpm -qa nfs-utils rpcbind
    yum install nfs-utils rpcbind -y

    ②修改nfs配置文件

    cat >>/etc/exports<<EOF 
    /data 172.16.1.0/24(rw,sync)
    EOF

    ③启动rpc、nfs服务

    /etc/init.d/rpcbind start
    /etc/init.d/nfs start

    ④创建共享目录并授权

    mkdir /data -p
    chown -R nfsnobody.nfsnobody /data
    id nfsnobody

    ⑤重启nfs服务

    /etc/init.d/nfs reload  #平滑重启
    /etc/init.d/nfs restart #强硬重启

    ⑥检查并测试nfs挂载服务

    showmount -e 172.16.1.31 #检查共享目录列表信息
    mount -t nfs 172.16.1.31:/data /mnt

    2、nfs客户端

    ①安装nfs和rpc服务软件

    yum install nfs-utils rpcbind -y

    ②测试nfs共享目录挂载

    mount -t nfs 172.16.1.31:/data /mnt

    ③卸载目录

    退出共享目录,再进行卸载           umount /mnt
    不退出共享目录,强制进行卸载        umount -lf /mnt
    -l     Lazy  unmount  #懒惰的卸载
    -f     Force unmount  #强制的卸载

    三、nfs配置文件详解

    1、nfs授权客户端地址配置说明

    客户端地址

    具体地址

    说明

    授权单一客户端访问NFS

    172.16.1.41

    一般情况,生产环境中此配置不多

    授权整个网段访问NFS

    172.16.1.0/24

    生产环境中最常用的配置,简单、方便

    授权整个网段访问NFS

    172.16.1.*

    指定网段的另一种写法(不推荐使用)

    授权某个域名客户端访问

    nfs.oldboyedu.com

    此方法生产中一般情况不常用

    授权整个域名客户端访问

    *.oldboyedu.com

    此方法生产中一般情况不常用

    2、nfs权限参数

    参数名称

    参数说明

    rw ******

    read-write表示可读写权限

    ro

    read-only表示只读权限

    sync ******

    请求或写入数据时,数据同步写到nfs-server的硬盘才返回

    优点,数据安全不会丢;缺点,性能比不启用该参数要差

    async ******

    写入数据时先写到缓冲区,直到硬盘有空档才会再写入磁盘,这样可以提升写入效率,如果服务器宕机或不正常关机,会损失缓存区中未写入磁盘的数据

    no_root_squash

    保持root用户不进行压缩

    访问nfs server共享目录的用户如果是root的话,它对该目录有root权限,这个配置原本是为无盘客户端准备的,用户应避免使用

    root_squash

    如果访问nfs server共享目录的用户是root,则它的权限将被压缩成匿名用户,同时它的UID和GID通常会变成nfsnobody账号身份

    all_squash ******

    对所有访问的用户身份压缩成匿名用户,同时变成nfsnobody身份

    生产中配置NFS的重要技巧:

    1、  确保所有客户端服务器对NFS共享目录具备相同用户访问权限

    a、  all_squash把所有客户端都压缩成固定的匿名用户(UID相同)

    b、  就是anonuid,anongid指定的UID和GID的用户

    2、所有的客户端和服务端都需要有一个相同的UID和GID的用户,即nfsnobody(UID必须相同)

    anonuid ******

    指定匿名用户的UID

    这个用户的UID设置值通常为nfsnobody的UID值,当然也可以自行设置这个UID,但是这个UID必须存在于/etc/passwd中,如多台web共享一个nfs目录,通过这个参数可以使得不同的nfs客户端写入的数据对所有NFS客户端保持同样的用户权限,即为配置的匿名UID对应用户权限,一般默认即可

    anongid ******

    指定匿名用户的GID,区别就是把UID(用户ID)换成GID(组ID)

    四、nfs客户端挂载参数

    参数

    参数意义

    系统默认参数

    suid

    nosuid

    当挂载的文件系统上有任何SUID的程序时,只要使用nosuid就能够取消

    suid

    rw

    ro

    可以指定文件系统是只读(ro)还是可写(rw)

    rw

    dev

    nodev

    是否可以保留装置文件的特殊功能?一般来说只有/dev,才会有特殊的装置,因此可以选择nodev

    dev

    exec

    noexec

    是否具有执行文件的权限?如果想要挂载的仅是普通资源数据区(例如:图片、附件)那么可以选择noexec

    exec

    user

    nouser

    是否允许普通用户拥有文件的挂载与卸载功能,如果要保护文件系统,最好不要为普通用户提供挂载与卸载功能

    nouser

    auto

    noauto

    这个auto指的是”mount -a”时会不会挂载的项目,如果不需要这个分区随时挂载,可以设置为noauto

    auto

    soft

    hard

    当nfs客户端以soft挂载server时,若网络或server出现问题,造成客户端和server无法传输资料,客户端就会一直尝试,直到timeout后显示错误才停止,若用hart模式挂载硬盘时,刚好与soft相反,客户端一直尝试连接到server

    若server有回应就继续刚才的操作,若没有回应客户端会一直尝试

    hard

    intr

    当使用hart挂载的资源timeout后,若有指定的intr参数,可以在timeout后把它中断掉,避免出问题时系统整个被nfs锁死,建议使用intr

    rsize

    wsize

    读出与写入的区块大小,这个设置可以影响客户端与server端传输数据的缓冲存储量,在局域内,客户端与server都具有足够的内存,这个值可以设置大一点,提升缓冲区块提升nfs文件系统的传输能力,但也不能设置太大,最好以网络能够传输最大值为限

    五、企业nfs共享存储优化

    1、服务端

    ①硬件:多块sas/ssd磁盘,raid0/raid5/raid10,网上吞吐量要大,至少千兆(多块bond)

    ②NFS服务端配置:/data 172.16.1.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)

    ③内核优化,优化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

    2、客户端

    ①nfs客户端挂载参数建议

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

    ②禁止更新目录及文件时间戳挂载

    mount –t nfs –o noatime,nodiratime 172.16.1.31:/data /mnt

    ③追求极致,可以使用下面参数挂载

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

    ④经过实际测试,CentOS6.X默认的挂载参数性能还是不错的,简单,方便

    mount –t nfs 172.16.1.31:/data /mnt

    六、 autofs自动挂载

    ①设置开机不一定要挂载的目录,当用的时候才实现自动挂载。
    ②用户不使用自动挂载的目录一段的时间,会自动卸载。(默认时间为5分钟)

    1、客户端安装autofs

    yum install autofs -y

    2、nfs服务端创建共享目录、授权

    mkdir /oldboy -p
    chown -R nfsnobody.nfsnobody /oldboy/
    [root@nfs-nfs01 oldboy]# cat /etc/exports
    /oldboy 172.19.5.0/24(rw,sync,all_squash)
    /etc/init.d/nfs reload

    3、客户端修改autofs配置文件

    echo "/nfs    /etc/auto.nfs" >>/etc/auto.master          #主配置文件,/nfs表示挂载点,auto.nfs表示所应用的配置文件
    echo "*   -rw     172.19.5.31:/oldboy/" >>/etc/auto.nfs  #表示要挂载点,也可以指定/nfs,rw表示可读写权限
                     172.19.5.31:/oldboy/                    #nfs共享目录
    /etc/init.d/autofs restart                               #重启服务

    4、nfs服务端查看共享目录下内容

    [root@nfs-nfs01 oldboy]# ll /oldboy/
    total 4
    -rw-r--r-- 1 nfsnobody nfsnobody    0 Aug 23 16:09 abc.log
    drwxr-xr-x 2 nfsnobody nfsnobody 4096 Aug 23 14:52 onlylady

    5、客户端autofs查看

    [root@test02 nfs]# ll /nfs/
    total 0 #此时查看为空
    [root@test02 oldboy]# df –h  #查看挂载点也没有
    Filesystem      Size  Used Avail Use% Mounted on
    /dev/xvda3      6.9G  2.9G  3.7G  44% /
    tmpfs           497M   12K  497M   1% /dev/shm
    /dev/xvda1      190M   66M  115M  37% /boot
    [root@test02 oldboy]# cd /nfs/ #进入挂载点/nfs
    [root@test02 nfs]# cd oldboy   #只有cd进行入到nfs共享目录oldboy下面,立马激活,自动挂载
    [root@test02 oldboy]# ll
    total 4
    -rw-r--r-- 1 nfsnobody nfsnobody    0 Aug 23 14:52 b.txt
    drwxr-xr-x 2 nfsnobody nfsnobody 4096 Aug 23 14:52 onlylady
    [root@test02 oldboy]# df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/xvda3            6.9G  2.9G  3.7G  44% /
    tmpfs                 497M   12K  497M   1% /dev/shm
    /dev/xvda1            190M   66M  115M  37% /boot
    172.19.5.31:/oldboy/  6.9G  1.7G  4.9G  26% /nfs/oldboy
    成功最有效的方法就是向有经验的人学习!
  • 相关阅读:
    对webpack的初步研究7
    对后端返回的时间进行升序的排序
    对webpack的初步研究6
    对webpack的初步研究5
    对webpack的初步研究4
    对webpack的初步研究3
    计算两个时间之间的天数、小时等
    对webpack的初步研究2
    线程_进程间通信Queue合集
    线程_threading合集
  • 原文地址:https://www.cnblogs.com/yanxinjiang/p/7419469.html
Copyright © 2020-2023  润新知