当前位置: 首页 > 科技观察

Linux系统NFS服务器部署

时间:2023-03-15 15:25:22 科技观察

1、NFS协议NFS服务工作在TCP的2049端口和UDP的2049端口。NFS是NetworkFileSystem的缩写,即网络文件系统,是分布式文件系统中使用的一种协议。其作用是让不同的机器、不同的操作系统通过网络相互共享各自的数据,使应用程序可以通过网络访问位于服务器磁盘中的数据。是类Unix系统之间实现磁盘文件共享的一种方法。此NFS服务器允许您的PC将网络上远程NFS服务器共享的目录挂载到本地机器。从本地机器的角度来看,远程主机的目录就像一个属于自己的磁盘分区槽。1.1工作原理由于NFS支持的功能比较多,不同的功能会使用不同的程序来启动,每次启动一个功能都会开启一些端口来传输数据,所以NFS功能对应的端口并不固定,而是随机选择一些未使用的小于1024的端口进行传输。但是这样在客户端要连接服务器的时候就会出现麻烦,因为客户端必须知道服务器的相关端口才能够连接!NFS依赖于RPC协议进行文件传输或消息传输。RPC是RemoteProcedureCall的缩写,是一种使客户端能够在其他系统上执行程序的机制。RPC的主要作用是指定每个NFS功能对应的端口号,并反馈给客户端,让客户端连接到正确的端口。NFS本身不提供信息传输的协议和功能,但是NFS允许我们通过网络共享数据,因为NFS使用了一些其他的传输协议。而这些传输协议都使用了这个RPC函数。可以说NFS本身就是一个使用RPC的程序,或者说NFS也是一个RPCSERVER。所以只要使用NFS,就必须启动RPC服务,不管是NFSSERVER还是NFSCLIENT。这样SERVER和CLIENT就可以通过RPC实现PROGRAMPORT的对应。RPC和NFS的关系可以这样理解:NFS是文件系统,RPC负责信息的传递。其实很多这样的服务器都注册了RPC,比如NIS(NetworkInformationService)也是RPC服务器的一种。RPC怎么知道各个NFS的端口呢?这是因为服务器在启动NFS时,会随机使用几个端口,主动向RPC注册,让RPC知道每个端口对应的NFS功能,然后RPC使用111端口监听客户端的需求。并报出正确的客户端端口,这样当然可以让NFS的启动更加轻松愉快。所以你要注意,在启动NFS之前,必须先启动RPC,否则NFS将无法向RPC注册。另外,如果RPC重启,原来注册的数据就会消失,所以RPC重启后,它管理的所有服务都必须重启,才能重新向RPC注册。客户端如何与NFS服务器交换数据?(1)客户端会向服务器的RPC111端口发送一个NFS文件访问功能的查询请求(2)服务器找到对应注册的NFS守护端口后,会反馈给客户端(3)客户端了解正确的端口后,就可以直接与NFS守护进程连接1.2激活NFS服务NFS服务需要激活几个重要的RPC守护进程工作流程nfs—client=>portmapper=>mountd=>nfs-server(nfsd)(1)主要守护进程rpc.nfsd的作用是管理client是否可以登录到host,它还包括logger的ID。(2)rpc.mountd的主要功能这个守护进程的主要功能是管理NFS文件系统,为用户提供访问令牌。访问令牌由本地RPC提供一个随机端口。本地RPC称为portmapper,可以用rpcinfo-P查看。RPC的portmapper服务工作在1111端口。请求过程客户端通过rpc.nfsd成功登录主机后,在使用NFS服务器提供的文件之前,还会经过文件使用权限的认证过程,分别是-rwxrwxrwx、所有者和组的权限。.然后它会读取NFS配置文件/etc/exports来比较客户端的权限。通过这一关后,客户端就可以获得使用NFS文件的权限。注意:NFS需要两个包nfs-utilsNFS服务的主包提供了两个NFS守护进程rpc.nfsd和rpc.mountd,以及其他相关文件、描述文件、执行文件等,包portmap主要负责RPC端口与daemons的映射关系,即在portmapper激活任何RPCserver之前,我们都需要先激活portmapper。1.3版本比较NFS是一种网络文件系统。自1985年推出以来,一共发布了3个版本:NFSv2、NFSv3、NFSv4,NFSv4包括两个小版本NFSv4.0和NFSv4.1。经过20多年的发展,NFS发生了很大的变化。最大的变化是发起人从Sun换成了NetApp。NFSv2和NFSv3基本上是由Sun起草的。NetApp从NFSv4.0开始参与并主导了NFSv4.1的标准制定过程,而Sun已经被甲骨文收购。1、NFSv2NFSv2是第一个以RFC形式发布的版本,实现了基本功能。2、NFSv3协议的特点NFSv3修复了NFSv2的一些bug。两者有如下一些区别,但没有本质区别。区别(1)NFSv2只支持同步写入。如果客户端向服务器写入数据,服务器必须先将数据写入磁盘,然后再发送回复消息。NFSv3支持异步写操作,服务器只需要将数据写入缓存就可以发送响应消息。(2)NFSv3增加了ACCESS请求,用于检查用户的访问权限。由于服务端可能会进行uid映射,导致客户端的uid和gid无法正确反映用户的访问权限。(3)调整了部分请求参数和返回信息。毕竟NFSv3和NFSv2的发布间隔是6年。经过长期运行,NFSv2的一些请求参数和返回信息可能需要改进。三、NFSv4.0协议的特点与NFSv3相比,NFSv4发生了比较大的变化。最大的变化是NFSv4是有状态的。NFSv2和NFSv3都是无状态协议,服务器端不需要维护客户端状态信息。无状态协议的优点之一是灾难恢复。当服务器出现问题时,客户端只需要重复发送失败的请求,直到收到服务器的响应信息。区别(1)NFSv4增加了安全性,支持RPCSEC-GSS认证。(2)NFSv4被设计为有状态协议,实现了文件锁定功能和获取文件系统根节点的功能。(3)NFSv4只提供NULL和COMPOUND两种请求,所有操作都集成到COMPOUND中。客户端可以根据实际请求将多个操作封装到一个COMPOUND请求中,增加了灵活性。(4)NFSv4文件系统的命令空间发生了变化。服务器必须设置一个根文件系统(fsid=0),其他文件系统挂载在根文件系统上进行导出。(5)NFSv4支持委托。由于多个客户端可以挂载同一个文件系统,为了保持文件同步,NFSv3中的客户端需要频繁向服务器发起请求,请求文件属性信息,判断其他客户端是否修改了文件。如果文件系统是只读的,或者客户端不经常修改文件,频繁向服务器请求文件属性信息会降低系统性能。NFSv4可以依靠委托来实现文件同步。(6)NFSv4修改了文件属性的表示方式。由于NFS是Sun开发的文件系统,NFS文件属性的设计参考了UNIX中的文件属性。某些属性在Windows中可能不可用,因此NFS与操作系统的兼容性不是很好。4、NFSv4.1与NFSv4.0相比,NFSv4.1最大的变化是支持并行存储。在以前的协议中,客户端直接与服务器连接,客户端直接向服务器发送数据。这种方式在客户端数量少的时候没有问题,但是如果有大量的客户端要访问数据,NFS服务器很快就会成为瓶颈,抑制系统的性能。NFSv4.1支持并行存储。服务器由一个元数据服务器(MDS)和多个数据服务器(DS)组成。元数据服务器只管理文件在磁盘中的布局,数据传输直接在客户端和数据服务器之间进行。执行。由于系统包含多台数据服务器,数据可以并行访问,系统吞吐量迅速增加。2、NFS服务CentOS7默认使用NFSv4版本,NFSv4使用TCP协议(端口号为2049)与NFS服务器建立连接。#系统环境系统平台:CentOSrelease7.0(Final)NFSServerIP:192.168.10.10防火墙关闭/iptables:Firewallisnotrunning.SELINUX=disabled2.1安装NFS服务服务器server,包名nfs-utils,rpcbind,默认已经开启安装后client客户端,可以通过rpm-qlnfs-utils查看帮助文档等信息。需要安装包名nfs-utils来提供基本的客户端命令工具[root@localhost~]#yuminstallnfs-utilsLoadedplugins:langpacks,product-id,subscription-manager……Package1:nfs-utils-1.3。0-0.el7.x86_64alreadyinstalledandlatestversionNothingtodo查看NFS服务端口NFS启动时,会随机启动多个端口,并向RPC注册。为了方便配置防火墙,需要固定NFS服务端口。这样如果使用iptables来限制NFS端口,就有点麻烦了。可以更改配置文件固定NFS服务相关的端口分配端口,编辑配置文件/etc/sysconfig/nfs#使用rpcinfo-P发现rpc启动了很多监听端口[root@localhost~]#rpcinfo-plocalhostprogramversprotoportservice1000004tcp111portmapper1000002udp111portmapper1000051udp49979mountd1000051tcp58393mountd1000032tcp2049nfs1002272tcp2049nfs_acl......#添加如下[root@localhost~]#vim/etc/sysconfig/nfsRQUOTAD_PORT=30001LOCKD_TCPPORT=30002LOCKD_UDPPORT=30002MOUNTD_PORT=30003STATD_PORT=30004启动服务[root@localhost~]#servicenfsstartStartingNFSservices:[OK]StartingNFSquotas:[OK]StartingNFSmountd:[OK]StartingNFSdaemon:[OK]StartingNFSidmapd:[OK]2.2服务文件配置相关文件和命令配置文件/etc/exports我们可以按照“共享目录”路径允许访问NFS客户端(共享权限parameters)”格式,定义要共享的目录和对应的权限[root@localhost~]#cat/etc/exports/nfsfile192.168.10.*(rw,sync,root_squash)/tmp/serverdir192.168.174.132(rw,sync,no_root_squash)192.168.174.133(ro,sync,no_root_squash)3.实际演示有兴趣的可以试试:两个web服务器,共享关系数据库,共享NFS服务器,使用DNS记录轮查询提供负载均衡。第一步:机器设置createserverandclientcloseiptablesandselinux服务主机名操作系统IP地址NFS服务器RHEL7192.168.10.10NFS客户端RHEL7192.168.10.20#清除NFS服务器上iptables防火墙的默认策略,以防万一默认防火墙策略禁止正常的NFS共享服务[root@localhost~]#iptables-F[root@localhost~]#serviceiptablessaveiptables:Savingfirewallrulesto/etc/sysconfig/iptables:[OK]第二步:在NFS上创建共享目录服务器,创建NFS文件共享目录在NFS服务器上,设置足够的权限,保证其他人也有写权限[root@localhost~]#mkdir/nfsfile[root@localhost~]#chmod-Rf777/nfsfile[root@localhost~]#echo"welcometolocalhost.com">/nfsfile/readme第三步:编辑配置文件/etc/exports定义要共享的目录和相应的权限请注意NFS客户端之间没有空格地址和权限#Share/nfsfile目录到192.168.10.0/24网段的所有主机,让这些主机有读写权限[root@localhost~]#vim/etc/exports/nfsfile192.168.10.*(rw,sync,root_squash)第四步:启动并启用NFS服务程序在启动NFS服务之前,还需要重启并启用rpcbind服务程序,将这两个服务添加到启动项中[root@localhost~]#systemctlrestartrpcbind[root@localhost~]#systemctlenablerpcbind[root@localhost~]#systemctlstartnfs-server[root@localhost~]#systemctlenablenfs-serverln-s'/usr/lib/systemd/system/nfs-server.service''/etc/systemd/system/nfs.target.wants/nfs-server.service'第五步:NFS客户端配置使用showmount命令查询NFS服务器的远程共享信息》showmount命令参数功能-e显示NFS服务器的共享列表NFSserver-a显示本机挂载的文件资源状态NFSresources-v显示版本号exportfs命令是维护exports文件导出的文件系统表的专用工具,可以修改不要重启NFS配置后的serviceexport-ar:重新导出所有文件系统export-au:关闭所有导出的文件系统export-uFS:关闭指定导出的文件系统#查看NFS服务器端共享文件系统#showmount-eNFSSERVER_IP[root@localhost~]#showmount-e192.168.10.10Exportlistfor192.168.10.10:/nfsfile192.168.10.*#NFS客户端创建挂载目录,将服务器的NFS文件系统挂载到本地#mount-tnfsSERVER:/path/to/sharedfs/path/to/mount_point[root@localhost~]#mkdir/nfsfile[root@localhost~]#mount-tnfs192.168.10.10:/nfsfile/nfsfile#挂载成功后应该可以看到之前操作写入的文件内容[root@localhost~]#cat/nfsfile/readmewelcometolinuxprobe.com#如果想让NFS文件共享服务一直有效,需要写入fstab文件#SERVER:/PATH/TO/EXPORTED_FS/mount_pointnfsdefaults,_netdev00[root@localhost~]#vim/etc/fstab/dev/mapper/rhel-root/xfsdefaults11UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b/bootxfsdefaults12/dev/mapper/rhel-swapswapswapdefaults00/dev/cdrom/media/cdromiso9601.n/1920file1nfsfilenfsdefaults00