zoukankan      html  css  js  c++  java
  • Linux 7搭建NFS服务

    NFS
    network file system,网络文件系统。
    一种使用于分散式文件系统的协定,
    通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,
    让应用程序在客户端通过网络访问位于服务器磁盘中的数据。

    应用场景:常用于高可用文件共享,多台服务器共享同样的数据。

    NFS是一个使用SunRPC构造的客户端/服务器应用程序,其客户端通过向一台NFS服务器发送RPC请求来访问其中的文件

    提示:在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs reload或exportfs –rv即可使修改的/etc/exports生效。

    1、NFS软件安装

    在服务器端和客户端都需要安装,nfs-utils : NFS主程序,rpcbind : PRC主程序。

    安装:

    # yum install -y nfs* portmap

    查看安装包:

    # rpm -qa | egrep "nfs|rpcbind"
    rpcbind-0.2.0-16.el6.x86_64
    nfs-utils-lib-1.1.5-13.el6.x86_64
    nfs4-acl-tools-0.3.3-8.el6.x86_64
    nfs-utils-1.2.3-78.el6_10.1.x86_64
    nfs-utils-lib-devel-1.1.5-13.el6.x86_64
    nfsometer-1.6-1.el6.noarch

    2、启动服务

    启动NFS服务前需先启动rpcbind服务

    # systemctl start rpcbind
    
    # systemctl status rpcbind
    ● rpcbind.service - RPC bind service
    Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
    Active: active (running) since Thu 2019-08-22 18:20:03 CST; 15h ago
    Process: 5792 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
    Main PID: 5804 (rpcbind)
    CGroup: /system.slice/rpcbind.service
    └─5804 /sbin/rpcbind -w
    
    Aug 22 18:19:59 third systemd[1]: Starting RPC bind service...
    Aug 22 18:20:03 third systemd[1]: Started RPC bind service.

    RPC服务启动成功后再启动NFS服务

    # systemctl start nfs
    [root@third ~]# systemctl status nfs
    ● nfs-server.service - NFS server and services
    Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
    Drop-In: /run/systemd/generator/nfs-server.service.d
    └─order-with-mounts.conf
    Active: active (exited) since Thu 2019-08-22 18:20:16 CST; 15h ago
    Process: 6259 ExecStartPost=/bin/sh -c if systemctl -q is-active gssproxy; then systemctl restart gssproxy ; fi (code=exited, status=0/SUCCESS)
    Process: 6184 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS)
    Process: 6167 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS)
    Main PID: 6184 (code=exited, status=0/SUCCESS)
    CGroup: /system.slice/nfs-server.service
    
    Aug 22 18:20:13 third systemd[1]: Starting NFS server and services...
    Aug 22 18:20:16 third systemd[1]: Started NFS server and services.
    • 程序使用端口
      rpc使用端口111
      nfs主端口2049
      rpcbind信息使用rpcinfo -p localhost查看
    • # rpcinfo -p 192.168.18.130
         program vers proto   port  service
          100000    4   tcp    111  portmapper
          100000    3   tcp    111  portmapper
          100000    2   tcp    111  portmapper
          100000    4   udp    111  portmapper
          100000    3   udp    111  portmapper
          100000    2   udp    111  portmapper
          100005    1   udp  20048  mountd
          100005    1   tcp  20048  mountd
          100005    2   udp  20048  mountd
          100005    2   tcp  20048  mountd
          100005    3   udp  20048  mountd
          100024    1   udp  33392  status
          100024    1   tcp  36127  status
          100005    3   tcp  20048  mountd
          100003    3   tcp   2049  nfs
          100003    4   tcp   2049  nfs
          100227    3   tcp   2049  nfs_acl
          100003    3   udp   2049  nfs
          100003    4   udp   2049  nfs
          100227    3   udp   2049  nfs_acl
          100021    1   udp  51326  nlockmgr
          100021    3   udp  51326  nlockmgr
          100021    4   udp  51326  nlockmgr
          100021    1   tcp  60595  nlockmgr
          100021    3   tcp  60595  nlockmgr
          100021    4   tcp  60595  nlockmgr
       

    rpcbind安装后默认是开机自动启动,nfs默认开机重启后不启动,将nfs设置为开机自启。

    # systemctl enable nfs
    
    Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service

    rpcbind 和 nfs 服务都需要开机自启 ,有两种方式:

    1. chkconfig  nfs on  和  chkconfig rpcbind on (使用这种方式需要注意服务启动脚本中启动顺序的编号。)
    2. 程序运行命令写入/etc/rc.local     

    3、查看NFS进程

    # ps -ef | egrep "rpc|nfs"
    root       2845      2  0 08:29 ?        00:00:00 [rpciod]
    root       5781      1  0 08:30 ?        00:00:00 /usr/sbin/rpc.idmapd
    rpc        5804      1  0 08:30 ?        00:00:00 /sbin/rpcbind -w
    rpcuser    6131      1  0 08:30 ?        00:00:00 /usr/sbin/rpc.statd
    root       6165      1  0 08:30 ?        00:00:00 /usr/sbin/rpc.mountd
    root       6209      2  0 08:30 ?        00:00:00 [nfsd4]
    root       6212      2  0 08:30 ?        00:00:00 [nfsd4_callbacks]
    root       6225      2  0 08:30 ?        00:00:00 [nfsd]
    root       6229      2  0 08:30 ?        00:00:00 [nfsd]
    root       6231      2  0 08:30 ?        00:00:00 [nfsd]
    root       6235      2  0 08:30 ?        00:00:00 [nfsd]
    root       6238      2  0 08:30 ?        00:00:00 [nfsd]
    root       6240      2  0 08:30 ?        00:00:00 [nfsd]
    root       6243      2  0 08:30 ?        00:00:00 [nfsd]
    root       6247      2  0 08:30 ?        00:00:00 [nfsd]
    root      17788  16381  0 09:58 pts/0    00:00:00 grep -E --color=auto rpc|nfs

    rpc.statd 非必要,检查文件一致性,可修复文件

    rpc.mountd 挂载和卸载NFS文件系统,包括权限管理

    rpc.nfsd 最主要的NFS进程,管理客户端是否可登录

    rpc.lockd 非必要,管理文件锁,避免同时写出错

    rpc.rquotad 对远程用户提供用户配额信息

    portmap:Linux的RPC服务,它响应RPC服务的请求和与请求的RPC服务建立连接。

    4、服务配置

    nfs主要的配置文件

    • /etc/exports   主配置文件
    • /usr/sbin/exportfs
    • /var/lib/nfs/etab   服务端默认参数
    • /usr/sbin/showmount
    • /proc/mount   客户端默认参数

     主要写 /etc/exports 文件

    #[共享目录]   [客户端地址1(权限)]        [客户端地址2(权限)]

    # cat /etc/exports
    /home/share  192.168.18.0/24(rw,no_root_squash)
    /home/zhidata  192.168.18.12(rw)
    /home/upload 192.168.18.0/24(rw,all_squash,anonuid=222,anongid=222)
    /home/nfs 192.168.18.0/24(ro) *(ro,all_squash)

    参数属性

    • rw 读写
    • ro 只读
    • sync 内容同步写入磁盘
    • async 内容异步写入磁盘(不要用,会导致数据丢失)
    • no_root_squash root用户访问时拥有root权限(一般仅用于无盘系统)
    • root_squash root用户访问将权限压缩为nfsnobody
    • all_squash 所有用户访问,都会讲权限压缩为nfsnobody
    • anonuid,anongid:指定创建的文件的UID和GID。

    配置文件加载或重启nfs服务

    # systemctl reload  nfs
    # /usr/sbin/exprotfs -r
    #systemctl nfs restart
    #systemctl nfs status

    使用 showmount -e localhost查看本机的挂载情况

    # showmount -e 192.168.18.130
    Export list for 192.168.18.130:
    /home/nfs     (everyone)
    /home/upload  192.168.18.0/24
    /home/share   192.168.18.0/24
    /home/zhidata 192.168.18.12

    查看配置exportfs -v

    # exportfs -v
    /home/zhidata   192.168.18.12(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,no_all_squash)
    /home/share     192.168.18.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
    /home/upload    192.168.18.0/24(sync,wdelay,hide,no_subtree_check,anonuid=222,anongid=222,sec=sys,rw,secure,root_squash,all_squash)
    /home/nfs       192.168.18.0/24(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,no_all_squash)
    /home/nfs       <world>(sync,wdelay,hide,no_subtree_check,sec=sys,ro,secure,root_squash,all_squash)

    5、在客户端挂载文件目录

    # mount -t nfs 192.168.18.130:/home/nfs/ /opt/nfs/
    # 
    # mount -t nfs 192.168.18.130:/home/upload/ /opt/upload/   
    # 
    # mount -t nfs 192.168.18.130:/home/share/ /opt/share/       
    # 
    # mount -t nfs 192.168.18.130:/home/zhidata/ /opt/zhidata/ 

    查看挂载情况 df -h, mount l ,  cat  /etc/mtab , cat  /proc/mounts  .

    # df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/sda2             8.5G  4.5G  3.6G  56% /
    tmpfs                 490M     0  490M   0% /dev/shm
    /dev/sda1             283M   35M  234M  13% /boot
    192.168.18.130:/home/nfs/
                           18G  8.2G  9.6G  47% /opt/nfs
    192.168.18.130:/home/upload/
                           18G  8.2G  9.6G  47% /opt/upload
    192.168.18.130:/home/share/
                           18G  8.2G  9.6G  47% /opt/share
    192.168.18.130:/home/zhidata/
                           18G  8.2G  9.6G  47% /opt/zhidata
    
    # 
    # mount -l
    /dev/sda2 on / type ext4 (rw)
    proc on /proc type proc (rw)
    sysfs on /sys type sysfs (rw)
    devpts on /dev/pts type devpts (rw,gid=5,mode=620)
    tmpfs on /dev/shm type tmpfs (rw,rootcontext="system_u:object_r:tmpfs_t:s0")
    /dev/sda1 on /boot type ext4 (rw)
    none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
    vmware-vmblock on /var/run/vmblock-fuse type fuse.vmware-vmblock (rw,nosuid,nodev,default_permissions,allow_other)
    sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
    192.168.18.130:/home/nfs/ on /opt/nfs type nfs (rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12)
    192.168.18.130:/home/upload/ on /opt/upload type nfs (rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12)
    192.168.18.130:/home/share/ on /opt/share type nfs (rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12)
    192.168.18.130:/home/zhidata/ on /opt/zhidata type nfs (rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12)
    
     
    # 
    # cat /etc/mtab 
    /dev/sda2 / ext4 rw 0 0
    proc /proc proc rw 0 0
    sysfs /sys sysfs rw 0 0
    devpts /dev/pts devpts rw,gid=5,mode=620 0 0
    tmpfs /dev/shm tmpfs rw,rootcontext="system_u:object_r:tmpfs_t:s0" 0 0
    /dev/sda1 /boot ext4 rw 0 0
    none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
    vmware-vmblock /var/run/vmblock-fuse fuse.vmware-vmblock rw,nosuid,nodev,default_permissions,allow_other 0 0
    sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0
    192.168.18.130:/home/nfs/ /opt/nfs nfs rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12 0 0
    192.168.18.130:/home/upload/ /opt/upload nfs rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12 0 0
    192.168.18.130:/home/share/ /opt/share nfs rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12 0 0
    192.168.18.130:/home/zhidata/ /opt/zhidata nfs rw,vers=4,addr=192.168.18.130,clientaddr=192.168.18.12 0 0

    将挂载的文件系统设置为开机自启,写入到 /etc/fstab 中

    /etc/fstab 每行定义一个要挂载的文件系统

    系统重启开机时读取此文件,可以开机自动开启文件中的设置

    格式

    # cat /etc/fstab 
    
    #
    # /etc/fstab
    # Created by anaconda on Wed Jun  5 07:27:54 2019
    #
    # Accessible filesystems, by reference, are maintained under '/dev/disk'
    # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
    #
    UUID=297fdfcf-1370-4f48-a438-1053de66c3e4 /                       ext4    defaults        1 1
    UUID=9b94ae5b-20fb-48d6-8d71-084e27292b7f /boot                   ext4    defaults        1 2
    UUID=dcfc754d-cc85-4cb8-aa29-199637061263 swap                    swap    defaults        0 0
    tmpfs                   /dev/shm                tmpfs   defaults        0 0
    devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
    sysfs                   /sys                    sysfs   defaults        0 0
    proc                    /proc                   proc    defaults        0 0
    
    192.168.18.130:/home/nfs        /opt/nfs        nfs     defaults        0 0
    192.168.18.130:/home/upload     /opt/upload     nfs     defaults        0 0
    192.168.18.130:/home/share      /opt/share      nfs     defaults        0 0
    192.168.18.130:/home/zhidata    /opt/zhidata    nfs     defaults        0 0

    nfs优缺点

    优点:

    1. 简单,容易上手
    2. nfs数据在文件系统之上,可以看到数据。
    3. 方便,部署简单、维护简单、可控,且满足使用需求
    4. 可靠
    5. 非常稳定。

    缺点:

    1. 存在单点故障
    2. 在高并发的场合,NFS的效率性能有限(通过架构解决)。
    3. 基于IP主机名的的认证,安全性一般。
    4. 数据以明文的方式传输,数据完整性不作验证。
    5. 多台客户机连接一个nfs,连接维护麻烦。

  • 相关阅读:
    zookeeper与activemq最新存储replicatedLevelDB整合
    MySQL分表的3种方法
    mycat 从入门到放弃 (转)
    centos 7 忘记密码
    java内存溢出的情况解决方法
    跨域问题的产生及解决方法
    一次jvm调优过程
    2019年总结
    Jenkinsfile与Json的转换
    DevOps平台
  • 原文地址:https://www.cnblogs.com/zwj-linux/p/11400198.html
Copyright © 2011-2022 走看看