NFS网络文件系统(网络共享文件服务)

01. 什么是NFS

NFS是Network File System的缩写,中文意思是网络文件系统,

它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录

互联网中小型网站集群机构后端常用NFS进行数据共享,

如果大型网站,那么有可能还会用到更复杂的分布式文件系统,例如:Moosefs(mfs)、GlusterFS、FastDFS

后面会发不关于分布式存储的文章(从0基础学习分布式存储)

说明:NFS服务只能应用在linux系统上,FTP samba服务均都支持linux和windows

02. NFS服务应用

NFS是一个共享存储服务,为什么要有共享存储?

  1. 实现数据信息的共享(数据库内容)

  2. 实现数据信息的一致 (网站代码、展示内容)

03. 共享存储方式

硬件实现共享存储

IBM oracle EMC == 去除IOE

软件实现共享存储

NFS FTP samba

04. NFS共享系统原理

  1. 在NFS服务端创建共享目录
  2. 通过mount网络挂载,将NFS客户端本地目录挂载到NFS服务端共享目录上
  3. NFS客户端挂载目录上创建、删除、查看数据操作,等价于在服务端进行的创建 删除 查看操作

05. 什么是RPC(Remote Procedure Call)

RPC服务相当于中介,NFS相当于房源,NFS客户端相当于租客

06. NFS的工作流程原理

客户端 3步操作
服务端 3步操作

07. NFS服务部署过程

服务端部署

第一个历程碑:检查NFS RPC服务软件有没有安装

rpm -qa|grep nfs
rpm -qa|grep rpc
说明:默认centos系统没有安装nfs与rpc服务软件

第二个历程碑:进行yum安装nfs与rpc服务软件

yum install -y nfs-utils rpcbind
rpm -ql nfs-utils      -ql 参数表示查看安装好的软件,都安装了哪些信息
/etc/rc.d/init.d/nfs   -- 启动脚本命令
/usr/sbin/exportfs     -- NFS共享服务的管理命令
/usr/sbin/showmount    -- 查看NFS共享列表信息

rpm -ql rpcbind
/etc/rc.d/init.d/rpcbind   -- 启动脚本命令
/usr/sbin/rpcinfo          -- 查看NFS注册信息的

rpm -qf `which ssh`        -- 查看某个命令或文件属于那个大礼包

第三个里程碑:进行NFS配置文件编写

#NFS服务配置文件

cat >>/etc/exports<

第四个历程碑:创建共享目录

mkdir -p /data
chown -R nfsnobody.nfsnobody /data
说明:nfsnobody用户是在进行nfs软件yum安装时,自动创建的

第五个历程碑:启动服务

启动服务
[root@nfs01 data]# /etc/init.d/rpcbind start
Starting rpcbind:                                          [  OK  ]
查看rpc注册信息
[root@nfs01 data]# rpcinfo -p localhost
   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
[root@nfs01 data]# 
在启动nfs服务
[root@nfs01 data]# /etc/init.d/nfs start
Starting NFS services:                                     [  OK  ]
Starting NFS quotas:                                       [  OK  ]
Starting NFS mountd:                                       [  OK  ]
Starting NFS daemon:                                       [  OK  ]
Starting RPC idmapd:                                       [  OK  ]
[root@nfs01 data]# rpcinfo -p localhost
   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
    100011    1   udp    875  rquotad
    100011    2   udp    875  rquotad
    100011    1   tcp    875  rquotad
    100011    2   tcp    875  rquotad
    100005    1   udp  42079  mountd
    100005    1   tcp  32847  mountd
    100005    2   udp  41905  mountd
    100005    2   tcp  54575  mountd
    100005    3   udp  34390  mountd
    100005    3   tcp  51479  mountd
    100003    2   tcp   2049  nfs
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    2   tcp   2049  nfs_acl
    100227    3   tcp   2049  nfs_acl
    100003    2   udp   2049  nfs
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    2   udp   2049  nfs_acl
    100227    3   udp   2049  nfs_acl
    100021    1   udp  63443  nlockmgr
    100021    3   udp  63443  nlockmgr
    100021    4   udp  63443  nlockmgr
    100021    1   tcp  29131  nlockmgr
    100021    3   tcp  29131  nlockmgr
    100021    4   tcp  29131  nlockmgr
[root@nfs01 data]# 

将服务设置为开机自启动

# chkconfig rpcbind on
# chkconfig nfs on
rpc和nfs的配置文件
[root@nfs01 data]# chkconfig rpcbind on 
[root@nfs01 data]# chkconfig nfs on 
[root@nfs01 data]# vim /etc/init.d/rpcbind 
[root@nfs01 data]# vim /etc/init.d/nfs

第六个历程碑:检查NFS服务配置,以及本地测试挂载

[root@nfs01 data]# showmount -e localhost
Export list for localhost:
/data 172.16.1.0/24
[root@nfs01 data]# 
#本地挂载
[root@nfs01 ~]# mount -t nfs 172.16.1.31:/data/ /mnt/
[root@nfs01 ~]# df -h
Filesystem          Size  Used Avail Use% Mounted on
/dev/sda3            19G  1.5G   16G   9% /
tmpfs               491M     0  491M   0% /dev/shm
/dev/sda1           190M   35M  146M  19% /boot
172.16.1.31:/data/   19G  1.5G   16G   9% /mnt
[root@nfs01 ~]# 

#NFS客户端配置

第一个里程碑:安装相应nfs客户端软件

yum install -y rpcbind nfs-utils    

如果不安装rpcbind软件:rpcinfo命令无法使用

如果不安装nfs-utils软件:showmount命令无法使用;客户端挂载的时候无法识别nfs文件系统类型

第二个里程碑:rpcbind服务可以启动(也可以不启动)

/etc/init.d/rpcbind start

第三个里程碑:进行挂载前测试

[root@backup ~]# rpcinfo -p 172.16.1.31
[root@backup ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/24
[root@backup ~]# 

第四个里程碑:进行共享目录挂载

[root@backup ~]# mount -t nfs 172.16.1.31:/data /root/date/
[root@backup ~]# df -h
Filesystem         Size  Used Avail Use% Mounted on
/dev/sda3           19G  1.5G   16G   9% /
tmpfs              491M     0  491M   0% /dev/shm
/dev/sda1          190M   35M  146M  19% /boot
172.16.1.31:/data   19G  1.5G   16G   9% /root/date
[root@backup ~]# 

08、exports配置文件格式

NFS共享目录 NFS客户端地址1(参数1,参数2,...) 客户端地址2(参数1,参数2,...)

NFS共享目录 NFS客户端地址(参数1,参数2,...)

exports配置文件重要参数说明

   no_root_squash           --- root用户不进行映射压缩
   root_squash              --- root用户进行映射压缩
   all_squash               --- 所有用户都进行压缩
   no_all_squash            --- 所有用户都不进行压缩