柴少鹏的官方网站 技术在分享中进步,水平在学习中升华

Centos6.4 NFS服务器的搭建

      NFS作为一个大家所熟知的共享文件存储系统,伴随了我们的成长,随着公司规模的越来越大,NFS的使用也越来越少更多的是使用分布式来存储数据,但是我们还有很多小的环境是需要NFS的,所以这里还是要记录一下。

一、NFS的介绍

1.1 RPC介绍

http://blog.csdn.net/mindfloating/article/details/39474123

这篇文章讲的RPC还是很详细的,我们这里要知道的就是RPC是用来做远程调用的。

1.2 NFS工作原理

首先nfs服务端要先启用rpc服务,现在Centos 6系列以后,服务器为rpcbind服务。因为nfs是开启一些随机的端口,所以nfs开启的这些端口会在rpc服务里面进行注册。然后客户端通过挂载将nfs共享的目录挂载到本地的一个存在的空目录上面。然后当出现操作的时候,客户端会将请求发送给本地的VFS虚拟文件系统,也就是nfs网络文件系统,通过nfs内核将请求发送给服务端的rpc端口也就是111端口,然后rpc会将服务器nfs对应的端口返回给客户端,然后客户端会再次与nfs服务器的指定端口进行交互。将客户端一系列的open()、read()、write()函数调用传递给服务器,让服务端在本地执行。

二、NFS服务器的搭建

第一步:yum安装软件包

# yum install rpcbind nfs-utils #前者为rpc服务,后者为nfs服务

第二步:启动相关服务

# /etc/init.d/rpcbind start #优先启动rpc服务

# /etc/init.d/nfs restart   #后启动nfs服务

第三步:配置相关文件  

# cat  /etc/exports   #这就是nfs的配置文件,只能对ip进行限制,格式为要挂载目录  IP(参数设置)

/share_data 192.168.1.0/24(rw,sync)   #,最前面为要挂载的目录,如果允许所有,主机名可以用*代替,并且IP(),中间不能有空格

# /etc/init.d/nfs reload   #修改nfs配置,不要重启服务,只需要重新加载便可

#cat /var/lib/nfs/etab #可以通过查看这个配置文件查看详细的设置参数

# chown nfsnobody:nfsnobody  /share_data   #因为上面配置文件的设置,如果这里不对此共享目录授权,客户端将没有写权限

第四步:客户端挂载测试

# showmount -e 192.168.1.108    #showmount命令为查看,这就将nfs服务端共享的目录以及时权限设置查看出来了             

Export list for 192.168.1.108:

/share_data 192.168.1.0/24

# mount -t nfs 192.168.1.108:/share_data /share_data  #这是nfs的挂载命令,最后那个目录为我们客户端本地的目录

blob.png

#通过上述命令我们可以看到目录已经挂载,并且可以进行读写操作,用户属主属组为nfsnobody:nfsnobody

下面是一些NFS共享的常用参数:

ro                      只读访问  
rw                      读写访问  
sync                    所有数据在请求时写入共享  
async                   NFS在写入数据前可以相应请求  
secure                  NFS通过1024以下的安全TCP/IP端口发送  
insecure                NFS通过1024以上的端口发送  
wdelay                  如果多个用户要写入NFS目录,则归组写入(默认)  
no_wdelay               如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。  
hide                    在NFS共享目录中不共享其子目录  
no_hide                 共享NFS目录的子目录  
subtree_check           如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)  
no_subtree_check        和上面相对,不检查父目录权限  
all_squash              共享文件的UID和GID映射匿名用户anonymous,适合公用目录。  
no_all_squash           保留共享文件的UID和GID(默认)  
root_squash             root用户的所有请求映射成如anonymous用户一样的权限(默认)  
no_root_squash          root用户具有根目录的完全管理访问权限  
anonuid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的UID  
anongid=xxx 指定NFS服务器/etc/passwd文件中匿名用户的GID 


博文来自:www.51niux.com

三、NFS相关命令讲解

第一个命令:rpcinfo,rpcinfo实用工具显示那些使用portmap注册的程序的信息,并向程序进行RPC调用,检查它们是否正常运行。

# rpcinfo -p 192.168.1.108  #格式为rpcinfo -p IP或者localhost

   program vers proto   port  service

    100000    4   tcp    111  portmapper   #rpc的111端口

    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

    100024    1   udp  60403  status

    100024    1   tcp  45271  status

    100011    1   udp    875  rquotad #磁盘配合管理进程

    100011    2   udp    875  rquotad

    100011    1   tcp    875  rquotad

    100011    2   tcp    875  rquotad

    100005    1   udp  40724  mountd #接收客户端的挂载请求,端口半随机,向RPC服务注册使用的

    100005    1   tcp  38292  mountd

    100005    2   udp  50382  mountd

    100005    2   tcp  49288  mountd

    100005    3   udp  59166  mountd

    100005    3   tcp  43123  mountd

    100003    2   tcp   2049  nfs  #nfs的主程序,端口是固定的2049

    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  41783  nlockmgr #nlockmgr锁机制,当服务器端在编写文档时,禁止客户端的访问

    100021    3   udp  41783  nlockmgr

    100021    4   udp  41783  nlockmgr

    100021    1   tcp  48941  nlockmgr

    100021    3   tcp  48941  nlockmgr

    100021    4   tcp  48941  nlockmgr


第二个命令:showmount -e IP地址

showmount -a  #在服务端上面操作可以查看有哪些客户端挂载信息


第三个命令:exportfs命令

如果修改了/etc/exports文件后不需要重新激活nfs,只要重新扫描一次/etc/exports文件,并且重新将设定加载即可:

# exportfs [-aruv]

参数说明如下。

1)-a:全部挂载(或卸载)/etc/exports文件内的设定。

2)-r:重新挂载/etc/exports中的设置,此外同步更新/etc/exports及/var/lib/nfs/etab中的内容。

3)-u:卸载某一目录。

4)-v:在export时将共享的目录显示在屏幕上。


第四个命令:nfsstat 查看NFS的运行状态,对于调整NFS的运行有很大帮助。

# man netstat  #只写出主要的信息

选项

       -s,--server

              仅打印服务器端统计信息。默认值是同时打印服务器和客户端统计信息。

       -c,--client

              仅打印客户端统计信息。

       -n,-nfs

              仅打印NFS统计信息。默认为打印NFS和RPC信息。

       -2仅打印NFS v2统计信息。默认值是仅打印有关NFS版本的信息

              具有非零计数。

       -3只打印NFS v3统计信息。默认值是仅打印有关NFS版本的信息

              具有非零计数。

       -4仅打印NFS v4统计信息。默认值是仅打印有关NFS版本的信息

              具有非零计数。

       -m,--mounts

              打印有关每个挂接的NFS文件系统的信息。

              如果使用此选项,将忽略所有其他选项。

       -r,-rpc

              仅打印RPC统计信息。

        - 设施

              显示指定设施的统计信息,其必须为以下之一:

              nfs NFS协议信息,由RPC调用拆分。

              rpc常规RPC信息。

              net网络层统计信息,例如接收到的数据包数量,TCP连接数量等。

              fh服务器文件句柄缓存的使用信息,包括查找的总数和

                     点击和未命中的数量。

              rc服务器的请求回复缓存中的用法信息,包括查找的总数和

                     点击和未命中的数量。

              all显示所有上述设施。

       -v,-verbose

              这相当于-o all。

       -l,--list

              以列表形式打印信息。

       -S,--since文件

              而不是打印当前统计信息,nfsstat从文件导入统计信息并显示差异

              在这些和当前的统计之间。有效的输入文件可以是/ proc / net / rpc / nfs的形式

              (原始客户端统计信息),/ proc / net / rpc / nfsd(原始服务器统计信息)或来自nfsstat本身的保存输出

              和/或服务器状态)。保存的nfsstat输出文件中缺少的任何统计信息将被视为零。

       -Z [interval],--sleep = [interval]

              nfsstat不打印当前统计信息并立即退出,而是拍摄当前的快照

              统计和暂停,直到它收到SIGINT(通常来自Ctrl-C),此时它需要另一个

              快照并显示两者之间的差异。如果指定interval,nfsstat将打印

              自上一个报告以来发出的NFS调用数。每个间隔将重复打印统计数据

              秒。

# nfsstat -l  -4   #示例

nfs v4 server        total:      253 

------------- ------------- --------

nfs v4 server         null:        4 

nfs v4 server     compound:      249 


nfs v4 servop        total:      580 

------------- ------------- --------

nfs v4 servop       access:       16 

nfs v4 servop        close:        3 

nfs v4 servop      getattr:      160 

nfs v4 servop        getfh:       24 

nfs v4 servop       lookup:       18 

nfs v4 servop         open:       52 

nfs v4 servop    open_conf:        3 

nfs v4 servop        putfh:      203 

nfs v4 servop    putrootfh:       13 

nfs v4 servop      readdir:        5 

nfs v4 servop        renew:       25 

nfs v4 servop    restorefh:        3 

nfs v4 servop       savefh:       36 

nfs v4 servop      setattr:        3 

nfs v4 servop     setcltid:        8 

nfs v4 servop setcltidconf:        8


第五个命令: nfsiostat  

Sysstat家族包括一个名叫nfsiostat的实用程序,它和iostat有诸多类似之处,它允许你监控NFS文件系统上的读写情况,其用法也和iostat类似,最基本的命令用法是跟上几个参数和两个数字,这两个数字分别表示:(1)nfsiostat输出的间隔时间,(2)运行nfsiostat的次数,如果第二个数字留空,nfsiostat会一直执行下去,直到你按下^c停止它。

下面是参数:

选项

        -a或--attr

               显示与属性高速缓存相关的统计信息


        -d或-dir

               显示与目录操作相关的统计信息


        -h或--help

               显示帮助消息和退出


        -l LIST或--list = LIST

               仅打印第一个LIST装载点的统计信息


        -p或--page

               显示与页面缓存相关的统计信息


        -s或--sort

               按ops /秒排序NFS装载点


        -version 

               显示程序的版本号并退出

# nfsiostat  -a  1 10    #用法实例,-a显示所有,1秒一次,执行10次

192.168.1.108:/share_data/ mounted on /share_data:

   op/s         rpc bklog

   0.01            0.00

getattr:          ops/s            kB/s           kB/op         retrans         avg RTT (ms)    avg exe (ms)

                  0.001           0.000           0.352        0 (0.0%)           0.000           0.000

access:           ops/s            kB/s           kB/op         retrans         avg RTT (ms)    avg exe (ms)

                  0.000           0.000           0.000        0 (0.0%)           0.000           0.000


博文来自:www.51niux.com

四、NFS相关防火墙设置

我们一般说的NFS都是关闭防火墙的,但是NFS服务器端会开启一些随机端口,如何固定mountd,nfs,nlockmgr,portmapper,rquotad端服务口并开启防火墙呢?

首先nfs端口为2049,rpc端口为111,这两个服务的端口是固定的,其他三个服务用的是随机端口,我们来者之这三个服务为固定端口。

第一步:# vi /etc/sysconfig/nfs

#RQUOTAD_PORT=875

#LOCKD_TCPPORT=32803

#LOCKD_UDPPORT=32769

#MOUNTD_PORT=892

将上面注释掉的四句话改为下面四句话:

RQUOTAD_PORT=30001

LOCKD_TCPPORT=30002

LOCKD_UDPPORT=30003

MOUNTD_PORT=30004

第二步:# /etc/init.d/nfs restart #重启nfs服务

第三步:# rpcinfo -p  查看一下,是否生效

   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  30001  rquotad

    100011    2   udp  30001  rquotad

    100011    1   tcp  30001  rquotad

    100011    2   tcp  30001  rquotad

    100005    1   udp  30004  mountd

    100005    1   tcp  30004  mountd

    100005    2   udp  30004  mountd

    100005    2   tcp  30004  mountd

    100005    3   udp  30004  mountd

    100005    3   tcp  30004  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  30003  nlockmgr

    100021    3   udp  30003  nlockmgr

    100021    4   udp  30003  nlockmgr

    100021    1   tcp  30002  nlockmgr

    100021    3   tcp  30002  nlockmgr

    100021    4   tcp  30002  nlockmgr

第四步:开启防火墙并在客户端测试

# /etc/init.d/iptables start

# mount -t nfs 192.168.1.108:/share_data /share_data  #客户端测试 结果连接超时

mount.nfs: Connection timed out

第五步:设置防火墙并在客户端测试

下面是防火墙添加执行的命令:

http://www.51niux.com/?id=100   #请参考这篇文章在最底部有设置进行设置

# iptables-save>/etc/sysconfig/iptables  #让防火墙设置重启后依旧生效

客户端再次挂载测试:

blob.png


博文来自:www.51niux.com

五、NFS客户端开机自动挂载

第一种方法:设置/etc/fstab

# cat /etc/fstab |grep -v "^#"  #更改/etc/fstab文件

UUID=c444367d-596a-434a-afb7-326d236e156a /                       ext4    defaults        1 1

UUID=e5b8b36d-53f9-480d-86c0-83aa88f74753 /boot                   ext4    defaults        1 2

UUID=2656bc74-9647-4944-8b20-4c9cd1fc893f 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.1.108:/share_data  /share_data          nfs     rw,tcp,intr     0 0  #加入下面这句话

#下面是关于fstab格式的解释:

第一列:是挂载分区或者设备名

第二列:挂载点

第三列:filesystem:磁盘文件系统的格式,包括ext2ext3reiserfsnfsvfat 

第四列:parameters:文件系统的参数

blob.png


第五列:能否被dump
备份命令作用:dump是一个用来作为备份的命令。通常这个参数的值为0或者1

0:代表不要做dump备份

1:代表要每天进行dump的操作

2: 代表不定日期进行dump的操作

第六列是否检验扇区:开机的过程中,系统默认会以fsck检验我们系统是否为完整(clean)。

0:不要检查

1:最早检查(一般根目录会选择)

2:1级别检验完成之后进行检验

注:

使用设备名和labeluuid作为标识的不同:

使用设备名称(/dev/sda)来挂载分区时是被固定死的,一旦磁盘的插槽顺序发生了变化,就会出现名称不对应的问题,因为这个名称是会改变的。。以前一台宿主机由于盘符有的做了raid有的没有做raid,后来更换硬盘,盘符名称发送了变化,还做了lvm,当时很恶心。

不过使用label挂载就不用担心插槽顺序方面的问题。不过要随时注意你的Label name至于UUID,每个分区被格式化以后都会有一个UUID作为唯一的标识号。使用uuid挂载的话就不用担心会发生错乱的问题了。

# blkid /dev/sda1  #可以查看某个盘符的UUID

/dev/sda1: UUID="c000214c-c3df-4fc4-aa48-d8f738623caf" TYPE="ext4" 


# dumpe2fs -h /dev/sda1

dumpe2fs 1.41.12 (17-May-2010)

Filesystem volume name:   <none>  #label name

Last mounted on:          /boot #最后的挂载点

Filesystem UUID:          c000214c-c3df-4fc4-aa48-d8f738623caf  #UUID


第二种方法:添加/etc/rc.local

# vi /etc/rc.local  #添加下面两句

#nfs mount

/bin/mount -t nfs 192.168.1.108:/share_data /share_dat

注:

Centos7系统的rc.local发送了变化。把启动的命令添加到:cat /etc/rc.d/rc.local 此文件中,并且还要chmod+x /etc/rc.d/rc.local ,不然配置不生效。


第三种方法:autofs

autofs跟其他的挂载不一样,是需要的时候才会进行挂载,也就是平时不挂载,只有你去cd或者ls之类的去找这个挂载目录的时候,才会预挂载一下。

第一步:安装软件

# yum install autofs -y

第二步:修改配置文件

#vi /etc/auto.master 

/-      /etc/auto.nfs  #这句话意思是要挂载到根下面,并且配置参数的文件为/etc/auto.nfs

# cat /etc/auto.nfs  #这个文件是没有的,自行创建

/share_data   -fstype=nfs   192.168.1.108:/share_data #挂在目录  挂载文件格式   挂载来源

第三步:# /etc/init.d/autofs restart 启动autofs服务

第四步:测试

先查看一下我们没有cd到哪个挂载目录之前/分区的目录情况

blob.png

然后我们进行操作之后的状态

blob.png

注:

# cat  /etc/autofs.conf

timeout = 300   #配置文件里面定义了300秒超时


六、windows7挂载NFS

打开控制面板==》程序==》打开和关闭Windows功能

blob.png

cmd工具查看:

blob.png

挂载:

blob.pngblob.png

注:但是你进入这个挂载盘只可以查看,没有写权限,所以你得对文件夹授予777权限,这样windows机器才能去目录里面进行写入操作,所以你可以在这个挂载盘里面创建一个目录授予777权限,让windows用户进行读写操作。但是这个目录谁都可以修改并删除了,也就不好玩了。

解除挂载:

blob.png



这篇文章记录的略显简陋,随着技术的进步,现在好多复杂点的地方就用分布式来取代了,所以这里nfs的主从,drbd数据同步之类的,就不在这篇博文中记录了。

nfs就是在一些小规模的web站点集群中做静态资源共享,或者其他一些负载压力不大的情况下,还是比较实用的,一般也用于同一机房中。

nfs的用户是uid的形式,所以如果客户端与服务端的用户uid不一致,可能会造成文件在不同的服务器上面显示的用户名称不一致的情况,所以可能涉及到用统一的身份认证服务器什么的。但是作为一个标准化的运维流程,我们服务集群,每一个节点的用户以及uid都是按照统一规范走的,所以运维一定要规范、统一、标准化,这样会避免很多不必要的麻烦。

作者:忙碌的柴少 分类:网络文件共享 浏览:2384 评论:0
留言列表
发表评论
来宾的头像