内容简介:所有的Web服务器会向 NFS服务器进行数据交互NFS适用于中小型企业:NFS服务器,而且默认只能有一台NFS服务器大公司或大门户(高并发):Moosefs(MFS)、GlusterFS、FastDFS等(分布式文件系统 )
1、什么是NFS
NFS(Network File System)网络文件系统
它的主要功能是通过网络(一般是局域网)让不同主机系统之间共享文件或目录
NFS客户端(应用服务器,例如web)可以挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(某一个挂载点下)
从客户端本地来看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或目录一样,而实际上却是远端的NFS服务器的目录
所有的Web服务器会向 NFS服务器进行数据交互
应用场景:
NFS适用于中小型企业:NFS服务器,而且默认只能有一台NFS服务器
大公司或大门户(高并发):Moosefs(MFS)、GlusterFS、FastDFS等(分布式文件系统 )
NFS在传输数据时使用的端口会随机选择。那么就需要RPC
NFS软件列表:
nfs-utils #NFS服务的主程序 rpcbind #RPC的主程序 安装:yum install nfs-utils rpcbind -y (服务端必须安装,客户端强烈建议安装) 检查:rpm -aq nfs-utils rpcbind
1.1 NFS工作原理流程图:
NFS服务端,首先要先启动RPC服务,在启动NFS服务,NFS服务会自动向RPC服务注册启动的端口,客户端需要通过自身的RPC服务,来向NFS服务端的RPC获取NFS的端口号,然后客户端在通过得到的端口号,单独向NFS发起TCP建立。
file:///Users/xiongminghao/Library/Mobile%20Documents/iCloud~com~coderforart~iOS~MWeb/Documents/mweb_documents_library/docs/media/15413998107562/15414008422850.jpg
1.2 NFS共享目录
NFS共享的目录:必须是实际存在的目录,要用绝对路径,注意共享目录的本地权限,如果需要读写共享,要让本地目录可以被NFS客户端的用户(nfsnobody)读写
NFS客户端地址:为NFS服务端授权的可以访问共享目录的NFS客户端地址,可为单独的IP地址或主机名、域名等,也可以使整个网段地址,还可以用“*”来匹配所有客户端服务器,没有对账号密码,几乎都是用IP地址,这些所谓的客户端一般来说是前端的业务服务器,
权限参数:对授权的NFS客户端的访问权限
NFS服务端默认配置文件路径/etc/exports,并且内容默认为空
[root@web01 ~]# ls -ld /etc/exports -rw-r--r--. 1 root root 0 Jun 7 2013 /etc/exports [root@web01 ~]# cat /etc/exports
exports配置文件的规范(两种写法):
NFS共享的目录 NFS客户端地址1(参1,参2...)客户端地址2(参1,参2...)
NFS共享的目录 NFS客户端地址1(参1,参2...)
2、NFS搭建
查看系统版本
[root@web01 ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@web01 ~]# uname -r 3.10.0-862.el7.x86_64 [root@web01 ~]# uname -m x86_64
检查并安装nfs和rpc服务
[root@nfs /]#yum install nfs-utils rpcbind -y [root@nfs /]# rpm -aq nfs-utils rpcbind rpcbind-0.2.0-44.el7.x86_64 nfs-utils-1.3.0-0.54.el7.x86_64
2.1 服务端配置
启动RPC
[root@nfs /]# systemctl start rpcbind [root@nfs /]# systemctl status rpcbind #查看rpcbind是否正常运行 ● rpcbind.service - RPC bind service Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2018-11-05 15:03:34 CST; 1min 0s ago Process: 52393 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS) Main PID: 52394 (rpcbind) CGroup: /system.slice/rpcbind.service └─52394 /sbin/rpcbind -w Nov 05 15:03:34 nfs systemd[1]: Starting RPC bind service... Nov 05 15:03:34 nfs systemd[1]: Started RPC bind service. [root@nfs /]# netstat -lntup |grep rpc tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 52394/rpcbind tcp6 0 0 :::111 :::* LISTEN 52394/rpcbind udp 0 0 0.0.0.0:841 0.0.0.0:* 52394/rpcbind udp 0 0 0.0.0.0:111 0.0.0.0:* 52394/rpcbind udp6 0 0 :::841 :::* 52394/rpcbind udp6 0 0 :::111 :::* 52394/rpcbind [root@nfs /]# lsof -i :111 #111为RPC程序端口号 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rpcbind 52394 rpc 6u IPv4 100989 0t0 UDP *:sunrpc rpcbind 52394 rpc 8u IPv4 100991 0t0 TCP *:sunrpc (LISTEN) rpcbind 52394 rpc 9u IPv6 100992 0t0 UDP *:sunrpc rpcbind 52394 rpc 11u IPv6 100994 0t0 TCP *:sunrpc (LISTEN)
启动NFS
[root@nfs /]# systemctl start nfs [root@nfs /]# systemctl status nfs ● nfs-server.service - NFS server and services Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled) Active: active (exited) since Mon 2018-11-05 15:08:02 CST; 3s ago Process: 54371 ExecStart=/usr/sbin/rpc.nfsd $RPCNFSDARGS (code=exited, status=0/SUCCESS) Process: 54366 ExecStartPre=/bin/sh -c /bin/kill -HUP `cat /run/gssproxy.pid` (code=exited, status=0/SUCCESS) Process: 54365 ExecStartPre=/usr/sbin/exportfs -r (code=exited, status=0/SUCCESS) Main PID: 54371 (code=exited, status=0/SUCCESS) CGroup: /system.slice/nfs-server.service Nov 05 15:08:02 nfs systemd[1]: Starting NFS server and services... Nov 05 15:08:02 nfs systemd[1]: Started NFS server and services.
再次查看RPC端口
#当NFS启动后,NFS向rpc注册端口 [root@nfs /]# netstat -lntup |grep rpc tcp 0 0 0.0.0.0:37998 0.0.0.0:* LISTEN 54333/rpc.statd tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 52394/rpcbind tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 54363/rpc.mountd tcp6 0 0 :::33985 :::* LISTEN 54333/rpc.statd tcp6 0 0 :::111 :::* LISTEN 52394/rpcbind tcp6 0 0 :::20048 :::* LISTEN 54363/rpc.mountd udp 0 0 0.0.0.0:841 0.0.0.0:* 52394/rpcbind udp 0 0 0.0.0.0:20048 0.0.0.0:* 54363/rpc.mountd udp 0 0 0.0.0.0:111 0.0.0.0:* 52394/rpcbind udp 0 0 0.0.0.0:45174 0.0.0.0:* 54333/rpc.statd udp 0 0 127.0.0.1:703 0.0.0.0:* 54333/rpc.statd udp6 0 0 :::45876 :::* 54333/rpc.statd udp6 0 0 :::841 :::* 52394/rpcbind udp6 0 0 :::20048 :::* 54363/rpc.mountd udp6 0 0 :::111 :::* 52394/rpcbind
提示:
查看nfs服务向rpc注册的端口信息
rpcinfo -p localhost
NFS常见进程讲解
[root@nfs /]# ps -ef|egrep "rpc|nfs" rpc 52394 1 0 15:03 ? 00:00:00 /sbin/rpcbind -w rpcuser 54333 1 0 15:08 ? 00:00:00 /usr/sbin/rpc.statd root 54341 2 0 15:08 ? 00:00:00 [rpciod] root 54363 1 0 15:08 ? 00:00:00 /usr/sbin/rpc.mountd root 54364 1 0 15:08 ? 00:00:00 /usr/sbin/rpc.idmapd root 54373 2 0 15:08 ? 00:00:00 [nfsd4_callbacks] root 54379 2 0 15:08 ? 00:00:00 [nfsd] root 54380 2 0 15:08 ? 00:00:00 [nfsd] root 54381 2 0 15:08 ? 00:00:00 [nfsd] root 54382 2 0 15:08 ? 00:00:00 [nfsd] root 54383 2 0 15:08 ? 00:00:00 [nfsd] root 54384 2 0 15:08 ? 00:00:00 [nfsd] root 54385 2 0 15:08 ? 00:00:00 [nfsd] root 54386 2 0 15:08 ? 00:00:00 [nfsd]
nfsd(rpc.nfsd) #主进程,主要是管理客户端能否登入服务端,登入者ID判别。
mountd(rpc.mountd) #管理NFS文件系统,登入者的权限管理
rpc.lockd(非必要) #用来锁定文件,用于客户端同时写入
rpc.statd(非必要) #检查文件一致性
rpc.idmapd #名字映射后台进程
将rpcbind和nfs加入开机自启动
systemctl enable rpcbind.service systemctl enable nfs-server.service
配置共享/data目录(编辑/etc/exports配置文件)
[root@nfs ~]# cat >>/etc/exports<<EOF > #shared /data by jason for bingbing at 2018-08-25 > /data 172.16.1.0/24(rw,sync) > EOF [root@nfs ~]# cat /etc/exports #shared /data by oldboy for bingbing at 2018-08-25 /data 172.16.1.0/24(rw,sync)
图解上述操作的意义:
提示:
必须要在NFS和RPC启动之后修改/etx/export文件
创建共享目录(客户端访问)
#创建/data目录 [root@nfs /]# mkdir /data -p [root@nfs /]# ls -ld /data/ drwxr-xr-x 2 root root 6 Nov 5 14:31 /data/ 将共享目录加入到nfs的虚拟用户和用户组 [root@nfs /]# chown -R nfsnobody.nfsnobody /data/ #nfsnobody是nfs的虚拟用户 [root@nfs /]# id nfsnobody uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
上述操作完毕后,平滑重启nfs
[root@nfs /]# systemctl reload nfs
使用nfs自带的showmount,测试nfs是否共享成功
#测试NFS目录是否共享成功 #在nfs端本地测试 [root@nfs /]# showmount -e localhost Export list for localhost: /data 172.16.1.0/24 #可以-e指定nfs端地址 [root@nfs /]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24
nfs端自己挂载自己的/data目录(可忽略)
[root@nfs /]# mount -t nfs 172.16.1.31:/data /mnt/ mount.nfs: /mnt is busy or already mounted [root@nfs /]# df -h |grep mnt 172.16.1.31:/data 22G 1.7G 21G 8% /mnt #挂摘成功 [root@nfs /]# umount /mnt/ #测试完成后,记得卸载
提示:
测试nfs共享目录,使用showmount命令即可
umount /mnt -lf 可强制卸载
2.2 客户端配置
安装nfs和rpc(rpc必须安装,nfs需要使用到自带的一些工具,所以两者都装)
[root@web01 ~]# yum isntall nfs-utils rpcbind -y [root@web01 ~]# rpm -qa nfs-utils rpcbind nfs-utils-1.3.0-0.54.el7.x86_64 rpcbind-0.2.0-44.el7.x86_64
启动rpc,并加入开机自启动
[root@web01 ~]# systemctl start rpcbind #启动rpc [root@web01 ~]# systemctl status rpcbind #查看rpc状态 ● rpcbind.service - RPC bind service Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled) Active: active (running) since Mon 2018-11-05 15:39:55 CST; 4s ago Process: 17432 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS) Main PID: 17433 (rpcbind) CGroup: /system.slice/rpcbind.service └─17433 /sbin/rpcbind -w Nov 05 15:39:55 web01 systemd[1]: Starting RPC bind service... Nov 05 15:39:55 web01 systemd[1]: Started RPC bind service. [root@web01 ~]# systemctl enable rpcbind.service #开机自启动
测试挂载
[root@web01 ~]# showmount -e 172.16.1.31 Export list for 172.16.1.31: /data 172.16.1.0/24 #共享目录没问题 [root@web01 ~]# telnet 172.16.1.31 111 Trying 172.16.1.31... Connected to 172.16.1.31. #连接到对端rpc也没问题 Escape character is '^]'.
将客户端的/mnt目录挂载到nfs服务端
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /mnt/ [root@web01 ~]# df -h |grep mnt 172.16.1.31:/data 22G 1.7G 21G 8% /mnt #挂载完成
在挂载目录/mnt下创建文件,然后在nfs服务端查看
#客户端创建文件 [root@web01 ~]# cd /mnt/ [root@web01 mnt]# touch test.txt [root@web01 mnt]# ll -rw-r--r-- 1 nfsnobody nfsnobody 0 Nov 5 16:05 test.txt #服务端查看 [root@nfs /]# cd /data/ [root@nfs data]# ll -rw-r--r-- 1 nfsnobody nfsnobody 0 Nov 5 16:05 test.txt 注:当客户端访问/nmt的时候,相当于是在访问172.16.1.31这个NFS服务端的/data目录
实现开机自动挂载
[root@nfs /]# echo "mount -t nfs 172.16.1.31:/data /mnt/" >>/etc/rc.local [root@nfs /]# tail -1 /etc/rc.local mount -t nfs 172.16.1.31:/data /mnt/
提示:
也可以放入/etc/fatab,需要注意一些情况
NFS网络文件系统最好不要放到fstab里实现开机挂载,
但如果在开机自启动服务里设置并启动了netfs服务,放入fastb里也是可
以开机挂载的
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Java高级架构之FastDFS分布式文件集群
- 分布式文件系统 go-fastdfs 1.3.0,增加 nginx 集群配置样例,支持文件类型上传白名单
- 分布式文件系统 go-fastdfs 1.3.0,增加 nginx 集群配置样例,支持文件类型上传白名单
- hadoop – 在YARN集群模式下使用spark / etc / hosts文件进行绑定
- Elasticsearch 集群搭建和集群原理
- Zookeeper集群 + Kafka集群 + KafkaOffsetMonitor 监控
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
极致:互联网时代的产品设计
戴维•罗斯 / 中信出版集团 / 2016-6 / 49.00元
在不远的未来,日常物品将能够迅速理解我们的需求,改善我们的生活,并随处可见。为了实现这一预期,我们需要能够发现用户使用产品的场景,找到用户高频刚需痛点的产品设计者。 站在下一个转型发展的悬崖上,我们看到技术将更具人性。随着物联网的发展,我们习以为常的数百件日常物品:汽车、钱包、手表、雨伞甚至垃圾桶,都将回应我们的需求,了解我们,学习为我们思考。最先出现的智能硬件为什么是智能手环、无人驾驶汽车......一起来看看 《极致:互联网时代的产品设计》 这本书的介绍吧!