NFS企业级网络文件共享

企业级NFS网络文件共享服务

一、NFS介绍
什么是NFS?
NFS是network file system的缩写,中文意思是网络文件系统。它的主要功能是经过网络(通常是局域网) 让不一样的主机系统之间能够共享文件或者目录。NFS客户端(通常为应用服务器,例如web)能够经过挂载的方式将nfs服务器共享的数据目录挂载到nfs客户端本地系统中(就是某一个挂载点下)。从nfs客户端的的机器本地看,nfs服务器端共享的文件目录就像客户端本身的磁盘分区或者目录同样,而实际是远端nfs服务器的目录。
Nfs网络文件系统就像windows系统的网络共享、安全功能、网络驱动器映射,这也和linux系统里的samaba服务相似。只不过一把状况下,windows网络共享服务或者samba服务用语局域网共享,互联网中小型网站集群架构后端经常使用NFS做为数据共享,入大型网站还可能用到更复杂的分布式文件系统(moosefs(mfs)),glusterfs,fastdfs。网络文件服务器,给网络全部服务器提供文件共享服务。在web1上访问/mnt文件目录,至关于访问nfs服务器的/data.
NFS企业级网络文件共享html

二、NFS在企业中的应用场景
在企业集群架构的工做场景中,NFS网络文件系统通常被用来存储共享视频、图片、附件静态资源文件,通常是把网站用户上传的文件都放在NFS共享里,例如bbs产品的图片、附件、头像,注意bbs网站程序不要放在NFS共享里,而后前端全部的节点访问这些静态资源时都会读取到NFS存储上的资源。
发博文文字东西存放数据库,用户上传的图片视频之类的存放在nfs共享服务器中。
NFS的历史介绍
第一个网络文件系统被称为FILEJ ACCESS listener, 由DIGITAL enquipment corporation(DEC)1976年开发。Nfs是第一个构建于ip协议上的现代网络文件系统。
Nfs系统已经成功历尽30年的发展。它表明了一个很是稳定的(可移植)网络文件系统,它具有可扩展、高性能等特性并达到企业级应用质量标准,因为网络速度的增长,延迟下降,NFS系统一直是经过网络提供文件系统服务的有竞争力的选择,特别是中小互联网企业,应用十分普遍。
Nfs在企业中应用场景
在企业集群架构的工做场景中,nfs网络文件系统通常用来存储共享视频、图片、附件等静态资源,通常是把网站用户上传的文件都放在nfs共享里,例如;BBS产品的图片、附件、头像,注意网站BBS程序不要放NFS共享里,而后前端全部节点访问这些静态资源都会读取NFS存储上的资源。NFS是当前互联网系统架构中最经常使用的存储服务之一,特别是中小型网站公司应用频率更高。大公司或门户除了用NFS外,还可能会使用更复杂的分布式文件系统(mfs),glusterfs,fastdfs等。
NFS企业级网络文件共享
图中后面虚线框里就是NFS系统工做的位置,NFS做为全部前端WEB服务的共享存储,存储的内容通常有网站用户上传的图片、附件、头像等,注意网站的程序代码不要放在NFS共享里,网站程序是人工发布的,不存在延迟问题,直接批量发布到web节点提供访问,这样效率更高。
企业生产集群为何须要共享存储角色
这里经过图解给你们展现集群架构须要共享存储服务的理由。例如:A用户传图片到web1服务器,而后让B用户访问这张照片,结果B用户的请求分发到web2由于web2上没有这张照片,结果没法查看到A用户传的图片,若是此时有一个共享存储,A用户上传的照片不管分发到web1仍是web2,最终都存到共享存储上,此时,b用户访问图片时,不管分发到web1或者web2,最终都存储到共享存储上,此时b用户访问到资源了。这个共享存储的位置能够经过开源软件和商业硬件实现,互联网中小型集群架构会用普通pc服务器和nfs文件系统实现。
当集群中没有NFS共享存储,用户访问图片的状况:
NFS企业级网络文件共享
提示:中小型互联网企业通常不会卖家硬件存储,由于太贵,大公司若是业务发展很快的话,可能会临时买硬件存储顶一下网站的压力,当网站并发继续加大后,硬件存储扩展就相对费劲了,且价格成几何级数增长。例如:淘宝网就替换掉了不少硬件设备集群软件,用lvs+haproxy替换了netscaler负载均衡设备,用fastDFS,TFS配合pc服务器替换了netapp、emc商业存储,去IOE正在成为互联网公司的主流。前端

NFS企业级网络文件共享
NFS系统原理
NFS企业级网络文件共享
当咱们在NFS服务器端设置好一个共享目录/video后,其余的有NFS服务器端的客户端能够将这个共享目录/video,挂载到客户端本地某个挂载点,挂载点就是一个目录,这个挂载点目录能够本身随意指定,上图中的两个NFS客户端挂载点分别为/v/video和/video,不一样客户端的挂载点能够不相同。linux

使用咱们的nfs确定用到ip地址和端口号,测试而知NFS在数据传输时使用的端口随机选择。Nfs客户端怎么知道nfs服务端使用哪一个端口呢?
答案:经过RPC(中文意思远程过程调用,英文remote precede call)经过这个rpc服务的应用在门户级的网站不少。什么是rpc?
NFS工做原理流程
NFS企业级网络文件共享
再次强调:NFS的rpc服务在centos5.x下名称成为protmap,在centos6.x下名称为rpcbind
NFS服务端部署环境准备
服务器系统 角色 ip
Centos6.6x86_64 NFS服务端(nfs-server) 10.0.0.5
Centos6.6x86_64 NFS客户端(nfs-client1) 10.0.0.6
Centos6.6x86_64 NFS客户端(nfs-client2) 10.0.0.7
查看系统及内核版本信息
cat /etc/redhat-release
uname -r uname -m
Centos6.6默认没有安装NFS软件包,此时咱们可使用yum install nfs-utils rpcbind -y 命令来安装nfs软件
#yum install nfs-utils rpcbind -y
#rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-11.el6.x86_64
nfs-utils-1.2.3-54.el6.x86_64
出现上述两个软件包,表示NFS服务端软件安装完毕,最好在客户端都安装nfs和rpc包,客户端不配置nfs服务就能够。
NFS3种安装方法
方法1: yum install nfs-utils rpcbind -y
方法2:经过系统光盘里的rpm包安装,命令以下:rpm -ivh nfs-utils-1.2.3-36.el6.x86_64.rpm
方法3: LANG=en
yum grouplist|grep -i nfs
yum groupinstall “NFS file server” -y
启动NFS相关服务
启动rpcbind服务
由于NFS及辅助程序都是基于rpc协议的,因此首先要确保系统中运行了rpcbind服务,相关启动操做以下:
#/etc/init.d/rpcbind start
查看运行状况
#/etc/init.d/rpcbind status
已知某个端口号,查看服务名,或者已知服务名查看端口号的方法
[root@nfsserver ~]# lsof -i :111
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 1420 rpc 6u IPv4 10826 0t0 UDP :sunrpc
rpcbind 1420 rpc 8u IPv4 10829 0t0 TCP
:sunrpc (LISTEN)
rpcbind 1420 rpc 9u IPv6 10831 0t0 UDP :sunrpc
rpcbind 1420 rpc 11u IPv6 10834 0t0 TCP
:sunrpc (LISTEN)
[root@nfsserver ~]# netstat -lntup|grep rpcbind
tcp 0 0 0.0.0.0:111 0.0.0.0: LISTEN 1420/rpcbind
tcp 0 0 :::111 :::
LISTEN 1420/rpcbind
udp 0 0 0.0.0.0:747 0.0.0.0: 1420/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:
1420/rpcbind
udp 0 0 :::747 ::: 1420/rpcbind
udp 0 0 :::111 :::
1420/rpcbind
[root@nfsserver ~]# chkconfig --list rpcbind
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off
查看nfs状态和启动nfs,主端口2049
[root@nfsserver ~]# /etc/init.d/nfs status
rpc.svcgssd is stopped
rpc.mountd is stopped
nfsd is stopped
rpc.rquotad is stopped
[root@nfsserver ~]# /etc/init.d/nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
Starting RPC idmapd: [ OK ]
[root@nfsserver ~]# netstat -lntup|grep 2049
tcp 0 0 0.0.0.0:2049 0.0.0.0: LISTEN -
tcp 0 0 :::2049 :::
LISTEN -
udp 0 0 0.0.0.0:2049 0.0.0.0: -
udp 0 0 :::2049 :::
-
咱们要求rpcbind服务要先启动于nfs,怎么保证这个顺序?
#less /etc/init.d/rpcbind
#! /bin/sh
#web

rpcbind Start/Stop RPCbind

#数据库

chkconfig: 2345 13 87

........
13表示启动的顺序,87表示结束的顺序,和nfs对比下就知道了。windows

在平常企业管理中咱们不用chkconfig来管理软件的启动,就是不会把服务作成chkconfig管理,统一将启动命令放到rc.local,把这个文件做为服务器的档案。这样的好处是,一旦管理服务器人员离职,或者业务迁移时均可以经过/etc/rc.local很容易看到服务器的相关服务
NFS服务常见进程详细说明
从上面NFS服务启动过程的提示,能够看出NFS服务默认须要启动,服务进程至少有:NFS quotas(rpc.rquotad)、NFS daemon(nfsd)、NFS mountd(rpc.mount)能够经过执行以下命令查看启动NFS后,系统中运行的NFS相关进程。
#ps -ef|egrep “rpc|nfs”
如何知道进程的意思呢?#man 进程名
实战配置NFS服务端
Nfs服务端的默认配置文件路径为:/etc/exports,而且默认是空的
[root@nfsserver ~]# ls -l /etc/exports
-rw-r--r--. 1 root root 0 Jan 12 2010 /etc/exports
[root@nfsserver ~]# cat /etc/exports
[root@nfsserver ~]#
Nfs默认配置文件是存在的,可是默认是没有内容的,须要从新配置,有些linux版本可能不提供/etc/exports配置文件,这是就须要手动建立。
Exports配置文件的格式
NFS共享目录 NFS 客户端地址(参1,参2.....)客户端地址2(参1,参2......)
Nfs 共享目录 NFS客户端地址(参1,参2......)
查看例子#man exports
EXAMPLE后端

sample /etc/exports file

/               master(rw) trusty(rw,no_root_squash)
   /projects       proj*.local.domain(rw)
   /usr            *.local.domain(ro) @trusted(rw)
   /home/joe       pc001(rw,all_squash,anonuid=150,anongid=100)
   /pub            *(ro,insecure,all_squash)
   /srv/www        -sync,rw server @trusted @external(ro)
   /foo            2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
   /build          buildhost[0-9].local.domain(rw)

   The  first  line  exports  the entire filesystem to machines master and
   trusty.  In addition to write access, all uid squashing is  turned  off
   for  host trusty. The second and third entry show examples

其中上述参数的含义以下:
一、nfs共享的目录为:nfs服务端要共享的实际目录,要用绝对路径,注意共享目录的本地权限,若是须要读写共享,必定要让本地目录被用户读写。
经常使用配置格式说明 要共享的目录 客户端ip或ip段(参1,参2)
指定客户端地址配置说明:
受权单一客户端访问NFS 具体地址10.0.0.30
受权整个网段可访问NFS 10.0.0.0/24其中的24等同于255。255.255.0此配置为生产中最多见的配置
受权整个网段可访问NFS 10.0.0.* 指定网段的另外写法centos

实例共享/data目录给192.168.154整个网段的主机读写即实现将nfs server上的/data目录共享给192.168.154整个网段主机可读写。
[root@nfsserver ~]# cat /etc/exports
/data 192.168.154(rw,sync)
[root@nfsserver ~]# mkdir /data
[root@nfsserver ~]# /etc/init.d/nfs reload
[root@nfsserver ~]# exportfs -rv
最后两条命令等价,平滑重启nfs效果同样。
[root@nfsserver ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/data 192.168.154

把本身做为客户端查看下挂载状况
[root@nfsserver ~]# mount -t nfs 192.168.154.136:/data /mnt
[root@nfsserver ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_nfsserver-lv_root
18G 3.4G 13G 21% /
tmpfs 491M 76K 491M 1% /dev/shm
/dev/sda1 477M 29M 424M 7% /boot
/dev/sr0 4.4G 4.4G 0 100% /media/CentOS_6.6_Final
192.168.154.136:/data 18G 3.4G 13G 21% /mnt安全

NFS客户端的配置:
启动客户端的rpcbind服务,设置开机自启动
测试与nfs服务端的192.168.154.136是否联通
[root@lamp01 ~]# /etc/init.d/rpcbind status
rpcbind (pid 27184) is running...
[root@lamp01 ~]# showmount -e 192.168.154.136
Export list for 192.168.154.136:
/data 192.168.154
这个showmount命令是客户端装了nfs才有的命令,建议客户端也装。若是连不上出现(no route to host)多数缘由是防火墙没关致使的。
A.ping 192.168.154.136
B.Telnet 192.168.154.136 111 排查端口
Showmount没问题把共享目录挂载到客户端本地
[root@lamp01 ~]# mount -t nfs 192.168.154.136:/data /mnt
[root@lamp01 ~]# /etc/init.d/rpcbind status
rpcbind (pid 27184) is running...
[root@lamp01 ~]# showmount -e 192.168.154.136
Export list for 192.168.154.136:
/data 192.168.154

[root@lamp01 ~]# mount -t nfs 192.168.154.136:/data /mnt
[root@lamp01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_nfsserver-lv_root
18G 3.4G 13G 21% /
tmpfs 491M 224K 491M 1% /dev/shm
/dev/sda1 477M 29M 424M 7% /boot
/dev/sr0 4.4G 4.4G 0 100% /media/CentOS_6.6_Final
192.168.154.136:/data 18G 3.4G 13G 21% /mnt
而后咱们在137/mnt目录下建立个文件,提示被拒绝。
在服务端咱们作调整查看cat /var/lib/nfs/estab,内容为nfs服务端全部参数信息。
Nfs服务端默认把读写权限给uid为65534这个用户,咱们找一下uid为65534这个用户,grep 65534 /etc/passwd.我么查看了/data目录的用户和属组,发现root用户对此目录拥有读写权限。因此咱们修改用户属组。
[root@nfsserver data]# cat /var/lib/nfs/etab
/data 192.168.154*(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534)
[root@nfsserver data]# grep 65534 /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
[root@nfsserver data]# ls -ld /data
drwxr-xr-x 2 root root 4096 Jan 21 14:20 /data
[root@nfsserver data]# chown -R nfsnobody /data
最后为了让咱们重启客户端后挂载信息存在,将挂载命令写入rc.local文件中。
NFS企业级网络文件共享
工做中多台客户端同时读写管理共享目录的文件,咱们另一台139的客户机作了和137同样的 配置,实现了此功能,因此咱们的客户端在管理共享服务器的目录时都被映射为一个用户nfsnobody用户。
NFS客户端挂载拍错思路
一、首先确认NFS服务配置和服务是ok。
#showmount -e localhost
最好在服务端挂载本身试试。
二、确认nfs客户端showmount是否ok。
三、若是出现rpc program not registed怀疑是rpc服务启动顺序
四、the stale file handle error缘由服务器上资源移动位置了,在客户端使用unmout和mount从新挂载就能够了。
五、Nfs mount:dbserver retrying :/mntpoint
当前级别不是3,mounted守护进程没哟启动,用/etc/init.d/nfs.server脚本启动nfs守护进程。服务器

Showmount 命令说明
Showmount命令通常用于从NFS客户端检查NFS服务器共享目录的状况。
-e参数显示服务器输出的目录列表 showmount -e 10.0.0.7
-d参数显示nfs服务器提供的共享的目录
-a参数以ip;/dir 格式显示nfs服务器的ip地址和可被挂载的目录

Exportfs命令参数可使用这个命令临时共享
Exports -o rw,sync,all_squash,10.0.0.0/24:data
NFS server 端防火墙控制
真正企业生产环境的存储服务器都属于内网环境,都无需防火墙,所以,此处要配置的话就有两种方法任选其一:
(1)仅容许内网ip访问
iptalbes -A INPUT -s 10.0.0.0/24 --dport 111 -j ACCEPT
(2)容许ip端加端口访问
iptabels -A INPUT -i eth1 -p udp -s 10.0.0.0/24 --dport 111 -j ACCEPT
iptabels -A INPUT -i eth1 -p udp -s 10.0.0.0/24 --dport 2049 -j ACCEPT
iptalbes -A INPUT -i eth1 -p udp -s 10.0.0.0/24 -j ACCEPT

NFS章节重点
一、NFS服务的访问原理流程
二、NFS做为集群共享存储角色的排障,高级优化
三、NFS做为集群共享存储角色的排障,高级优化
四、Mount命令的知识及参数,-o(noatime,nodirtime,noexec,nosuid,rsize,wsize)等
五、Fstab文件知识
六、经常使用命令showmount,exportfs,umount(-lf),rpcinfo
七、NFS的有点、缺点、适合的应用场景,替代产品(mfs,glusterfs,fastdf)
八、了解autofs。
NFS参考文献:http://www.tldp.org/HOWTO/NFS-HOWTO/intro.html
预习:
Rsync数据同步、备份
定时:rsync+cron定时任务
实时:rsync+sersync(inotify)
Nfs上级实战及文件系统修复
NFS配置参数权限
NFS配置参数权限参数说明
NFS服务器端的权限设置,即/etc/exports文件配置格式中小括号里面的参数,详细参数说明
参数名称 参数用途
Rw read-write表示可读写权限
Ro read-only,表示只读权限
Sync 请求或写入数据时,数据同步写入到NFSSEVER 硬盘
Async 请求或写入数据时,先返回请求,再将数据写入内存或硬盘中即异步写入数据。此参数能够提高NFS性能,
all_squash 无论访问NFSserver 共享目录的用户身份如何,它的权限都会压缩成匿名用户,同时它的uid和gid都会变成nfsnobody帐户
NFS服务重点知识梳理总结
使得NFS CLIENT 端可写的服务端配置条件
当多个NFS客户端以NFSF方式写入修改服务器端文件系统时,须要具备如下个权限:
(a)NFS服务器/etc/exports 设置须要开放可写入的权限,即服务端的共享权限
(b)NFS服务器实际要共享的NFS目录权限具备可写入w的权限,即服务端本地目录的安全权限。
(c)每台机器都对应存在和nfs默认配置uid65534的nfsnobody用户确保所欲客户端访问权限统一,不然每一个机器须要同时创建相同uid的用户,并覆盖NFS的默认配置)
当知足上述三个条件,多个nfs客户端才能具备互相写入,互相修改其余主机写入文件的权限,这在开篇讲过的大规模集群环境,做为集群共享存储时尤其注意。
到这步为止,NFS服务端一个nfs共享目录、data共享给10.0.0.0/24内主机可读写就配置完了。下面还须要在客户端主机挂载服务端共享的/data,才能够在客户端真正读写到该共享目录。
NFS客户端挂载命令
(1)这里先强调下客户端挂载的命令格式
挂载命令 挂载格式类型 nfs共享服务器目录 nfs客户端挂载目录
Mount -t nfs 10.0.0.7:/data /mnt(必须存在)
完整挂载命令为:mount -t nfs 10.0.0.7:/data /mnt 此命令在客户端执行
NFS客户端开机自启动挂载
配置mount挂载命令使开机自动配置,两种方法其中一种是无效
A./etc/rc.local里
偶尔开机挂载不上,工做中除了开机自启动配置,还要对是否挂载上监控。
b./etc/fstab
问题nfs网络文件系统不要放在fstab里实现开机挂载,缘由以下:
一、fstab优先于网络被linux系统加载。网络没有启动执行fstab会致使连不上NFS服务器没法实现开机挂载。
二、即便是本地的文件系统,也要注意,fstab最后两列要设置0 0,不然可能致使服务启动服务器问题
NFS客户端挂载深刻
在nfs服务端能够经过cat /etc/var/lib/nfs/etab 查看服务端的参数细节。
在nfs客户端能够经过cat /proc/mounts 查看mount挂载参数细节。
(1)mount 挂载及fstab 文件的参数表格
经过nfs客户端测试挂载获取的默认挂载参数:
#grep mnt / proc/mounts
NFS企业级网络文件共享2使用linux rescue(救援模式)修复/etc/fstab(改错配置而后重启系统)三、root密码忘记了,想从新获取root密码怎么作?重要问题:一、有关NFS客户端普通用户写NFS的问题A.为何要普通用户写NFS?B. exports 加all_squash普通用户才能压缩成匿名用户/data 10.0.0.0/24(rw,sync,all_squash),若是不加all_squash这个参数的话,切换到普通用户将没有权限建立文件在共享目录,没法管理。

相关文章
相关标签/搜索