共享存储服务nfs
存储服务nfsnfs概述
nfs的缺点
nfs属于本地文件存储服务
缺点一:
winndows上无法使用
缺点二:
在高并发场景,以及存储量比较高的场景,对数据安全性要求比较高场景
需要采用分布式储存(mfsFastDFS)
分布式文件系统:无法在服务器中看到真实的文件信息
1。2。2实现Windows与linux系统文件数据共享方法
a。ftp(ftp服务部署)
b。samba服务NFS共享网络文件系统企业应用
主要用于存储web服务器上用户上传的数据信息,图片附件头像视频音频
NFS文件系统存在意义(实现数据共享,实现数据统一)
NFS网络文件系统工作方式
在nfs服务端创建共享目录
通过mount网路挂载,将NFS客户端本地目录挂载到NFS服务端共享目录上
NFS客户端挂载目录上创建、删除、查看数据操作,等价于在服务端进行的创建、删除、查看数据操作
如图105所示,在NFS服务器端设置好一个共享目录video后,其他有权限访问NFS服务器端的客户端都可以将这个共享目录video挂载到客户端本地的某个挂载点(其实就是一个目录,这个挂载点目录可以自己随意指定),图105中的两个NFS客户端本地的挂载点分別为vvideo和video,不同客户端的挂载点可以不相同。
客户端正确挂载完毕后,就可以通过NFS客户端的挂载点所在的vvideo或video目录查看
到NFS服务器端video共享出来的目录下的所有数据。在客户端上查看时,NFS服务器端的video目录就相当于客户端本地的磁盘分区或目录,几乎感觉不到使用上的区别,根据NFS服务器端授予的NFS共享权限以及共享目录的本地系统权限,只要在指定的NFS客户端操作挂载vvideo或video的目录,就可以将数据轻松地存取到NFS服务器端上的video目录中了。NFS网络文件系统重点要了解两个重要服务RPC服务
NFS服务
NFS工作流程图
RPC服务工作原理
NFS详细的访问流程
当访问程序通过NFS客户端向NFS服务器存取文件时,其请求数据流程大致如下:
01。首先用户访间网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询间请求。
02。NFS服务器端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务(rpcbind服务)。
03。此时NFS客户端获取到正确的端口,并与NFSdaemon联机存取数据
04。NFS客户端把数据存取成功后,返回给前端访间程序,告知用户存取结果,作为网站用户,就完成了一次存取操作。
因为NFS的各项功能都需要向RPC服务(rpcbind服务)注册,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号(portnumber)、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端。也就是说,NFS需要有RPC服务的协助才能成功对外提供服务。从上面的描述,我们不难推断,无论是NFS客户端还是NFS服务器端,当要使用NFS时,都需要首先启动RPC服务,NFS服务必须在RPC服务启动之后启动,客户端无需启动NFS服务,但需要启动RPC服务。
nsf实战
第一个里程碑确认软件是否已经安装,安装NFS服务相关软件rpmqagrepnfsrpmqagreprpc
安装rpcbindnfsutils服务程序,并进行验证安装是否成功yuminstallynfsutilsrpcbindrpmqanfsutilsrpcbind
第二个里程碑编写nfs配置文件
nfs配置文件默认存在etcexportsvimetcexportssharedatabyoldboyforshareat20170220data172。16。1。024(rw,sync)
mkdirdatapchownRnfsnobody。nfsnobodydata
说明:
NFS共享目录管理用户为nfsnobody,此用户不用创建,安装nfs软件时会自动创建第四个里程碑:启动服务(注意顺序)
首先,启动rpc服务etcinit。drpcbindstart或者systemctlstartrpcbindsystemctlenablerpcbind
其次,启动nfs服务systemctlstartnfssystemctlenablenfs
rpcbind服务启动信息查看
〔rootnfs01〕psefgreprpcbindrpc40501010:55?00:00:00rpcbindroot40543878010:55pts100:00:00grepcolorautorpcbind〔rootnfs01〕netstatlntupgrep111tcp000。0。0。0:1110。0。0。0:LISTEN4050rpcbindtcp00:::111:::LISTEN4050rpcbindudp000。0。0。0:1110。0。0。0:4050rpcbindudp00:::111:::4050rpcbind〔rootnfs01〕rpcinfoplocalhostprogramversprotoportservice1000004tcp111portmapper1000003tcp111portmapper1000002tcp111portmapper1000004udp111portmapper1000003udp111portmapper1000002udp111portmapper
nfs启动后查看信息
〔rootnfs01〕rpcinfoplocalhostprogramversprotoportservice1000004tcp111portmapper1000003tcp111portmapper1000002tcp111portmapper1000004udp111portmapper1000003udp111portmapper1000002udp111portmapper1000241udp28467status1000241tcp56269status1000111udp875rquotad1000112udp875rquotad1000111tcp875rquotad1000112tcp875rquotad1000051udp32886mountd1000051tcp6154mountd1000052udp38339mountd1000052tcp60288mountd1000053udp49824mountd1000053tcp24427mountd1000032tcp2049nfs1000033tcp2049nfs1000034tcp2049nfs1002272tcp2049nfsacl1002273tcp2049nfsacl1000032udp2049nfs1000033udp2049nfs1000034udp2049nfs1002272udp2049nfsacl1002273udp2049nfsacl1000211udp61803nlockmgr1000213udp61803nlockmgr1000214udp61803nlockmgr1000211tcp6064nlockmgr1000213tcp6064nlockmgr1000214tcp6064nlockmgr
到此服务端部署配置完成〔rootnfs01〕showmounte172。16。1。31或者showmounteExportlistfor172。16。1。31:data172。16。1。024
服务端本地测试
NFS服务开启后,默认的参数文件位置,注意:修改此文件,对nfs服务没有任何影响〔rootnfs01〕catvarlibnfsetabdata172。16。1。024(rw,sync,wdelay,hide,nocrossmnt,secure,rootsquash,allsquash,nosubtreecheck,securelocks,acl,anonuid65534,anongidNFS客户端部署第一个里程碑:确认软件有没有安装,进行nfsrpc服务软件安装部署yuminstallrpcbindnfsutilsy第二个里程碑:启动服务
提示:
rpcbind和nfs软件都可以不启动第三个里程碑:检查NFS服务端是否有可以进行挂载的目录〔rootnfs01〕rpmqfwhichshowmountnfsutils1。2。375。el6。x8664
说明:showmount使用,需要安装nfsutils软件第四个里程碑:进程nfs客户端挂载
mounttnfs172。16。1。31:datamnt
〔rootbackup〕showmounte172。16。1。31
Exportlistfor172。16。1。31:
data172。16。1。024
〔rootbackup〕mounttnfs172。16。1。31:datamnt
说明:如果nfs软件不安装a无法使用showmount命令
b客户端无法识别nfs文件系统类型第五个里程碑:进行检查测试
〔rootbackup〕dfhFilesystemSizeUsedAvailUseMountedondevsda319G1。5G17G9tmpfs238M0238M0devshmdevsda1190M40M141M22boot172。16。1。31:data19G1。5G17G9mnt
【测试】本地nfs客户端进行增删改数据等价于nfs服务端共享目录操作
〔rootbackupmnt〕echotest123test。txt〔rootbackupmnt〕lltest。txtrwrr1nfsnobodynfsnobody8Oct1311:28test。txt〔rootnfs01data〕cattest。txttest123
知识深入NFS服务相关进程信息
rpcbindrpc启动进程主进程rpcstate检查数据存储的一致性rpc。rquotad磁盘配额rpc。mountd权限管理验证nfsdNFS主进程rpc。idmapd用户压缩映射
进程服务详细说明
服务或进程名
用途说明
portmapper
rpcbind服务的进程(centos5。x上为portmap软件)
rquotad
磁盘配额进程
nfs、nfsacl
nfs服务进程
nfsd(rpc。nfsd)
rpc。nfsd的主要功能是管理NFS客户端是否能够登入NFS服务器端主机,其中还包括含登入者的ID判別等。
mountdrpc。mountd的主要功能则是管理NFS文件系统。当NFS客户端顺利通过rpc。nfsd登入NFS服务器端主机时,在使用NFS服务器提供数据之前,它会去读NFS的配置文件etcexports来比对NFS客户端的权限,通过这一关之后,还要经过NFS服务器端本地文件系统使用权限(就是owner、group、other权限)等认证程序。如果都通过了,NFS客户端就可以取得使用NFS服务器端文件的权限。
注意:这个etcexports文件也是我们用来管理NFS共享目录的使用权限与安全设置的地方,特别强调,NFS本身设置的是网络共享权限,整个共享目录的权限还和目录自身的系统权限有关。
rpc。lockd(非必要)
用来锁定文件,用于多客户端同时写入
rpc。statd(非必要)
检查文件的一致性,与rpc。lockd有关。c、d两个服务雲要客户端,服务器端同时开启才可以;rpc。statd监听来自其他主机重启的通知,并且管理当本地系统重启时主机列表。
rpc。idmapd
表示用户映射或用户压缩(重要)etcexports配置文件说明etcexports文件说明
NFS共享目录:
为NFS服务器端要共享的实际目录,要用绝对路径,如(data)。注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被NFS客户端的用户(nfsnobody)读写。
NFS客户端地址:
为NFS服务器端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段地址。还可以用来匹配所有客户端服务器,这里所谓的客户端一般来说是前端的业务的业务服务器,例如:web服务。
权限参数集
对授权的NFS客户端的访问权限设置。
nfs权限(共享目录借给你手机)nfs配置的etcexportsdata172。16。1。024(rw)
本地文件系统权限(手机密码不告诉你)挂载目录的权限rwxrxrxrootrootdata指定NFS客户端地址的配置详细说明
客户端地址
具体地址
说明
授权单一客户端访问NFS
10。0。0。30
一般情况,生产环境中此配置不多
授权整个网段可访问NFS
10。0。0。024
其中的24等同于255。255。255。0,指定网段为生产环境中最常见的配置。配置简单,维护方便
授权整个网段可访问NFS
10。0。0。
指定网段的另外写法(不推荐使用)
授权某个域名客户端访问
nfs。oldboyedu。com
此方法生产环境中一般情况不常用
授权整个域名客户端访问
。oldboyedu。com
此方法生产环境中一般情况不常用常见案例
常用格式说明
要共享的目录客户端IP地址或IP段(参1,参2,)
配罝例一data10。0。0。024(ro,sync)
说明:允许客户端读写,并且数据同步写入到服务器揣的磁盘里
注意:24和(之间不能有空格
配置例二data10。0。0。024(rw,syncallsquash,anonuid2000,anongid2000)
说明:允许客户揣读写,并且数据同步写到服务器揣的磁盘里,并且指走客户端
的用户UID和GID,早期生产环境的一种配罝,适合多客户端共享一个NFS服务
单目录,如果所有服务器的nfsnobody账户UID都是65534,则本例没什么必
要了。早期centos5。5的系统默认情况下nfsnobody的UID不一定是65534,
此时如果这些服务器共享一个NFS目录,就会出现访问权限问题。
配置例三homeoldboy10。0。0。024(ro)
说明:只读共享
用途:例如在生产环境中,开发人员有查看生产眼务器日志的需求,但又不希罜
给开发生产服务器的权限,那么就可以给开发提供从某个测试服务器NFS客户端
上查看某个生产服务器的日志目录(NFS共享)的权限,当然这不是唯一的方法,
例如可以把程序记录的日志发送到测试服务器供开发查看或者通过收集日志等其
它方式展现nfs服务访问原理
客户端(无论用什么用户访问)门服务端(nfsnobody)rpc。idmapdNFS服务端设置rpcbindnfs服务开机自启动
〔rootnfs01〕chkconfigrpcbindon〔rootnfs01〕chkconfignfson〔rootnfs01〕chkconfigegreprpcbinfnfsnfs0:off1:off2:on3:on4:on5:on6:offnfslock0:off1:off2:off3:on4:on5:on6:off
NFS配置文件编写说明官方举例配置
EXAMPLEsampleetcexportsfilemaster(rw)trusty(rw,norootsquash)projectsproj。local。domain(rw)usr。local。domain(ro)trusted(rw)homejoepc001(rw,allsquash,anonuid150,anongid100)pub(ro,insecure,allsquash)srvwwwsync,rwservertrustedexternal(ro)foo2001:db8:9:e54::64(rw)192。0。2。024(rw)buildbuildhost〔09〕。local。domain(rw)
etcexports文件配置格式为:
NFS共享目录NFS客户端地址1(参数1,参数2,。。。)客户端地址2(参数1,参数2,。。。)
或
NFS共享目录NFS客户端地址1(参数1,参数2,。。。)
NFS共享目录NFS客户端地址2(参数1,参数2,。。。)
注意:nfs服务默认没有认证机制,安全性不如分布式文件系统
只能通过控制配置文件中网络地址信息,实现安全性3。5nfs配置参数说明
参数
说明
rw
可读写的权限
ro
只读的权限
norootsquash
登入NFS主机,使用该共享目录时相当于该目录的拥有者,如果是root的话,那么对于这个共享的目录来说,他就具有root的权限,这个参数极不安全,不建议使用
rootsquash
登入NFS主机,使用该共享目录时相当于该目录的拥有者。但是如果是以root身份使用这个共享目录的时候,那么这个使用者(root)的权限将被压缩成为匿名使用者,即通常他的UID与GID都会变成nobody那个身份
allsquash
不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody
anonuid
可以自行设定这个UID的值,这个UID必需要存在于你的etcpasswd当中
anongid
同anonuid,但是变成groupID就是了
sync
资料同步写入到内存与硬盘当中
async
资料会先暂存于内存当中,而非直接写入硬盘
insecure
允许从这台机器过来的非授权访问nfs配置参数实践allsquash参数实践
不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody
服务端修改配置
〔rootnfs01〕vimetcexportsshare20171013hzsdata172。16。1。024(rw,sync,allsquash)〔rootnfs01〕etcinit。dnfsreload
配置修改需要平滑重启nfs服务
reload平滑重启
用户的访问体验更好
nfs客户端进行测试
〔rootbackupmnt〕touchtest。txt〔rootbackupmnt〕llrwrr1nfsnobodynfsnobody8Oct1311:28test。txt〔rootbackup〕suoldboy〔oldboybackup〕cdmnt〔oldboybackupmnt〕toucholdboy1。txt〔oldboybackupmnt〕llrwrwr1nfsnobodynfsnobody0Oct1312:34oldboy1。txtrwrr1nfsnobodynfsnobody8Oct1311:28test。txt
说明:
不论登入NFS的使用者身份为何,他的身份都会被压缩成为匿名使用者,通常也就是nobody
noallsquash,rootsquash参数实践
服务端修改配置
〔rootnfs01〕vimetcexportsshare20171013hzsdata172。16。1。024(rw,sync,noallsquash,rootsquash)〔rootnfs01〕etcinit。dnfsreload
客户端卸载重新挂载(服务器配置修改后客户端要重新挂载)
〔rootbackup〕umountmnt〔rootbackup〕mounttnfs172。16。1。31:datamntnfs客户端测试结果:〔rootbackupmnt〕touchtest1。txt〔rootbackupmnt〕llrwrr1nfsnobodynfsnobody0Oct1312:37test1。txt〔rootbackupmnt〕suoldboy〔oldboybackup〕cdmnt〔oldboybackupmnt〕toucholdboy1。txttouch:cannottoucholdboy1。txt:Permissiondenied〔oldboybackupmnt〕toucholdboy2。txttouch:cannottoucholdboy2。txt:Permissiondenied
服务端验证:
〔rootnfs01〕lldatarwrwr1nfsnobodynfsnobody0Oct1312:34oldboy1。txtrwrr1nfsnobodynfsnobody0Oct1312:37test1。txtrwrr1nfsnobodynfsnobody8Oct1311:28test。txt
说明:
noallsquash,是所有用户都不进行压缩,所以oldboy用户对nfs的目录没有写入的权限(与nfs服务器的共享目录权限有关)。root用户进行压缩所以可以写入。
norootsquash参数实践(root用户不进行压缩映射)
服务端修改配置
〔rootnfs01〕vimetcexportsshare20171013hzsdata172。16。1。024(rw,sync,norootsquash)〔rootnfs01〕etcinit。dnfsreload
客户端卸载重新挂载(服务器配置修改后客户端要重新挂载)
〔rootbackup〕umountmnt〔rootbackup〕mounttnfs172。16。1。31:datamntnfs客户端测试结果:〔rootbackupmnt〕touchroot。txt〔rootbackupmnt〕lltotal16rwrwr1nfsnobodynfsnobody0Oct1312:34oldboy1。txtrwrr1rootroot0Oct1312:45root。txtrwrr1nfsnobodynfsnobody0Oct1312:37test1。txtrwrr1nfsnobodynfsnobody8Oct1311:28test。txt删除测试〔rootbackupmnt〕rmrf。〔rootbackupmnt〕lltotal0
说明:
由于对root用户没有进行压缩,所以到达nfs服务器后依旧是root身份,root用户默认对所有的文件都有权限,所以可以写入。(很危险)
推荐方式:
创建用户和用户组并指定id
所有服务器:groupaddg888wwwuseraddssbinnologinMu888g888www服务端:chownRwww。wwwdatarw