NFS共享存储服务器

第1章 NFS介绍

1.1 什么是NFS?

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

  它的主要功能是通过网络(一般是局域网)让不同的主机

 

NFS属于本地文件存储服务:

缺点一:windows上无法使用

如果想实现windows与linux系统结合,采用文件数据共享

  a  FTP(FTP服务部署)

  b  samba服务

 

缺点二:高并发场景,以及存储量比较高的场景,对数据安全性要求比较高场景

需要采用分布式存储Moosefs(mfs)、GlusterFS、FastDFS     无法再服务器中看到真实的文件信息

1.2 NFS共享网络文件系统企业应用

主要用于存储web服务器上用户上传的数据源信息,图片 附件 头像 视频 音频

1.3 NFS文件系统存在的意义

 

  实现数据共享,数据统一一致

  软件实现:本地文件系统NFS   分布式文件系统mfs

  硬件实现:IBM (服务器 小型机 大型机 存储 DS V7000 V5000)  oracle   EMC =去IOE

互联网领域发展过程想详细了解(浪潮之巅)---AT&XX(贝尔实验室)

      冯诺伊曼

1.4 NFS网络文件系统工作方式

 

如图所示在NFS服务器端设置好一个共享目录/video后,其他有权限访问NFS服务器端的客户端都可以将这个共享目录/video挂载到客户端本地的某个挂载点(其实就是一个目录,这个挂载点目录可以自己隨意指定) 图10-5中的两个NFS客户端本地的挂载点分别为/v/video和/video,不同客户端的挂载点可以不相同。

客户端正确挂载完毕后,就可以通过NFS客户端的挂载点所在的/V/video或/video目录查看到NFS服务器端/video共享出来的目录下的所有数据。在客户端上查看时,NFS服务器端的/video目录就相当于客户端本地的磁盘分区或目录,几乎感觉不到使用上的区别,根据NFS服务器端授予的NFS共享权限以及共享目录的本地系统权限,只要在指定的NF$客户端操作挂载/video或/v/video的目录就可以将数据轻松地存取到NFS服务器端上的/Video目录中了。

第2章 NFS网络文件系统重点要了解的两个服务

 

2.1     rpc服务

 

 

 

2.2      nfs服务

 

 

 

2.3 NFS请求数据流程

当访问程序通过NFS客户端向NFS服务器存取文件时,其请求数据流程大致如下:

01.首先用户访问网站程序,由程序在NFS客户端上发出存取NFS 文件的请求,这时NFS客户端( 即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询问请求。

02.NFS服务器端的RPC 服务( rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC 服务(rpcbind服务)。

03.此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据。

04.NFS客户端把数据存取成功后,返回给前端访问程序,告知用户存取结果,作为网站用户,就完成了一次存取操作。

因为NFS的各项功能都需要向RPC 服务(rpcbind服务)注册,所以只有RPC 服务才能获取到NFS服务的各项功能对应的端口号( portnumber) PID.NFS在主机所监听的IP等信息,而NFS 客户端也只能通过向RPC 服务询问才能找到正确的端口。也就是说,NFS 需要有RPC服务的协助才能成功对外提供服务。从上面的描述,我们不难推断,无论是NFS客户端还是NFS服务器端,当要使用NFS 时,都需要首先启动RPC 服务,NFS 服务必须在RPC 服务启动之后启动,客户端无需启动NFS服务,但需要启动RPC服务。

 

第3章 NFS实践操作

3.1 NFS服务端部署过程

第一个里程碑-确认软件是否已经安装,安装NFS服务相关软件

       rpm -qa|grep nfs

       rpm -qa|grep rpc

  # 安装rpcbind nfs-utils服务程序,并进行验证安装是否成功

     yum install -y nfs-utils rpcbind

     rpm -qa nfs-utils rpcbind

  # 第二个里程碑-编写nfs配置文件

  nfs配置文件默认存在/etc/exports

  vim /etc/exports

  #share /data by oldboy for share at 20170220

  /data   172.16.1.0/24(rw,sync) 

  第一部分:/data             --指定共享目录信息

  第二部分:172.16.1.0/24     --指定了一个网段信息,表示允许指定的网段主机挂载到我本地的共享目录上

  第三部分:(rw,sync)         --表示定义共享参数信息,

                                rw     表示读写,对共享目录设置的权限

                                sync   同步,数据会先写入到NFS服务器内存中,会立刻同步到磁盘里面==直接存储硬盘中

                               

  # 第三个里程碑:创建共享目录,进行权限设定

  mkdir /data -p

  chown -R nfsnobody.nfsnobody /data

  说明:NFS共享目录管理用户为nfsnobody,此用户不用创建,安装nfs软件时会自动创建

 

  # 第四个里程碑:启动服务

  首先启动,rpc服务

  /etc/init.d/rpcbind start

  rpcbind服务启动信息查看

  [root@nfs01 ~]# ps -ef|grep rpcbind

  rpc        4050      1  0 10:55 ?        00:00:00 rpcbind

  root       4054   3878  0 10:55 pts/1    00:00:00 grep --color=auto rpcbind

  [root@nfs01 ~]# netstat -lntup|grep 111

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

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

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

  udp        0      0 :::111                      :::*                                    4050/rpcbind       

  [root@nfs01 ~]# 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

 

  其次启动,nfs服务

  /etc/init.d/nfs start

  nfs服务启动后,查看信息

  [root@nfs01 ~]# ps -ef|grep nfs

  root       4112      2  0 10:58 ?        00:00:00 [nfsd4]

  root       4113      2  0 10:58 ?        00:00:00 [nfsd4_callbacks]

  root       4114      2  0 10:58 ?        00:00:00 [nfsd]

  root       4115      2  0 10:58 ?        00:00:00 [nfsd]

  root       4116      2  0 10:58 ?        00:00:00 [nfsd]

  root       4117      2  0 10:58 ?        00:00:00 [nfsd]

  root       4118      2  0 10:58 ?        00:00:00 [nfsd]

  root       4119      2  0 10:58 ?        00:00:00 [nfsd]

  root       4120      2  0 10:58 ?        00:00:00 [nfsd]

  root       4121      2  0 10:58 ?        00:00:00 [nfsd]

  root       4156   3878  0 10:59 pts/1    00:00:00 grep --color=auto nfs

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

  [root@nfs01 ~]# 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  33411  mountd

    100005    1   tcp  30112  mountd

    100005    2   udp  57676  mountd

    100005    2   tcp  47232  mountd

    100005    3   udp  52338  mountd

    100005    3   tcp  22981  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  64834  nlockmgr

    100021    3   udp  64834  nlockmgr

    100021    4   udp  64834  nlockmgr

    100021    1   tcp  29200  nlockmgr

    100021    3   tcp  29200  nlockmgr

    100021    4   tcp  29200  nlockmgr

 

  [root@nfs01 ~]# showmount -e 10.0.0.31

  Export list for 10.0.0.31:

  [root@nfs01 ~]# /etc/init.d/nfs restart

  Shutting down NFS daemon:                                  [  OK  ]

  Shutting down NFS mountd:                                  [  OK  ]

  Shutting down NFS quotas:                                  [  OK  ]

  Shutting down RPC idmapd:                                  [  OK  ]

  Starting NFS services:                                     [  OK  ]

  Starting NFS quotas:                                       [  OK  ]

  Starting NFS mountd:                                       [  OK  ]

  Starting NFS daemon:                                       [  OK  ]

  Starting RPC idmapd:                                       [  OK  ]

  [root@nfs01 ~]# showmount -e 10.0.0.31

  Export list for 10.0.0.31:

  /data 172.16.1.0/24

  至此:服务端部署配置完成NFS客户端部署过程

3.2  NFS客户端部署过程

第一个里程碑:确认软件有没有,进行nfs rpc服务软件安装部署

  # 检查软件是否安装

  # 安装软件

  yum install rpcbind nfs-utils -y

  PS:nfs软件安装后,不需要启动nfs服务

      rpcbind软件安装后,也可以不启动rpcbind服务

 

  如果nfs软件不安装会造成的问题

  a 客户端无法使用showmountmingling

  b 客户端无法识别nfs文件系统类型

 

  第二个里程碑:启动rpcbind服务

  /etc/init.d/rpcbind start

 

  第三个里程碑:检查nfs服务端是否有可以进行共享挂载的目录

  [root@nfs01 ~]# rpm -qf `which showmount`

  nfs-utils-1.2.3-75.el6.x86_64

  说明:showmount使用,需要安装nfs-utils软件

 

  第四个里程碑:进行nfs客户端挂载

  mount -t nfs  172.16.1.31:/data   /mnt

 

  第五个里程碑:进行检查测试

  [root@backup ~]# df -h

  Filesystem         Size  Used Avail Use% Mounted on

  /dev/sda3          8.8G  2.0G  6.4G  24% /

  tmpfs              491M     0  491M   0% /dev/shm

  /dev/sda1          190M   40M  141M  22% /boot

  172.16.1.31:/data  8.8G  1.6G  6.8G  19% /mnt

  # 本地nfs客户端进行 增删改数据  等价于在nfs服务端共享目录中进行的操作

  [root@backup mnt]# touch oldboy.txt

  touch: cannot touch `oldboy.txt': Permission denied

  [root@backup mnt]# touch oldboy.txt

  [root@backup mnt]# ll

  total 0

  -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 11:24 oldboy.txt

  [root@backup mnt]# echo "HQ hen danchun" >oldboy.txt

  [root@backup mnt]# cat oldboy.txt

  HQ hen danchun

  [root@backup mnt]# rm -f oldboy.txt

  [root@backup mnt]# ll

  total 0

  至此,客户端部署过程完毕

第4章 知识扩展

4.1 NFS服务相关进程信息说明

rpcinfo -p localhost

 服务或进程名

说明

portmapper

rpcbind服务的进程(centod5  protmap centos6 rpcbind)

rquotad

磁盘配额进程

mountd

服务端挂载进程,提供客户端进行挂载操作

nfs/nfs_acl

nfs服务进程

rpc.idmapd(重要)

用户映射或用户压缩(名字映射后台进程)

 

  

 4.2 NFS 服务端设置 rpcbind nfs服务开机自启动

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

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

 

4.3 NFS配置文件编写说明

官方举例配置

    EXAMPLE

       # 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)

企业生产环境中常见的NFS配置实例:

常用格式说明

要共享的目录客户端IP地址或IP段(参1..2...

配 置 例一

 

/data 10 0.0 0/24( rw,sync )

说明:允许客户端读写,并且数据同步写入到服务器端的磁盘里

注意: 24和" (" 之间不能有空格

 

配置例二

 

/data10.0.00/24(rw,sync,allsquash,anonuid=2000,anongid=2000 )

说明: 允许客户端读写,井且数据同步写到服务器端的磁盘里,并且指定客户端的用户UID和GID.早期生产环境的一种配置。适合多客户端共享一个NFS服务单目录,如果所有服务器nfsnobody账户UID那是65534,则本例没什么必要了。早期centos5.5的系统默认情况下nfsnobody的UID不一定是65534,此时如果这些服务器共享一个NFS目录,就会出现访问权限问题.

配置例三

 

/home/oldboy 10.0.0.0/24( ro )

说明只读共享

用途:例如在生产环境中,开发人员有查看生产服务器日志的需求,但又不希望给开发生产服务器的权限,那么就可以给开发提供从某个测试服务器NFS客户端上查看某个生产服务器的日志目录(NFS共享)的权限,当然这不是唯一的方去,例如可以把程序记录的日志发送到测试服务器供开发查看或者通过收集日志等其它方式展现

/etc/exports文件配置格式为:

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

    或

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

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

注意:nfs服务默认没有认证机制,安全性不如分布式文件系统

          只能通过控制配置文件中网络地址信息,实现安全性

实践操作:

  nfs客户端进行测试:

    [root@backup mnt]# touch oldboy.txt

    [root@backup mnt]# ll

    total 0

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:33 oldboy.txt

    [root@backup mnt]# su - oldboy

    [oldboy@backup ~]$ cd /mnt

    [oldboy@backup mnt]$ touch oldboy1.txt

    [oldboy@backup mnt]$ ll

    total 0

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 oldboy1.txt

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:33 oldboy.txt

 

    nfs配置参数实践:all_squash

    nfs服务端配置:

    [root@nfs01 data]# vim /etc/exports

    #share /data by oldboy for share at 20170220

    /data 172.16.1.0/24(rw,sync,no_all_squash,root_squash)

    # 配置修改需要平滑重启nfs服务

    /etc/init.d/nfs reload   

  

    nfs客户端测试:

    [root@backup /]# umount /mnt

    [root@backup /]# mount -t nfs  172.16.1.31:/data   /mnt

    [root@backup /]# df -h

    Filesystem         Size  Used Avail Use% Mounted on

    /dev/sda3          8.8G  2.0G  6.4G  24% /

    tmpfs              491M     0  491M   0% /dev/shm

    /dev/sda1          190M   40M  141M  22% /boot

    172.16.1.31:/data  8.8G  1.6G  6.8G  19% /mnt

    [root@backup /]# cd /mnt/

    [root@backup mnt]# ll

    total 0

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 oldboy1.txt

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:33 oldboy.txt

    [root@backup mnt]# touch oldboy2.txt

    [root@backup mnt]# su - oldboy

    [oldboy@backup ~]$ cd /mnt

    [oldboy@backup mnt]$ touch oldboy3.txt

    touch: cannot touch `oldboy3.txt': Permission denied

   

    nfs配置参数实践:no_root_squash(root用户不进行压缩映射)

    nfs服务端查看共享目录数据权限

    [root@nfs01 data]# ll

    total 0

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 oldboy1.txt

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:38 oldboy2.txt

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:33 oldboy.txt

   

    nfs服务进行配置修改:

    [root@nfs01 data]# vim /etc/exports

    #share /data by oldboy for share at 20170220

    /data 172.16.1.0/24(rw,sync,no_root_squash)

    # 配置修改需要平滑重启nfs服务

    /etc/init.d/nfs reload

   

    nfs客户端进行测试:

    [root@backup /]# umount /mnt

    [root@backup /]# mount -t nfs 172.16.1.31:/data /mnt

    [root@backup /]# df -h

    Filesystem         Size  Used Avail Use% Mounted on

    /dev/sda3          8.8G  2.0G  6.4G  24% /

    tmpfs              491M     0  491M   0% /dev/shm

    /dev/sda1          190M   40M  141M  22% /boot

    172.16.1.31:/data  8.8G  1.6G  6.8G  19% /mnt

    [root@backup /]# cd /mnt

    [root@backup mnt]# ll

    total 0

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 oldboy1.txt

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:38 oldboy2.txt

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:33 oldboy.txt

    [root@backup mnt]# touch oldboy4.txt

    [root@backup mnt]# ll

    total 0

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:34 oldboy1.txt

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:38 oldboy2.txt

    -rw-r--r-- 1 root      root      0 Oct 13 12:45 oldboy4.txt

    -rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 13 12:33 oldboy.txt

    [root@backup mnt]# rm ./* -rf

    [root@backup mnt]# ll

    total 0

posted @ 2019-09-19 16:12  巴黎斜塔  阅读(715)  评论(0编辑  收藏  举报