NFS
NFS使用案例(centos7)
环境:服务端10.220.5.66 客户端:10.220.5.65
实现步骤
一:安装nfs的服务端(nfs rpc)
[root@66 ~]# yum install nfs-utils rpcbind -y
(客户端仅仅需要安装nfs,不需要配置和启动)
二,启动服务
[root@66 ~]# systemctl start rpcbind
[root@66 ~]# systemctl start nfs
三,检查rpc中注册使用的端口信息(服务器端)
格式:rpcinfo -p 主机地址 <<<这里指定得是注册了NFS端口号
[root@66~]# 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 100024 1 udp 58898 status 100024 1 tcp 47099 status 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 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 57332 nlockmgr 100021 3 udp 57332 nlockmgr 100021 4 udp 57332 nlockmgr 100021 1 tcp 33277 nlockmgr 100021 3 tcp 33277 nlockmgr 100021 4 tcp 33277 nlockmgr
说明:
rpc端口号为111,剩下的为nfs启用的端口号
补充:错误案例
[root@66 ~]# rpcinfo -p localhost rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
说明rpcbind没有服务没有启动,如果rpcbind服务启动了仍然报这个错,说明可能是防火墙没关,也有可能防火墙开了配置出问题了,需要修改防火墙规则,让访问111端口的数据通过
注意:
rpc服务的端口是111
四,安装软件(客户端,只需要安装rpcbind)
[root@65~]# yum install -y rpcbind
五,启动服务(客户端)
[root@65 ~]# systemctl start rpcbind
六,测试是否可以访问nfs主机上的rpc服务进程(客户端)
[root@65 ~]# rpcinfo -p 10.220.5.66 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 100024 1 udp 58898 status 100024 1 tcp 47099 status 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 57332 nlockmgr 100021 3 udp 57332 nlockmgr 100021 4 udp 57332 nlockmgr 100021 1 tcp 33277 nlockmgr 100021 3 tcp 33277 nlockmgr 100021 4 tcp 33277 nlockmgr
若果访问失败有以下可能:
1:服务端rpc服务没开启,或客户端服务没开启
2:防火墙没关闭
第五步:创建共享目录(客户端)
[root@66~]# mkdir /data
[root@66 ~]# vim /etc/exports
/data 10.220.5.0/24(rw,sync)
重启nfs
[root@66 ~]# systemctl restart nfs
查看所共享的目录(服务端)
格式:showmonut -e nfs的服务器ip地址
[root@66~]# showmount -e 127 Export list for 127.0.0.1: /data 10.220.5.0/24
查看所共享的目录(客户端)
[root@65DRslave ~]# showmount -e 10.220.5.66
Export list for 10.220.5.66: <<<服务端ip
/data 10.220.5.0/24
六,确保服务端客户端的时间一致(在生产环境中使用时间服务器保证时间同步,这次试验使用date命令同步)
[root@66~]# date 111016362018.00 Sat Nov 10 16:36:00 CST 2018 <<<服务端
[root@65 ~]# date 111016362018.00 Sat Nov 10 16:36:00 CST 2018 <<<客户端
七,在客户端挂载服务端所共享的目录(客户端)
格式:mount -t nfs nfs的ip地址:共享目录 挂载点
[root@65 ~]# mount -t nfs 10.220.5.66:/data /nfs
八,查看是否挂载成功(客户端)
[root@65 ~]# mount
10.220.5.66:/data on /nfs type nfs4 (rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=10.220.
5.65,local_lock=none,addr=10.220.5.66)
说明挂载成功
九,进入/nfs目录中,是否能创建目录
[root@65 nfs ~]# mkdir a mkdir: cannot create directory ‘a’: Permission denied <<<发现没有权限
由于服务器端的/data目录是挂载到客户端/nfs目录下,在/nfs目录下创建目录或者文件是是以root的身份,也有可能是普通用户,当
在/nfs目录中创建文件或者文件时,是调用的服务器端的nfs,将所创建的目录或者文件写入到服务器端/data目录中的,是否能写入是有nfs决定了客户端是否有权限在/data目录中写东西,要想能写入东西,需要在服务端修改/data目录的权限
十,修改服务端权限
[root@66~]# chmod 777 /data <<<服务端 在工作中不要付权777,因为权限太大了,很危险
十一,在客户端再次创建目录,看看是否有权限
[root@65 ~]# mkdir abc <<<客户端
发现有权限能创建了
配置文件:
/etc/exports: nfs主配置文件,用于共享目录,同时指定权限
/va/lib/nfs/etab: 这个记录了所共享的目录的详细权限属性信息
/usr/sbin/shoumount:查看nfs所共享的目录列表
/usr/sbin/rpcinfo: 查看rpc中注册的端口信息
/usr/sbin/exportfs :管理nfs的命令
实现类似于reload的方式:exportfs -rv
/etc/exports说明
nfs主配置文件,共享本地目录给其他主机
一行是一个共享的目录
格式:
[共享目录] [主机1(参数1,参数2....)] [主机1(参数1,参数2....)]
例子:
/data 10.220.5.0/25(rw) 192.168.6.0/24(ro)
主机的表示方式
1.单一主机:比如:192.168.6.22
2.整个网络: 比如:192.168.6.0/24
3.主机名
4.一个域:比如:baidu.com
参数的表示方式
ro:只读
rw:读写
sync:同步写入
async:异步写入
secure:限制客户端只能使用1024以下的端口链接nfs
insecure:运行nfs启动的时候用1024以上的端口
wdelay:多个用户要在nfs中进行写入操作的话,等有了多个写操作以后才一并执行(为了提升磁盘的IO性能)
no_wdelay:当用户在nfs执行写入的时候,立刻执行写入(当设置了aysnc,就不需要这个了)
hide:隐藏共享目录中的子目录
nohide:不隐藏
all_squash:无论你以哪个用户身份来使用nfs,都将用户身份转换为一个特定的用户
no_root_squash:如果你访问nfs的时候不是root身份,就将用户身份转换为一个特定的用户
root_squash:如果你访问nfs的时候是root身份,就将用户身份转换为一个特定的用户
anonuid & anongid:指定所所要转换成的那个用户的uid 和 gid
注意:
shoumount nfs-utils的的一个组件,如果客户端需要使用showmount,那么需要安装nfs-utils
nfs的自动挂载
挂载nfs的命令写入在/etc/rc.local中
注意:
一般的设备,在实现开机自动挂载是时候,建议写在/etc/fstab中,但是nfs分区是不能写在/etc/fstab中,因为在系统启动过程中是先读取/etc/fstab挂载分区,然后在挂载网络模块
查看详细挂载选项/proc/mounts
选项
hard:当RPC下线的时候,客户端无法联系大服务器,则会连续发请求,知道能联系到服务器
soft:当RPC下线的时候,客户端无法联系大服务器,则会连续发请求,知道能联系到服务器
fg:前台,在挂载的时候,如果无法联系到服务器端,会重复尝试,一直到挂载成功(前台进行)
bg:后台,在挂载的时候,如果无法联系到服务器端,会重复尝试,一直到挂载成功(后台进行)
rsize=#: 设置使用nfs进行读操作的时候,每次传输的吞吐块的大小
wsize=#: 设置使用nfs进行读操作的时候,每次传输的吞吐块的大小