Linux 7搭建NFS服务

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生效。

Linux 7搭建NFS服务

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 每行定义一个要挂载的文件系统

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

格式

Linux 7搭建NFS服务

# 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,连接维护麻烦。