• NFS网络文件系统服务(配置实战)


    NFS网络文件系统服务(实战)

    NFSNetwork File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。让不同的主机系统(NFS的客户端)可以透明地读写位于远端NFS服务器(NFS服务端)上的文件,就像访问本地文件一样。NFS网络文件系统很像windows系统的网络共享、安全功能、网络驱动器映射,这也和Linux系统里的samba服务类似,只不过一般情况,windows网络共享服务或者samba服务用于办公局域网共享,互联网中小型网站架构后端常用NFS作为数据共享,如果是大型网站,那么有可能还会用到更复杂的分布式文件系统(如MFS等)。

    NFS的好处:

    1. 节省本地存储空间,将常用的数据存放在一台NFS服务器上且可以通过网络访问,那么本地终端将可以减少自身存储空间的使用。

    2. 用户不需要在网络中的每个机器上都建有Home目录,Home目录可以放在NFS服务器上且可以在网络上被访问使用。

    3. 一些存储设备如软驱、CDROMZip(一种高储存密度的磁盘驱动器与磁盘)等都可以在网络上被别的机器使用。这可以减少整个网络上可移动介质设备的数量。

    4NFS在企业集群架构中的应用场景中一般被用来存储共享视频、图片、附件等静态文件

    工作原理图:

    1NFS服务搭建前服务器的准备:

    服务器系统

    角色

    IP地址

    CentOS release 6.9 x86_64

    NFS服务器端(nfs-server)

    192.168.1.222

    CentOS release 6.9 x86_64

    NFS客户端(nfs-client1)

    192.168.1.233

    CentOS release 6.9 x86_64

    NFS客户端(nfs-client2)

    192.168.1.244

    2)安装所需软件

    centos6.9 默认没有安装NFS软件包,此时我们可以使用install nfs-utils rpcbind -y 命令来进行安装

    [root@nfs-server ~]# yum install nfs-utils rpcbind -y #三台同时安装

    [root@nfs-client1 ~]# yum install nfs-utils rpcbind -y #三台同时安装

    [root@nfs-client2 ~]# yum install nfs-utils rpcbind -y #三台同时安装

    [root@nfs-server ~]# rpm -qa nfs-utils rpcbind #查看是否安装成功,以下结果表示已安装成功

    nfs-utils-1.2.3-75.el6.x86_64

    rpcbind-0.2.0-13.el6_9.1.x86_64

    2)启动NFS相关服务

    1、先启动rpcbind 服务

    [root@nfs-server ~]# /etc/init.d/rpcbind start

    正在启动 rpcbind: [确定]

    [root@nfs-server ~]# netstat -lntup|grep rpcbind

    tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1615/rpcbind

    tcp 0 0 :::111 :::* LISTEN 1615/rpcbind

    udp 0 0 0.0.0.0:111 0.0.0.0:* 1615/rpcbind

    udp 0 0 0.0.0.0:942 0.0.0.0:* 1615/rpcbind

    udp 0 0 :::111 :::* 1615/rpcbind

    udp 0 0 :::942 :::* 1615/rpcbind

    [root@nfs-server ~]# chkconfig rpcbind on #开机自启动

    2、再启动nfs服务

    [root@nfs-server ~]# /etc/init.d/nfs start

    启动 NFS 服务: [确定]

    启动 NFS mountd: [确定]

    启动 NFS 守护进程: [确定]

    正在启动 RPC idmapd: [确定]

    注意:启动的顺序是先启动rpcbind 再启动nfs

    [root@nfs-server ~]# chkconfig nfs on

    3)配置服务端

    [root@nfs-server ~]# vim /etc/exports #exports文件默认是存在的,但没有内容,需要配置,有些Linux版本不提供exports 配置文件,就需要手动创建

    添加如下内容:

    /data 192.168.1.0/24(rw,sync,all_squash) #第一列是共享出去的目录,空格后面跟上客户端的ip(这里使用网段)再跟上参数,注意参数后面不要有空格,all_squash需加上才能让普通用户变成匿名用户nobody,否则普通用户不能访问,root的话可以不加

    ----说明

    /etc/exports 文件配置格式

    [共享的目录] [主机名或IP(参数,参数)]

    其中参数是可选的,当不指定参数时,nfs将使用默认选项。默认的共享选项是 sync,ro,root_squash,no_delay。当主机名或IP地址为空时,则代表共享给任意客户机提供服务。当将同一目录共享给多个客户机,但对每个客户机提供的权限不同时,可以这样:

    [共享的目录] [主机名1IP1(参数1,参数2)] [主机名2IP2(参数3,参数4)]

    下面是一些NFS共享的常用参数:

    ro 只读访问

    rw 读写访问

    sync 所有数据在请求时写入共享

    async NFS在写入数据前可以相应请求

    secure NFS通过1024以下的安全TCP/IP端口发送

    insecure NFS通过1024以上的端口发送

    wdelay 如果多个用户要写入NFS目录,则归组写入(默认)

    no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。

    hide NFS共享目录中不共享其子目录

    no_hide 共享NFS目录的子目录

    subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)

    no_subtree_check 和上面相对,不检查父目录权限

    all_squash 共享文件的UIDGID映射匿名用户anonymous,适合公用目录。

    no_all_squash 保留共享文件的UIDGID(默认)

    root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)

    no_root_squas root用户具有根目录的完全管理访问权限

    anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID

    anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID

    来自man的例子:

    # sample /etc/exports file

    / master(rw) trusty(rw,no_root_squash)

    /projects proj*.local.domain(rw)

    /usr *.local.domain(ro) @trusted(rw)

    /home/joe pc001(rw,all_squash,anonuid=150,anongid=100)

    /pub *(ro,insecure,all_squash)

    /srv/www -sync,rw server @trusted @external(ro)

    /foo 2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)

    /build buildhost[0-9].local.domain(rw)

    4)创建共享目录并加载配置文件使其生效

    [root@nfs-server ~]# mkdir /data

    [root@nfs-server ~]# chown -R nfsnobody /data #因为属主有写权限这里需要修改属主为nfsnobody否则不能写,因为没配置参数所以服务端默认只给65534权限

    [root@nfs-server ~]# /etc/init.d/nfs reload

    ---测试

    [root@nfs-server ~]# showmount -e 127.0.0.1

    Export list for 127.0.0.1:

    /data 192.168.1.0/24 #说明本地看到共享记录

    [root@nfs-server ~]# mount -t nfs 192.168.1.222:/data /opt

    5)配置客户端

    [root@nfs-client1 ~]# /etc/init.d/rpcbind start

    [root@nfs-client2 ~]# /etc/init.d/rpcbind start

    [root@nfs-client1 ~]# chkconfig rpcbind on

    [root@nfs-client2 ~]# chkconfig rpcbind on

    ---查看是否能连上服务端

    [root@nfs-client1 ~]# showmount -e 192.168.1.222

    Export list for 192.168.1.222:

    /data 192.168.1.0/24

    [root@nfs-client2 ~]# showmount -e 192.168.1.222

    Export list for 192.168.1.222:

    /data 192.168.1.0/24

    6)挂载客户端并测试是否正常

    [root@nfs-client1 ~]# mount -t nfs 192.168.1.222:/data /opt

    [root@nfs-client2 ~]# mount -t nfs 192.168.1.222:/data /opt

    [root@nfs-client1 ~]# echo "mount -t nfs 192.168.1.222:/data /opt" >> /etc/rc.local

    [root@nfs-client2 ~]# echo "mount -t nfs 192.168.1.222:/data /opt" >> /etc/rc.local

    ---以上NFS网络文件系统服务已配置完成,并能实现共享

    附上:mount -o重要参数

    %为性能*为安全优化重要选项

    async

    所有设计到文件系统I/O的操作都是一部处理,即不会同步写到磁盘,此参数会提高性能,但一般生产情况不推荐使用除非对性能要求很好,对数据可靠性要求不高的场景

    sync%

    该参数和async相反,即有I/O操作时,都会同步处理I/O,即把数据同步写入磁盘,此参数会提高性能但意外情况会造成数据丢失

    atime

    在每次数据访问时,同步更新每次访问的inode时间,是默认选项,在高并发的情况下明确加上noatime来取消默认项,以提高I/O性能,优化I/O目的

    ro

    以只读的方式挂载一个文件系统

    rw%

    以可写的方式挂载文件系统

    auto

    能够被自动挂载通过-a选项

    noauto

    不会自动挂载文件系统

    defaults

    这是fstab里的缺省值,包括rw,suid,dev,exec,auto,nouser,and asvnc.

    exec

    允许文件系统执行二进制文件,取消这个参数可以提高系统安全,但需根据实际应用场景

    noexec*

    在挂载的文件系统中不允许字节执行任何二进制程序。

    noatime%

    不更新文件系统上的inode访问时间,高并发环境建议使用该选项提高性能

    nodiratime%

    不更新文件系统上的directory inode访问时间,高并发环境建议使用该选项

    nosuid*

    不允许set-user-identifier or set-group-identifier位生效

    suid

    允许set-user-identifier or set-group-identifier 位生效

    nouser

    禁止一个普通用户挂载该文件系统,这是默认挂载时的默认选项

    remount%

    让一个文件系统重新可写,救援模式时就需要。如:fstab修改错误导致系统无法启动就需要mount -o remount,rw /   然后修改/etc/fstab

    附上优化建议:

    ----内核优化:

    vim /etc/sysctl.conf #编辑内核配置文件

    net.core.wmem_default = 8388608   #发送缓冲区大小的缺省值,缺省设置:124928

    net.core.rmem_default = 8388608    #接收缓冲区大小的缺省值,缺省设置:124928

    net.core.rmem_max = 16777216      #接收缓冲区大小最大值,缺省设置:124928

    net.core.wmem_max = 16777216     #发送缓冲区大小最大值,缺省设置:124928

    sysctl -p 

    ----服务端配置文件优化

         /data   192.168.1.0/24(rw,sync,all_squash)  #全部压缩

    ----挂载方式:

    默认的挂载方式:mount -t nfs 192.168.1.222:/data /opt

    本地挂载优化:mount /dev/sdb1 /opt -o defaults,async,noatime,data=writeback,barrier=0

    安全的挂载:mount -t nfs -o nosuid,noexec,nodev,rw 192.168.1.222:/data /opt  

    ----有关性能优化的挂载命令:

    (1)禁止更新目录及文件时间戳挂载#mount -t nfs -o noatime,nodiratime 192.168.1.222:/data /opt

    (2)安全加优化的挂载方式#mount -t nfs -o nosuid,nodev,noexec,noatime,nodiratime,intr,rsize=65536,wsize=65536 192.168.1.222:/data /opt

    (3)Centos 6* nfs网络文件系统挂载优化:mount -t nfs -o noatime,nodiratime,nosuid,noexec,nodev,rw,bg,hard,inte, rsize=131072,wsize=131072 192.168.1.222:/data /opt

    参考:http://oldboy.blog.51cto.com/

  • 相关阅读:
    List 与 Array 的相互转化及 List、Array、Set转为 String
    Java 序列化介绍及 Redis 序列化方式
    SpringBoot 整合 redis 实现 token 验证
    SpringBoot 整合 Redis 使用
    Map 某 value 为 对象数组,转为 ArrayList 对象集合
    JWT 基本使用
    Spring session + redis 实现 session共享入门
    HttpServletRequest + Filter 添加 header
    Git ahead(超前) 又behind(落后)
    web应用中路径跳转问题-相对路径、绝对路径
  • 原文地址:https://www.cnblogs.com/imweihao/p/7429002.html
Copyright © 2020-2023  润新知