网站首页 > 技术文章 正文
一、NFS服务简介
NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。
NFS允许一个系统在网络(一般是局域网)上与它人共享目录和文件。通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件。它可以使本地工作站使用更少的磁盘空间,用户不必在每个网络上机器里头都有一个home目录。Home目录 可以被放在NFS服务器上并且在网络上处处可用。
NFS网络文件系统很像Windows系统的网络共享、网络驱动器映射。
NFS只是一种文件系统,本身没有传输功能,是基于RPC协议实现的,才能达到两个Linux系统之间的文件目录共享;RPC( Remote Procedure Call ),远程过程调用RPC是能使客户端执行其他系统中程序的一种机制。NFS本身是没有提供信息传输的协议和功能的,但NFS却能让我们通过网络进行资料的分享,这是因为NFS使用了一些其它的传输协议。而这些传输协议用到这个RPC功能的。可以说NFS本身就是使用RPC的一个程序。或者说NFS也是一个RPC SERVER。所以只要用到NFS的地方都要启动RPC服务,不论是NFS SERVER或者NFS CLIENT。这样SERVER和CLIENT才能通过RPC来实现PROGRAM PORT的对应。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。
二、企业应用场景
2.1 企业应用介绍
在企业集群架构场景中,NFS一般被用来存储共享视频、音乐、图片、附件等一些静态资源文件。然后前端的节点访问这些静态源文件时就会读取NF上的资源。NFS在当前互联网系统架构中也是比较常用的数据存储服务之一(中小型网站公司应用频率较高),而相对于大公司或大门户网站除了使用NFS外,还可能会用到一些分布式文件系统FastDFS Moosefs(mfs)等。
注意:网站的主程序不要放在NFS。
2.2 NFS在企业架构中的位置,如下图01
2.3 NFS在企业架构中的角色
例如下图02中,A用户上传LOGO图片到web01服务器中,然后用户B访问这张图片,结果用户B的访问请求被负载均衡器分发到web02中,因为web02没有这张图片,所以无法看到用户A所以上传的图片。当有一个共享存储时(如下图03),用户A上传的图片被放到了共享存储里,所以无论用户B与A 被分发到web01还是web02上,图片都被存储在共享存储上。所以NFS共享存储就解决了这个问题。
无NFS共享存储:
有NFS共享存储:
三、NFS服务环境准备
服务器系统角色IPCentos6.5x86_64NFS服务端(NFS_server)192.168.1.104Centos6.5x86_64NFS 客户端(blog01)192.168.1.106Centos6.5x86_64NFS 客户端(blog02)192.168.1.107
3.1 Centos6.5x86_64 操作系统与内核版本信息
[root@NFS_server ~]# cat /etc/redhat-release CentOS release 6.5 (Final) [root@NFS_server ~]# uname -r 2.6.32-431.el6.x86_64 [root@NFS_server ~]# uname -m x86_64
3.2 所有机器关闭防火墙、关闭selinux(以服务端为例)
[root@NFS_server ~]# /etc/init.d/iptables stop [root@NFS_server ~]# chkconfig --level 35 iptables off [root@NFS_server ~]# setenforce 0 setenforce: SELinux is disabled [root@NFS_server ~]# sed -i 's#SELINUX=enforcing#SELINUX=disabled#g' /etc/selinux/config
四、NFS服务端的安装与设置
4.1 部署NFS服务,需要安装下面的软件包:
- nfs-utils:这个是NFS服务的主程序
- rpcbind:Centos6.X下面RPC的主程序(X下面为portmap)
在启动任何一个RPC程序之前,需要做好端口的对应映射工作,这个映射工作就是由rpcbind服务来完成的。因此,在提供NFS之前必须先启动rpcbind服务。
Centos6.5默认是没有安装NFS软件包的(Centos5默认安装)
[root@NFS_server ~]# rpm -aq nfs-utils rpcbind [root@NFS_server ~]# yum install nfs-utils rpcbind -y ....忽略... [root@NFS_server ~]# rpm -aq nfs-utils rpcbind rpcbind-0.2.0-12.el6.x86_64 nfs-utils-1.2.3-70.el6_8.1.x86_64 [root@NFS_server ~]#
4.2启动rpcbind服务
[root@NFS_server ~]# /etc/init.d/rpcbind status <======检查rpcbind服务的状态 rpcbind is stopped [root@NFS_server ~]# rpcinfo -p localhost <======rpcbind服务未启动检查rpcinfo信息 rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused [root@NFS_server ~]# /etc/init.d/rpcbind start <======启动rpcbind服务 Starting rpcbind: [ OK ] [root@NFS_server ~]# [root@NFS_server ~]# [root@NFS_server ~]# rpcinfo -p localhost <======启动后查看RPC服务注册的商品信息 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 [root@NFS_server ~]# chkconfig rpcbind on <=====设置rpcbind开机自启动 [root@NFS_server ~]# chkconfig --list rpcbind <======检查rpcbind开机是否自启动 rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@NFS_server ~]# <span style="font-size: 12pt;"><strong>4.3启动NFS服务</strong></span> [root@NFS_server ~]# /etc/init.d/rpcbind status <======检查rpcbind服务 rpcbind (pid 29910) is running... [root@NFS_server ~]# /etc/init.d/nfs status <======检查nfs服务 rpc.svcgssd is stopped rpc.mountd is stopped nfsd is stopped rpc.rquotad is stopped [root@NFS_server ~]# /etc/init.d/nfs start <======启动nfs服务 Starting NFS services: [ OK ] Starting NFS quotas: [ OK ] Starting NFS mountd: [ OK ] Starting NFS daemon: [ OK ] Starting RPC idmapd: [ OK ] [root@NFS_server ~]# [root@NFS_server ~]# /etc/init.d/nfs status <======检查NFS服务 rpc.svcgssd is stopped rpc.mountd (pid 30010) is running... nfsd (pid 30025 30024 30023 30022 30021 30020 30019 30018) is running... rpc.rquotad (pid 30006) is running... [root@NFS_server ~]# [root@NFS_server ~]# rpcinfo -p localhost <======查看NFS服务向RPC服务注册的端口信息 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 1661 mountd 100005 1 tcp 64119 mountd 100005 2 udp 26979 mountd 100005 2 tcp 40373 mountd 100005 3 udp 52048 mountd 100005 3 tcp 63236 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 1036 nlockmgr 100021 3 udp 1036 nlockmgr 100021 4 udp 1036 nlockmgr 100021 1 tcp 4416 nlockmgr 100021 3 tcp 4416 nlockmgr 100021 4 tcp 4416 nlockmgr [root@NFS_server ~]# [root@NFS_server ~]# chkconfig nfs on <=====设置NFS开机自启动 [root@NFS_server ~]# chkconfig --list nfs <=====检查NFS是否开机自启动 nfs 0:off 1:off 2:on 3:on 4:on 5:on 6:off [root@NFS_server ~]#
小问题:
在工作场景中当机器的服务多了,都用chkconfig管理,当管理这服务器的运维离职或业务需要迁移的时候,不容易查看出有哪些服务,而将所有服务的开机自启动加入/etc/rc.local这样规范的好处是,当服务器人员离职,或者要迁移业务都可以查看/etc/rc.load 很容易就查到的到相关的服务,也方便管理。
[root@NFS_server ~]# tail -4 /etc/rc.local tail: inotify cannot be used, reverting to polling #####nfs######## /etc/init.d/rpcbind start <=====注意顺序 先启rpcbind再nfs /etc/init.d/nfs start ####nfs######## [root@NFS_server ~]#
到此NFS服务端已经安装完毕!!!
4.4配置NFS服务端
4.4.1配置路径
[root@NFS_server ~]# ls -l /etc/exports <=====配置文件可以用man exports查看相关参数 -rw-r--r--. 1 root root 0 Jan 12 2010 /etc/exports [root@NFS_server ~]# cat /etc/exports <=====默认是空 [root@NFS_server ~]#
4.4.2配置格式
NFS共享的目录 NFS客户端地址(参数1,参数2…) NFS客户端地址(参数1,参数2…)
NFS共享的目录 NFS客户端地址(参数1,参数2…..)
注意:
- NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径,要注意共享目录的权限问题,如果需要读写共享,则把NFS共享目录设置为用户(nfsnobody)可以读写。
- NFS客户端地址:为NFS服务端授权的可以访问共享目录的NFS客户端地可以为单独的IP或主机名,域名等,也可以是整个网段的地址(192.168.1.0/24).
- 参数:rw(可读写);sync(将数据同步写入内存缓冲区与磁盘中);all_squash(将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody)),参数在后面会介绍。
下面把NFS服务端的/data 目录共享 并授权
[root@NFS_server ~]# ls -l /data ls: cannot access /data: No such file or directory [root@NFS_server ~]# mkdir /data -p [root@NFS_server ~]# vi /etc/exports /data 192.168.1.0/24(rw,sync,all_squash) [[root@NFS_server ~]# /etc/init.d/rpcbind restart Stopping rpcbind: [ OK ] Starting rpcbind: [ OK ] [root@NFS_server ~]# /etc/init.d/nfs restart Shutting down NFS daemon: [ OK ] Shutting down NFS mountd: [ OK ] Shutting down NFS quotas: [ OK ] Shutting down NFS services: [ 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@NFS_server ~]# [root@NFS_server ~]# cat /var/lib/nfs/etab /data 192.168.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,all_squash) [root@NFS_server ~]# chown -R nfsnobody.nfsnobody /data [root@NFS_server ~]#
4.4.3检查和测试本地挂载
[root@NFS_server ~]# showmount -e localhost Export list for localhost: /data 192.168.1.0/24 [root@NFS_server ~]# mount -t nfs 192.168.1.104:/data /mnt [root@NFS_server ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda3 18G 2.0G 15G 12% / tmpfs 497M 0 497M 0% /dev/shm /dev/xvda1 194M 29M 155M 16% /boot 192.168.1.104:/data 18G 2.0G 15G 12% /mnt [root@NFS_server ~]#
五.NFS客户端的安装
同样是用yum install nfs-utils rpcbind -y安装,但是只是启动rpcbind服务
[root@blog01 ~]# rpm -qa nf-utils rpcbind [root@blog01 ~]# yum install nfs-utils rpcbind -y [root@blog01 ~]# rpm -qa nf-utils rpcbind rpcbind-0.2.0-12.el6.x86_64 [root@blog01 ~]# /etc/init.d/rpcbind start [root@blog01 ~]# /etc/init.d/rpcbind status rpcbind (pid 2215) is running... [root@blog01 ~]# chkconfig rpcbind on [root@blog01 ~]# echo "/etc/init.d/rpcbind start" >>/etc/rc.local [root@blog01 ~]# mount -t nfs 192.168.1.104:/data /mnt [root@blog01 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda3 18G 2.1G 15G 13% / tmpfs 497M 0 497M 0% /dev/shm /dev/xvda1 194M 29M 155M 16% /boot 192.168.1.104:/data 18G 2.0G 15G 12% /mnt [root@blog01 ~]# echo "mount -t nfs 192.168.1.227:/data /mnt" >>/etc/rc.local [root@blog01 ~]# tail -2 /etc/rc.local tail: inotify cannot be used, reverting to polling /etc/init.d/rpcbind start mount -t nfs 192.168.1.227:/data /mnt 《=====已经挂载上来了 [root@blog01 ~]#
blog02也是同样的操作
[root@blog02 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/xvda3 18G 2.0G 15G 12% / tmpfs 497M 0 497M 0% /dev/shm /dev/xvda1 194M 29M 155M 16% /boot 192.168.1.104:/data 18G 2.0G 15G 12% /mnt You have new mail in /var/spool/mail/root [root@blog02 ~]#
六、验证是否共享
在blog01的/mnt下创建一个文件
[root@blog01 ~]# cd /mnt/ You have new mail in /var/spool/mail/root [root@blog01 mnt]# [root@blog01 mnt]# pwd /mnt [root@blog01 mnt]# [root@blog01 mnt]# touch nfs.txt [root@blog01 mnt]#
查看blog02的/mnt下是否存在
[root@blog02 ~]# ll /mnt/ total 0 [root@blog02 ~]# [root@blog02 ~]# ll /mnt/ total 0 -rw-r--r--. 1 nfsnobody nfsnobody 0 Sep 17 21:35 nfs.txt [root@blog02 ~]#
至此NFS服务的基本安装与配置已经完成,此后会推出更详细的博文。
七、优缺点
优点:1.简单容易上手和掌握
2.稳定、方便
NFS文件系统内数据是在文件系统上的,能看得见。
缺点:1.存在单点故障,如果NFS服务端宕机了,所以有客户端都不能访问共享目录(这个可以用负载均衡及高可用方案来弥补)。
2.客户端认证时是基于IP和主机名的,权限时根据ID识别,安全性一般(如果用于内网则基本没问题)。
3.NFS数据是明文的,NFS本身对数据完整性不作验证。
4.在大数据高并发的场合,NFS效率和性能有限。
5.多台客户机器挂载一个NFS服务器时,连接管理维护麻烦
- 上一篇: Linux标准环境配置手册--NFS服务配置
- 下一篇: EFK 日志系统收集K8s日志 (一)
猜你喜欢
- 2024-09-24 Centos7部署NFS服务
- 2024-09-24 Centos7部署NFS
- 2024-09-24 使用promptulate框架&百度大模型 V4探究AI agent模式
- 2024-09-24 将WalletConnect集成到Vue.js DApps中
- 2024-09-24 SkyWalking链路追踪集成服务
- 2024-09-24 NFS共享文件服务器搭建
- 2024-09-24 关于Linux中控制群组cgroup(资源管理)的一些笔记
- 2024-09-24 RHCE试题EX300详解(十一)挂载NFS 共享
- 2024-09-24 【RHCSA考试】EX200试题操作及详解系列(下)
- 2024-09-24 EFK 日志系统收集K8s日志 (一)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- oraclesql优化 (66)
- 类的加载机制 (75)
- feignclient (62)
- 一致性hash算法 (71)
- dockfile (66)
- 锁机制 (57)
- javaresponse (60)
- 查看hive版本 (59)
- phpworkerman (57)
- spark算子 (58)
- vue双向绑定的原理 (68)
- springbootget请求 (58)
- docker网络三种模式 (67)
- spring控制反转 (71)
- data:image/jpeg (69)
- base64 (69)
- java分页 (64)
- kibanadocker (60)
- qabstracttablemodel (62)
- java生成pdf文件 (69)
- deletelater (62)
- com.aspose.words (58)
- android.mk (62)
- qopengl (73)
- epoch_millis (61)
本文暂时没有评论,来添加一个吧(●'◡'●)