NFS服务搭建与配置

NFS介绍
NFS服务搭建与配置sdb1是共享的分区

NFS服务搭建与配置

NFS通讯原理:

NFS服务搭建与配置


NFS客户端:启动RPC服务,由RPC服务通过RPC协议去和远程RPC服务进行通信(RPC服务在centos5之前叫做portmap,centos6之后叫做rpcbind)

NFS服务端:启动NFS服务和RPC服务,NFS服务本身并不监听任何端口,通讯过程基于RPC服务完成,RPC服务默认监听111端口,NFS服务在RPC服务里注册,并告知RPC通讯端口,由RPC服务通过RPC协议完成和远程客户端的通信。

NFS服务端安装配置

安装
yum install -y nfs-utils rpcbind    安装nfs包,不加rpcbind包,也会自动安装

配置
vim /etc/exports 编辑配置文件并加入如下内容:
指定共享目录并指定来源ip,配置参数
/home/nfs_share 192.168.133.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
或者:
指定共享目录并指定来源ip,配置参数
/home/nfs_share 192.168.133.128(rw,sync,all_squash,anonuid=1000,anongid=1000)

保存配置文件

创建共享目录并授权
mkdir /home/nfs_share
chmod 777 /home/nfs_share

启动服务并加入系统服务开机启动
启动 RPC服务
systemctl start rpcbind
启动NFS服务
systemctl start nfs
开机启动RPC
systemctl enable rpcbind
开机启动NFS
systemctl enable nfs

例:
[[email protected] ~]# yum install nfs-utils rpcbind
[[email protected] ~]# vim /etc/exports
/home/nfs_share 192.168.133.128(rw,sync,all_squash,anonuid=1000,anongid=1000)
[[email protected] ~]# mkdir /home/nfs_share
[[email protected] ~]# chmod 777 /home/nfs_share
[[email protected] ~]# systemctl start rpcbind
[[email protected] ~]# systemctl start nfs
[[email protected] ~]# systemctl enable rpcbind
[[email protected] ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[[email protected] ~]# netstat -lnpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name   
tcp        0      0 0.0.0.0:58863           0.0.0.0:*               LISTEN      809/rpc.statd      
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      479/rpcbind        
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      875/nginx: master p
tcp        0      0 0.0.0.0:20048           0.0.0.0:*               LISTEN      912/rpc.mountd     
tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      875/nginx: master p
tcp        0      0 0.0.0.0:46878           0.0.0.0:*               LISTEN      -                  
tcp        0      0 0.0.0.0:2049            0.0.0.0:*               LISTEN      -                  
tcp6       0      0 :::43981                :::*                    LISTEN      -                  
tcp6       0      0 :::111                  :::*                    LISTEN      479/rpcbind        
tcp6       0      0 :::20048                :::*                    LISTEN      912/rpc.mountd     
tcp6       0      0 :::40851                :::*                    LISTEN      809/rpc.statd      
tcp6       0      0 :::2049                 :::*                    LISTEN      -                  
tcp6       0      0 :::3306                 :::*                    LISTEN      1374/mysqld        
[[email protected] ~]# ps aux |grep nfs
root       983  0.0  0.0      0     0 ?        S<   12:48   0:00 [nfsd4_callbacks]
root      1022  0.0  0.0      0     0 ?        S    12:48   0:00 [nfsd]
root      1027  0.0  0.0      0     0 ?        S    12:48   0:00 [nfsd]
root      1032  0.0  0.0      0     0 ?        S    12:48   0:00 [nfsd]
root      1034  0.0  0.0      0     0 ?        S    12:48   0:00 [nfsd]
root      1038  0.0  0.0      0     0 ?        S    12:48   0:00 [nfsd]
root      1042  0.0  0.0      0     0 ?        S    12:48   0:00 [nfsd]
root      1044  0.0  0.0      0     0 ?        S    12:48   0:00 [nfsd]
root      1049  0.0  0.0      0     0 ?        S    12:48   0:00 [nfsd]
root      1772  0.0  0.0 112660   968 pts/0    R+   14:45   0:00 grep --color=auto nfs
[[email protected] ~]# ps aux |grep rpc
root       354  0.0  0.0      0     0 ?        S<   12:48   0:00 [rpciod]
root       445  0.0  0.0  43816   540 ?        Ss   12:48   0:00 /usr/sbin/rpc.idmapd
rpc        479  0.0  0.0  64956  1400 ?        Ss   12:48   0:00 /sbin/rpcbind -w
rpcuser    809  0.0  0.0  42376  1748 ?        Ss   12:48   0:00 /usr/sbin/rpc.statd
root       912  0.0  0.0  42564   944 ?        Ss   12:48   0:00 /usr/sbin/rpc.mountd
root      1774  0.0  0.0 112660   968 pts/0    R+   14:45   0:00 grep --color=auto rpc


NFS配置选项
在配置NFS服务时,配置文件/etc/exports里常用的选项

rw 读写   ro 只读

sync   同步模式,内存数据实时写入磁盘, 优点:保证数据安全,缺点:降低磁盘性能

async 异步模式,没隔一段时间将数据写入磁盘,优点:发挥磁盘性能,缺点:断电或故障时,会丢失数据

no_root_squash     客户端挂载NFS共享目录后,不限制客户端上的root权限

root_squash           客户端挂载NFS共享目录后,限制客户端上的root权限,会被限定成普通用户

all_squash              客户端上所有用户在使用NFS共享目录时都会被限定为普通用户

anonuid/anongid    和上面的限制选项搭配使用,定义被限定用户的uid和gid

客户端挂载

安装:
yum install -y nfs-utils

查看有没有,要挂载目录的权限
showmount -e 192.168.133.130  NFS服务端ip

如果报错,请检查服务端rpcbind是否监听111端口,如果rpc服务正常,请关闭服务端和客户端的防火墙和selinux,或者在防火墙做访问规则。

挂载NFS服务端的共享目录到/mnt/下
mount -t nfs 192.168.133.130:/home/nfs_share  /mnt
在客户端查看挂载是否成功
df -h

在客户端创建测试文件,放到挂载的共享目录里
touch /mnt/test.txt

在客户端查看该文件的属性,注意属主属组,并注意查看uid和gid都是1000
ls -l /mnt/test.txt

在服务端查看改文件的属性,注意属主属组,并注意查看uid和gid都是1000
ls -l /home/nfs_share/test.txt

该文件在服务端客户端uid和gid都是1000,但属主属组可能不同



exportfs命令
       在安装 nfs-utils 包的时候,也同时安装了exportfs命令,NFS服务一旦启用后不能随便改动,如果要修改或者停止NFS服务,那么必须先在客户端机器上卸载挂载的目录,然后在服务端改动或停止NFS服务。如果未在客户端先卸载已经挂载的目录,而直接在服务端改动或停止NFS服务,那么假如客户端正好有进程在访问挂载的目录,则会导致客户端的进程被挂起,在进程列表里显示成D状态(不可中断的进程),甚至会导致其它服务崩溃。
然而,如果NFS服务端共享的目录被很多客户端都挂载了,总不可能去每个客户端都去卸载一遍,这时候就用到了exportfs命令。

exportfs命令,用在NFS服务端不重启NFS服务的情况下,重新加载NFS服务的配置文件/etc/exports

用法:
exportfs -option      例如:exportfs -arv   或  exportfs -u /home/nfs_share

常用选项:
-a 全部挂载或者全部卸载
-r 重新挂载
-u 卸载某一个目录
-v 显示共享目录

Centos6中 NFS 4版本客户端的问题

NFS 4版本中,在客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、属组为nobody,即使服务端配置了no_root_squash,也依然如此,centos6系统中更为频繁。

两种解决办法:

1、客户端挂载时加上 -o nfsvers=3             指定nfs使用版本3


2、同时在服务端和客户端编辑/etc/idmapd.conf文件
修改“#Domain = local.domain.edu”  为  “Domain = xxx.com” (可自定义)
重启rpcidmapd服务(centos6)或 重启rpcbind服务(centos7)