zoukankan      html  css  js  c++  java
  • NFS

    已知samba主要用于Linux与windows之间共享文件夹

    那用于Linux之间进行进行文件共享则是用NFS(network file system)

    目的在于让不同的服务器,不同的操作系统可以彼此分享各自的文件数据。

    NFS服务器可以将远程Linux系统上的文件共享资源挂载到本地机器的目录上。

     

    NFS很像windows系统的网络共享,安全功能,网络驱动映射,这也和Linux系统的samba服务类似。

    一般情况下,windows网络共享服务或samba服务用于办公局域网共享,而中小型网站集群架构后端

    通常用NFS数据共享,如果大型网络集群,还会用更复杂的文件系统,如GlusterFS,FastDFS等。

    NFS系统已有30年发张历史,代表了一个稳定的网络文件系统,具备可扩展,高性能等特点。

    由于网络速度的加快和延迟的减少,NFS系统一直是通过网络提供文件系统的不错的选择,特别是在

    中小型互联网企业用的广泛

    NFS在企业中的应用架构

    在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频,图片,静态文件,通常网站用户上传的文件也都会放在NFS共享里,例如BBS产生的图片,附件,头像等,然后前端所有的节点访问静态资源时都会读取NFS存储上的资源。

     

    阿里云等共有云平台的NAS就是云版的NFS服务应用

     

    NFS与RPC原理

    NFS在传输数据时,使用的端口是随机选择的

    客户端无法预知NFS的具体端口。

    因此有了RPC(remote procedure call)协议来实现的。

    RPC

    RPC服务实现的功能就是记录每个NFS功能对应的端口号,并且在NFS客户端发出请求的时候,

    把该功能和对应的端口号信息传递给发出请求的NFS客户端,保证客户端能够正确的连接到NFS

    服务端的端口,达到数据传输的目的。

    RPCBIND服务

    在启动NFS服务端之前,必须先启动RPC服务,在centos7服务器下为rpcbind服务,否则NFS服务无法向RPC注册信息了。

    另外如果RPC服务重启了,那么原来注册的NFS服务端的信息也就失效了,也必须重启服务,再次注册。

    特别要注意的是,修改了NFS配置文件后不需要重启NFS,只需要执行 exportfs -rv 命令或者 systemctl reload nfs 即可。

    安装NFS

      1. rpcbind :是centos7/6环境下的rpc程序

      2. nfs-utils: NFS服务的主程序,包括了rpc.nfsd,rpc.mountd这两个守护进程以及相关文档,命令

    1.检查默认NFS软件安装情况
    [root@chaogelinux ~]# rpm -qa nfs-utils rpcbind
    rpcbind-0.2.0-48.el7.x86_64
    nfs-utils-1.3.0-0.65.el7.x86_64
    
    2.安装软件包命令
    yum install nfs-utils rpcbind -y
    

     

    【配置参数解释】

    ro 只读
    rw 读写
    root_squash 当nfs客户端以root访问时,它的权限映射为NFS服务端的匿名用户,它的用户ID/GID会变成nfsnobody
    no_root_squash 同上,但映射客户端的root为服务器的root,不安全,避免使用
    all_squash 所有nfs客户端用户映射为匿名用户,生产常用参数
    sync 数据同步写入到内存与硬盘,优点数据安全,缺点性能较差
    async 数据写入到内存,再写入硬盘,效率高,但可能内存数据会丢
    

      

    【配置环境】

    1.确保RPC服务启动了
    systemctl start rpcbind
    
    2.创建需要共享的目录,以及资料,并且授权
    mkdir -p /nfs_data
    touch /nfs_data/好嗨哦.txt  
    
    3.修改文件夹的user,group,这里更换权限是防止NFS客户端无法写入数据,当然也可以修改服务端目录777权限,但是不安全,不推荐
    chown -R nfsnobody.nfsnobody  /nfs_data/
    
    4.上一步修改的用户是nfs的匿名用户
    [root@chaogelinux ~]# grep nfsnobody /etc/passwd
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    

    【NFS客户端地址配置说明】

    客户端地址 具体地址 说明
    单一客户端 192.168.207.134 用的少
    整个网段 192.168.207.0/24 用的较多
    授权域名客户端 nfs.chaoge.com 弃用
    授权整个域名客户端 *.chaoge.com 弃用

    【修改NFS配置文件】

    1.编辑配置文件,写入如下挂载参数
    [root@chaogelinux ~]# cat /etc/exports
    /nfs_data *(insecure,rw,sync)
    
    2.重新加载nfs服务
    systemctl reload nfs
    
    3.查看NFS服务端挂载情况
    [root@chaogelinux ~]# showmount -e IP (最好加上ip地址)
    Export list for chaogelinux:
    /nfs_data *
    
    4.查看NFS服务端挂载默认的参数,如下大多数参数都是默认的,不做过多了解
    [root@chaogelinux ~]# cat /var/lib/nfs/etab
    /nfs_data    *(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
    
    5.把本地机器当做客户端做一个简单的挂载测试
    [root@chaogelinux ~]# mount -t nfs 123.206.16.61:/nfs_data /mnt
    [root@chaogelinux ~]#
    [root@chaogelinux ~]#
    # 发现已经可以查看到挂载目录的数据
    [root@chaogelinux ~]# ls /mnt/
    好嗨哦.txt
    
    # 检查挂载情况
    [root@chaogelinux ~]# df -h |tail -1
    123.206.16.61:/nfs_data   50G   22G   26G   47% /mnt
    
    [root@chaogelinux ~]# mount |tail -1
    123.206.16.61:/nfs_data on /mnt type nfs4 (rw,relatime,vers=4.1,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.141.32.137,local_lock=none,addr=123.206.16.61)
    
    
    至此NFS服务端挂载成功,配置完毕
    

    【配置案例】

    # 案例1:
    #修改nfs配置文件为如下示例
    [root@chaogelinux nfsShare]# cat /etc/exports
    /nfsShare *(insecure,rw,sync,root_squash)
    
    #表示共享该文件夹,且提供给所有网段的机器可访问,配置规则是,可读写,数据同步写入到磁盘,把root管理员映射为本地的匿名用户,insecure是客户端从大于1024的端口发送链接
    
    ####################################
    
    
    
    # 案例2:
    
    /home/chaoge   192.168.178.0/24(ro)
    只读共享,例如一些生成服务器的日志目录,又不想给开发服务器的权限,可以用此办法,共享目录给他人只读查看
    

      

      

    【NFS客户端】

    [root@web01 ~]# yum install nfs-utils rpcbind -y  #安装操作nfs的命令套件
    
    # 确保rpcbind服务正常
    systemctl status rpcbind
    
    # 检查远程挂载情况,需要服务端防火墙关闭,或是配置了规则
    [root@chaoge_linux mnt]# showmount -e 123.206.16.61
    Export list for 123.206.16.61:
    /nfs_data *
    
    
    #以nfs协议挂载
    [root@chaoge_linux ~]# mount -t nfs 123.206.16.61:/nfs_data /mnt
    

      

    【开机自动挂载】

    [root@web01 nfsShare]# tail -1 /etc/fstab
    123.206.16.61:/nfsShare /nfsShare nfs defaults 0 0
    

      

     

    Autofs自动挂载服务

    【autofs特点】

      autofs和mount的不同点在于,autofs是一种守护进程,他在后台检测用户是否要访问一个还没有挂载

    的文件系统,autofs会自动检查该文件系统是否存在,存在则挂载。

      且autofs检测到已经挂载的文件系统有一段时间没有使用,则会自动将其卸载,省去了人力维护挂着设备的成本,

    以及不会造成服务器资源浪费。

    【autofs缺点】

      autofs的特点是只有用户请求时才执行挂载,所有当高并发访问时,开始请求的瞬间需要执行挂载,性能较差,

    因此在高并发业务场景下,宁愿保持挂载也不使用autofs自动挂载。

    安装autofs

    [root@chaogelinux nfsShare]# yum install autofs -y
    

      

    【修改autofs配置文件】

    #默认的配置文件如下
    [root@web01 ~]# grep -v '^#' /etc/auto.master
    # 定义了一个挂载点是/misc ,需要在auto.misc文件中定义挂载动作
    /misc    /etc/auto.misc  
    /net    -hosts
    +dir:/etc/auto.master.d
    +auto.master
    

      添加nfs自动挂载配置,添加一行配置,改为如下:

    [root@web01 ~]# grep -v '^#' /etc/auto.master
    /misc    /etc/auto.misc
    /- /etc/auto.home  #添加了这里,需要创建auto.home配置文件
    /net    -hosts
    +dir:/etc/auto.master.d
    +auto.master
    

      定义子配置文件的内容:

    [root@web01 home]# cat /etc/auto.home
    /var/autofs  -rw,soft,intr 123.206.16.61:/nfsShare
    

      检查挂载情况

    [root@web01 ~]# df -h
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        476M     0  476M   0% /dev
    tmpfs           487M     0  487M   0% /dev/shm
    tmpfs           487M  7.7M  479M   2% /run
    tmpfs           487M     0  487M   0% /sys/fs/cgroup
    /dev/sda3        19G  1.9G   17G  10% /
    /dev/sda2       497M  125M  373M  26% /boot
    tmpfs            98M     0   98M   0% /run/user/0
    

      

      启动autofs

    systemctl restart autofs
    systemctl enable autofs
    

      当我们进入了该挂载点, autofs服务就会自动检测,且自动挂载

    [root@web01 ~]# ll /var/autofs
    total 0
    -rw-r--r--. 1 nfsnobody nfsnobody 0 Dec 18 00:30 1.txt
    [root@web01 ~]# df -h
    Filesystem                 Size  Used Avail Use% Mounted on
    devtmpfs                   476M     0  476M   0% /dev
    tmpfs                      487M     0  487M   0% /dev/shm
    tmpfs                      487M  7.7M  479M   2% /run
    tmpfs                      487M     0  487M   0% /sys/fs/cgroup
    /dev/sda3                   19G  1.9G   17G  10% /
    /dev/sda2                  497M  125M  373M  26% /boot
    tmpfs                       98M     0   98M   0% /run/user/0
    192.168.207.134:/nfsShare   20G  2.2G   17G  12% /var/autofs
    

      

     【设置多少秒不用之后自动取消挂载】

    [root@web01 ~]# cat /etc/autofs.conf |grep -i "timeout ="
    timeout = 10
    

      

      

  • 相关阅读:
    <转>修正版 疯狂代码 写给WEB2.0的站长
    一组MSSQL千万数量级分页存储过程
    flash AS +xml 加载图片(使用MovieClipLoader实现LOADING)
    [转]优化SQL Server的内存占用之执行缓存
    日志记录组件[Log4net]详细介绍(转)
    IBatis.Net如何支持多个数据库 [转帖]
    c#导入导出EXCEL
    弄了个新blogs 欢迎捧场
    ActionSrcipt 资源
    一个鼠标拖出一个圆形的简单demo
  • 原文地址:https://www.cnblogs.com/abc1234567/p/14152984.html
Copyright © 2011-2022 走看看