netapp存储配置练习NFS.docx
《netapp存储配置练习NFS.docx》由会员分享,可在线阅读,更多相关《netapp存储配置练习NFS.docx(37页珍藏版)》请在冰豆网上搜索。
netapp存储配置练习NFS
NetApp存储基础学习汇总(第四部分)
2.1、NFS基础知识15
一、NFS管理
1.1、NFS基础知识
NFS就是NetworkFileSystem的缩写,最早是由Sun公司所提出的。
它最大的功能就是可以通过网络,让不同的计算机、不同的操作系统、可以彼此分享档案(sharefiles)。
所以,也可以简单的将它看做是一个档案服务器(fileserver)!
这个NFS服务器可以让你的PC将网络远端的NFS主机分享的目录,挂载到本地端的机器当中,在本地端的机器看起來,那个远端主机的目录就好像是自己的一个磁盘分区(partition)!
使用上相当的方便!
既然NFS是通过网络来进行资料的传输,那么NFS使用那个port来进行传输呢?
答案是....不知道!
因为NFS用来传输的port是随机选择小于1024以下的端口来使用的。
那用户端怎么知道服务器端使用那个port呢?
这时候就得要远程过程调用(RemoteProcedureCall,RPC)协议来辅助了。
远程过程调用(RPC)是一种协议,程序可使用这种协议向网络中的另一台计算机上的程序请求服务。
由于使用RPC的程序不必了解支持通信的网络协议的情况,因此RPC提高了程序的互操作性。
在RPC中,发出请求的程序是客户程序,而提供服务的程序是服务器。
因为NFS支持的功能相当的多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些port来传输资料,因此,NFS的功能所对应的port才没有固定住,而是采用随机取用一些未被使用的小于1024的端口来作为传输之用。
但如此一来又造成客户端想要连上服务器的困扰,因为客户端必须要知道服务器端的相关端口才能够连接。
这时候RPC最主要的功能就是指定每个NFS功能所对应的portnumber,并且反馈给客户端,让客户端可以连接到正确的端口上去。
那RPC又是如何知道每个NFS的端口呢?
这是因为服务器在启动NFS时会随机取用数个端口,并主动的向RPC注册,因此RPC可以知道每个端口对应的NFS功能,然后RPC又是固定使用port111来监听客户端的需求并反馈客户端正确的端口。
所以在服务器端启动NFS服务之前,RPC对应的portmap服务就要启动了,否则NFS无法注册端口。
由于NFS的各项功能都必須要向RPC来注册,如此一来RPC才能了解NFS这个服务的各项功能的portnumber,PID,NFS服务器所监听的IP等等,而客户端才能够通过RPC找到正确对应的端口。
也就是说,NFS必須要有RPC存在时才能成功的提供服務,因此我们称NFS为RPCserver的一种。
事实上,有很多这样的服务器都是向RPC注册的,比如,NIS(NetworkInformationService)也是RPCserver的一种。
此外,不论是客户端还是服务器端,在要使用NFS时,两者都需要启动RPC才行。
在linux服务器上启动NFS服务的过程
[root@rhel5~]#servicenfsstart==没有启动portmap服务前,NFS启动不了
StartingNFSservices:
[OK]
StartingNFSquotas:
Cannotregisterservice:
RPC:
Unabletoreceive;errno=Connectionrefused
rpc.rquotad:
unabletoregister(RQUOTAPROG,RQUOTAVERS,udp).
[FAILED]
StartingNFSdaemon:
[FAILED]
StartingNFSmountd:
Cannotregisterservice:
RPC:
Unabletoreceive;errno=Connectionrefused
[FAILED]
[root@rhel5~]#serviceportmapstart==先启动portmap服务后,NFS启动正常
Startingportmap:
[OK]
[root@rhel5~]#servicenfsstart
StartingNFSservices:
[OK]
StartingNFSquotas:
[OK]
StartingNFSdaemon:
[OK]
StartingNFSmountd:
[OK]
------------------------------------------------------------------------------------------------------------
[root@rhel5~]#ps-ef|greprpc
root184210Dec12?
00:
00:
00rpc.statd
root187510Dec12?
00:
00:
00rpc.idmapd
rpc92801018:
53?
00:
00:
00portmap
root93101018:
53?
00:
00:
00rpc.rquotad
root93197018:
53?
00:
00:
00[rpciod/0]
root93261018:
54?
00:
00:
00rpc.mountd
[root@rhel5~]#netstat-ultn
ActiveInternetconnections(onlyservers)
ProtoRecv-QSend-QLocalAddressForeignAddressState
tcp00127.0.0.1:
22080.0.0.0:
*LISTEN
tcp000.0.0.0:
20490.0.0.0:
*LISTEN
tcp000.0.0.0:
58010.0.0.0:
*LISTEN
tcp000.0.0.0:
59010.0.0.0:
*LISTEN
tcp000.0.0.0:
1110.0.0.0:
*LISTEN
tcp000.0.0.0:
7520.0.0.0:
*LISTEN
tcp000.0.0.0:
60010.0.0.0:
*LISTEN
tcp000.0.0.0:
10100.0.0.0:
*LISTEN
tcp000.0.0.0:
470930.0.0.0:
*LISTEN
tcp000.0.0.0:
210.0.0.0:
*LISTEN
tcp00127.0.0.1:
6310.0.0.0:
*LISTEN
tcp000.0.0.0:
6010.0.0.0:
*LISTEN
tcp00127.0.0.1:
250.0.0.0:
*LISTEN
tcp00127.0.0.1:
22070.0.0.0:
*LISTEN
tcp00:
:
:
6001:
:
:
*LISTEN
tcp00:
:
:
22:
:
:
*LISTEN
udp000.0.0.0:
10240.0.0.0:
*
udp000.0.0.0:
20490.0.0.0:
*
udp000.0.0.0:
12120.0.0.0:
*
udp000.0.0.0:
53530.0.0.0:
*
udp000.0.0.0:
7460.0.0.0:
*
udp000.0.0.0:
7490.0.0.0:
*
udp000.0.0.0:
10070.0.0.0:
*
udp000.0.0.0:
1110.0.0.0:
*
udp000.0.0.0:
6310.0.0.0:
*
udp000.0.0.0:
10220.0.0.0:
*
udp00:
:
:
1025:
:
:
*
udp00:
:
:
5353:
:
:
*
[root@rhel5~]#rpcinfo-plocalhost
programversprotoport
1000002tcp111portmapper
1000002udp111portmapper
1000111udp1007rquotad
1000112udp1007rquotad
1000111tcp1010rquotad
1000112tcp1010rquotad
NFS版本
1000032udp2049nfs
1000033udp2049nfs
1000034udp2049nfs
1000032tcp2049nfs
1000033tcp2049nfs
1000034tcp2049nfs
1000211udp1212nlockmgr
1000213udp1212nlockmgr
1000214udp1212nlockmgr
1000211tcp47093nlockmgr
1000213tcp47093nlockmgr
1000214tcp47093nlockmgr
1000051udp1022mountd
1000051tcp601mountd
1000052udp1022mountd
1000052tcp601mountd
1000053udp1022mountd
1000053tcp601mountd
[root@rhel5~]#cat/etc/services|grep111
sunrpc111/tcpportmapper#RPC4.0portmapperTCP
sunrpc111/udpportmapper#RPC4.0portmapperUDP
tan>netstat-an==在存储上看111端口也是开的
ActiveTCPconnections(includingservers)
LocalAddressRemoteAddressSwindSend-QRwindRecv-QState
*.80*.*0000LISTEN
*.445*.*0000LISTEN
*.139*.*0000LISTEN
*.10568*.*0000LISTEN
*.10569*.*0000LISTEN
*.10567*.*0000LISTEN
*.10571*.*0000LISTEN
*.22*.*0000LISTEN
*.514*.*0000LISTEN
*.23*.*0000LISTEN
*.4047*.*0000LISTEN
*.4045*.*0000LISTEN
*.4046*.*0000LISTEN
*.2049*.*0000LISTEN
*.111*.*0000LISTEN
ActiveUDPsockets(includingservers)
LocalAddressRemoteAddressSend-QRecv-Q
*.138*.*00
*.137*.*00
*.69*.*00
*.161*.*00
*.4049*.*00
*.4047*.*00
*.4045*.*00
*.4046*.*00
*.2049*.*00
*.111*.*00
*.520*.*00
NFS是一个分布式文件系统,它容许用户访问远程系统上的文件和目录,这些文件和目录对用户来说好像是在本地。
用户可以使用OS命令创建,删除,读写远程文件和目录,以及设置远程文件和目录的属性,而这一切都是在本地完成的。
NFS使用RPC而不受本地机器类型、OS和网络结构的限制。
NFS基于客户机/服务器模式。
一个NFS服务器拥有本地磁盘上的文件,客户机通过NFS访问它。
拥有实际磁盘,并通过NFS将这些磁盘共享出来的主机叫NFS服务器,通过NFS访问文件系统的叫NFS客户机。
服务器给客户机共享文件系统的操作叫做导出(export).客户机要访问服务器导出的文件系统之前,必须在本地先挂接(mount)这个文件系统。
NFS服务器导出的目录叫做远程资源,并通常写做:
hostname:
pathname格式,其中hostname是NFS服务器的主机名,pathname是服务器上被导出目录的绝对路径。
在客户机上安装远程资源的那个目录叫做挂接点(mountpoint)。
1.2、NFS启动的RPCdaemons(后台进程)
NFS服务器主要的任务是进行文件系统的分享,文件系統的共享是与权限有关的。
所以NFS服务器启动时至少需要两个daemons,一个管理client端是否能够登入的问题,一个管理client端能够取得的权限。
如果你还想要管理quota的话,那么NFS还得要再载入其他的RPC程序。
我們以比较单纯的NFS服务器来说:
rpc.nfsd:
这个daemon主要的功能就是在管理Client是否具有登入主机的权限,其中还包含这个登入者的ID的判別。
rpc.mountd:
这个daemon主要的功能,则是在管理NFS的文件系统了。
当Client端顺利的通过rpc.nfsd而登入服务器之后,在它可以使用NFS服务器提供的文件之前,还会经过文件使用权限(就是那个-rwxrwxrwx与owner,group那几个权限)的认证程序,它会去读NFS的设定文件/etc/exports来比对Client的权限,当通过一关之后Client就可以取得使用NFS文件的权限了(注:
这也是我们用来管理NFS分享目录的使用权限与安全设定的地方了)
rpc.lockd(非必要)
这个后台进程可以用在管理文件的锁定(lock)用途。
为何文件需要『锁定』呢?
因为既然分享的NFS文件可以让客户端使用,那么当多个客户端同时尝试写入某个文件时,就可能对该文件造成一些问题!
这个rpc.lockd可以用来克服这个问题。
但rpc.lockd必須要同时在客户端與与服器端都开启才可以。
此外,rpc.lockd也常与rpc.statd同时启用。
rpc.statd(非必要)
可以用来检查文件的一致性,与rpc.lockd有关,若发生因为客户端同时使用同一文件造成文件可能有所损坏,rpc.statd可以用来检测並尝试恢复该文件。
与rpc.lockd一样的,这个功能必須要在服务器端与客户端都启动才会生效。
1.3、NFS的文件存取权限(以linux为例)
假如我们在NFSclient1上面以dmtsai这个使用者身份想要去访问/home/data/sharefile/这个来自NFSserver所提供的文件系統时,NFSserver所提供的文件系统会让我们以什么身份去访问,是dmtsai还是其它什么呢?
NFS服务本身并没有进行身份登入的识别,所以说,当你在客户端以dmtsai的身份想要存取服务器端的文件系統时,服务器端会以客户端的使用者UID与GID等身份来尝试读取服务器端的档案系統。
这时候如果客户端与服务器端的使用者身份并不一致怎么办?
见下图:
当我们以dmtsai这个一般身份使用者要去访问来自服务器端的文件时,你要先注意到的是:
文件系統的inode所记录的属性为UID,GID而非账号与组名。
那一般Linux主机会主动的以自己的/etc/passwd,/etc/group来查询对应的使用者和其组的名称。
所以当dmtsai进入到该目录后,会参照NFSclient1的使用者与群组名称。
但是由于该目录的文件主要来自NFSserver,所以可能就会出现几个情況:
●NFSserver/NFSclient刚好有相同的账号与组
则此时使用者可以直接以dmtsai的身份进行服务器所提供的文件系統的存取。
●NFSserver上的UID=501这个UID账号对应为vbird
若NFS服务器上的/etc/passwd里面UID501的使用者名称为vbird时,则客户端的dmtsai可以存取服务器端的vbird这个使用者的文件!
只因为二者具有相同的UID。
这就造成很大的問題了!
因为没有人可以保证客户端的UID所对应的账号会与服务器端相同,那服务器所提供的资料不就可能会被错误的使用者乱改?
●NFSserver上没有501这个UID
另一个极端的情況是,在服务器端并没有501这个UID的存在,则此时dmtsai的身份在该目录下会被会变成匿名者,一般NFS的匿名者会以UID=65534为其使用者,早期的Linuxdistributions这个65534的账号名称通常是nobody,CentOS则取名为nfsnobody。
●如果使用者身份是root时
有个比较特殊的使用者,那就是每个Linux主机都有的UID为0的root。
想一想,如果客户端可以用root的身份去存取服务器端的档案系统的时候,那服务器端的资料那还有什么保护性?
所以在预设的情況下,root的身份会被主动的变成匿名者。
总之,客户端使用者能做的事情是与UID及其GID有关的,那当客户端与服务器端的UID及账号的对应不一致的时候,可能就会造成文件系統使用上的困扰,这个就是NFS档案系統在使用上面的一个很重要的地方!
而在了解使用者账号与UID及文件系统的关系之后,要实际在客户端以NFS取用服务器端的文件系統时,还需要具有:
●NFS服务器有可写入的权限(与/etc/exports设定有关);
●实际的档案具有可写入(w)的权限。
也就是说
(1)、使用者账号,亦即UID的相关身份;
(2)、NFS服务器允许有写入的权限;(3)、文件确实具有w的权限时,你才具有该文件的可写入权限。
尤其是身份(UID)确认的环节部分,最容易搞错!
也因为如此,所以NFS通常需要与其它身份验证的软件配合使用。
1.4、NFSServer端的设定
既然要使用NFS的话,就得要安裝NFS所需要的套件了
以RHELAS5为例的话,要设定好NFS服务器我们必须要有两个套件才行,分别是:
●NFS主程式:
nfs-utils
●RPC主程式:
portmap
[root@rhel5~]#rpm-qa|grepnfs
nfs-utils-1.0.9-16.el5
nfs-utils-lib-1.0.8-7.2
[root@rhel5~]#rpm-qa|grepportmap
portmap-4.0-65.2.2.1
在NetApp存储要启用NFS必须要具有NFS的license,也可以通过nfsoff来打开或者nfsstop关闭NFS服务。
此外,不论是客户端还是服务器端,在要使用NFS时,两者都需要启动RPC才行。
tan>license====在存储上看license情况
a_sisnotlicensed
cifssiteDZDACHD
clusternotlicensed
cluster_remotenotlicensed
compressionnotlicensed
disk_sanitizationnotlicensed
fcpnotlicensed
flex_clonenotlicensed
flex_scalenotlicensed
flexcache_nfsnotlicensed
gateway_hitachinotlicensed
httpnotlicensed
iscsisiteBSLRLTG
multistorenotlicensed
nearstore_optionnotlicensed
nfssiteBQOEAZL
operations_managernotlicensed
protection_managernotlicensed
provisioning_managernotlicensed
smdominonotlicensed
smsqlnotlicensed
snaplocknotlicensed
snaplock_enterprisenotlicensed
snapmanager_oraclenotlicensed
snapmanager_sapnotlicensed
snapmanager_sharepointnotlicensed
snapmanagerexchangenotlicensed
snapmirrornotlicensed
snapmirror_syncnotlicensed
snapmovernotlicensed
snaprestoresiteDNDCBQH
snapvalidatornotlicensed
sv_linux_prinotlicensed
sv_ontap_prinotlicensed
sv_ontap_secnotlicensed
sv_unix_prinotlicensed
sv_windows_ofm_prinotlicensed
sv_windows_prinotlicensed
syncmirror_localnotlicensed
v-seriesnotlicensed
vldnotlicensed
tan>optionsnfs
nfs.acache.persistence.enabledon
nfs.assist.queue.limit40
nfs.export.allow_provisional_accesson
nfs.export.auto-updateon
nfs.export.exportfs_comment_on_deleteon
nfs.export.harvest.timeout1800
nfs.export.neg.timeout3600
nfs.export.pos.timeout36000
nfs.export.resolve.timeout6
nfs.hide_snapshotoff
nfs.ifc.xmt.h