1.1 什么是NFS
- NFS是Network File System的缩写,中文意思是网络文件系统,
它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录
- 互联网中小型网站集群机构后端常用NFS进行数据共享,
如果大型网站,那么有可能还会用到更复杂的分布式文件系统,例如:Moosefs(mfs)、GlusterFS、FastDFS
说明:NFS服务只能应用在linux系统上,而FTP samba服务均都支持linux和windows
1.2 NFS服务应用
NFS是一个共享存储服务,为什么要有共享存储?
- 实现数据信息的共享
- 实现数据信息的一致
1.3 共享存储的方式
- 硬件实现共享服务
IBM oracle EMC
- 软件实现共享服务
NFS FTP samba
1.4 NFS共享系统原理
- 在NFS服务端创建共享目录
- 通过mount网络挂载,将NFS客户端本地目录挂载到NFS服务端共享目录下
- NFS客户端挂载目录上创建、删除、查看数据操作,等价于在服务端进行的创建删除,查看操作
1.5 什么是RPC
注意:centos5中rpcbind'名称为portmap
第2章 实践操作
2.1 服务器规划:
进行服务器的规划
2.2 NFS服务端部署过程
2.2.1 第一个里程碑-确认软件是否已经安装,安装NFS服务相关软件
rpm -qa nfs-utils rpcbind
yum install -y nfs-utils rpcbind
2.2.2 第二个里程碑-编写nfs配置文件
PS.nfs配置文件默认存在/etc/exports
#注释
/data 172.16.1.0(rw,sync)
说明:
第一部分:/data --指定共享目录信息
第二部分:172.16.1.0/24 --指定了一个网段信息,表示允许指定的网段主机挂载到我本地的共享目录上
第三部分:(rw,sync) --表示定义共享参数信息,
2.2.3 第三个里程碑-创建共享目录并设定权限
mkdir /data
chown -R nfsnobody.nfsnobody /data
ll -d /data
说明:nfsbody在软件安装时会自动创建,所以此用户不在创建
2.2.4 第四个里程碑-启动服务
首先启动rpc服务
/etc/init.d/rpcbind start
查看服务相关信息
ps -ef|grep rpcbind
netstat -lnupt|grep rpcbind
rpcinfo -p localhost
其次启动nfs服务
/etc/init.d/nfs start
2.2.5 查看服务相关信息
ps -ef|grep nfs ##查看nfs进程
netstat -inupt|grep nfs ##查看NFS端口
showmount -e 10.0.0.31 ##查询NFS服务器上本地所有共享目录
rpcinfo -p localhost ##查看NFS先RPC的注册信息
2.3 NFS客户端部署过程
2.3.1 第一个里程碑-确认软件是否安装
rpm -qa nfs-utils rpcbind
yum install -y nfs-utils rpcbind
注意:如果不安装nfs软件会发生如下问题:
- 客户端无法使用showmount命令
- 客户端无法识别nfs文件系统类型
2.3.2 第二个里程碑-启动服务
首先启动rpc服务
/etc/init.d/rpcbind start
查看服务相关信息
ps -ef|grep rpcbind
netstat -lnupt|grep rpcbind
rpcinfo -p localhost
其次启动nfs服务
/etc/init.d/nfs start
PS. nfs软件安装后,不需要启动nfs服务
rpcbind软件安装后,也可以不启动rpcbind服务
2.3.3 查看服务相关信息
ps -ef|grep nfs ##查看nfs进程
netstat -inupt|grep nfs ##查看NFS端口
showmount -e 10.0.0.31 ##查询NFS服务器上本地所有共享目录
rpcinfo -p localhost ##查看NFS先RPC的注册信息
2.3.4 第三个里程碑-检查nfs服务端是否有可以进行共享挂载的目录
showmount -e 172.16.1.31
2.3.5 第四个里程碑-进行nfs客户端挂载
mount -t nfs 172.16.1.31:/data /mnt
2.3.6 第五个里程碑-检查挂载信息
df -h
2.4 设置开机自启动
chkconfig rpcbind on
chkconfig nfs on
第3章 NFS和RPC相关进程说明
服务或进程名 |
用途说明 |
rpcbind |
rpcbind的主进程 |
rpc-statd |
检查数据存储的一致性 |
rpc.rquotad |
磁盘配额进程 |
rpc.mountd |
权限管理验证等 |
nfsd |
NFS服务的主进程 |
rpc.lockd |
用来锁定文件 |
rpc.idmapd |
用户映射或用户压缩 |
PS.相应进程名可以通过man 【进程名】查询
第4章 /etc/exports的配置信息
官方配置手册
/etc/exports文件配置格式为:
NFS共享目录 NFS客户端地址1(参数1,参数2,...) 客户端地址2(参数1,参数2,...)
或
NFS共享目录 NFS客户端地址1(参数1,参数2,...)
4.1 NFS共享目录
为NFS服务器段要共享的实际目录,要用绝对路径,如(/data)。注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被NFS客户端的用户(nfsnobody)读写
4.2 NFS客户端地址
为NFS服务器段授权的可访问共享目录的NFS
客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段地址。还可以用*来匹配所有客户端服务器。
客户端地址 |
具体地址 |
说明 |
授权第一客户端访问NFS |
10.0.0.30 |
一般情况,生产环境中此配置不多 |
授权整个网段可访问NFS |
10.0.0.0/24 |
其中24等同于255.255.255.0,指定网段为生产环境中最常见的配置。配置简单,维护方便 |
授权整个网段可访问NFS |
10.0.0.* |
指定网段的另外写法(不推荐) |
授权某个域名客户端访问 |
nfs.test.com |
此方法生产环境中一般情况不常用 |
授权整个域名 |
*.test.com |
nfs.test.com |
4.3 权限参数集
- nfs权限:nfs配置的/etc/exports /data 172.16.1.0/21(rw)决定
- 本地文件系统权限决定drwxr-xr-x
4.4 生产环境常见样例
常见格式说明 |
要共享的目录客户端IP地址或IP段 |
配置案例一 |
/data 10.0.0.0/24(rw,sync) 说明:允许客户端读写,并且数据同步写入到服务器端的磁盘里 注意:24和(之间不能有空格 |
配置案例二 |
/data 10.0.0.0/24(rw,sync,all_squash,anonuid=2000,anongid=2000) 说明:允许客户端读写,并且数据同步写到服务器段的磁盘里,并且指定客户端的用户UID和GID。早期生产环境的一种配置,适合多客户端共享一个NFS服务单用户,如果所有服务器的nfsnobody账户UID都是65534,则本例没必要。早期centos5.5的系统默认情况下nfsnobody的UID不一定是65534,此时如果这些服务器共享一个NFS目录,就会出现访问权限问题 |
配置案例三 |
/home/test 10.0.0.0/24(ro) 说明:只读共享 用途:例如在生产环境中,开发人员有查看生产服务器日志的需求,但又不希望给开发生产服务器的权限,那么就可以给开发提供从某个测试服务器NFS客户端上查看某个生产服务器的日志目录(NFS共享)的权限,当然这不是唯一的方法,例如可以把程序记录的日志发送到测试服务器供开发查看或者通过收集日志等其他方式展现 |
第5章 NFS配置配置参数权限
- 查询方法:man exporst
参数名称 |
参数用途 |
rw |
Eead-write,表示可读可写权限 |
ro |
Eead-only,表示只读权限 |
sync |
请求或者写入数据时,数据同步写入到NFS Server的硬盘后才返回。 优点,数据安全不会丢;缺点,性能比不启用该参数要差 |
async |
写入时数据会先写到内存缓冲区,直到硬盘有空挡才会再写入磁盘,这样可以提升写入效率。风险为若服务器宕机或不正常关机,会损失缓冲区中未写入磁盘的数据(解决办法:服务器主板电池或加UPS,AB(双路电源)不间断电源)! 停电--uos--发电机 |
all_squash |
不管访问NFS Server共享目录的用户身份如何,他的权限都将被压缩成匿名用户,同时它的UID和GID都会变成nfsnobody账号身份。在早期多个NFS客户端同时读写NFS Server数据时,这个参数很有用 l 在生产中配置NFS的重要技巧:
|
no_root_squash |
保持root用户不进行压缩 访问NFS Server共享目录的用户如果是root的话,它对该共享目录具有root权限,这个配置原本是为无盘客户端准备的。用户应避免使用 |
root_squash |
如果访问NFS Server共享目录的用户是root,则它的权限将被压缩成匿名用户,同时,它的UID和GID都会变成nfsnobody账号身份 |
anonuid |
指定的是匿名用户的uid(数字) 参数以anon*开头即指anonymous匿名用户,这个用户的UID设置值通常为nfsnobody的UID值,当然也可以自行设置这个UID值。但是,UID必须存在于/etc/passwd中。在多NFS Cliens时,如多台web server共享一个NFS目录,通过这个参数可以使得不同的NFS Clients写入的数据对所有NFS Clients保持同样的用户权限,即为配置的匿名用户UID对应用户权限,这个参数很有用,一般默认即可 |
anongid |
指定的是匿名用户组的gid(数字) 同anonuid,区别就是吧uid(用户ID)换成gid(组id) |
5.1 anonuid和anongid
说明:修改映射后的默认用户信息
实践操作配置:修改NFS默认映射用户(nfsbobody--www)
5.1.1 第一步:创建映射用户(服务端和客户端都创建,并且gid和uid保持一致)
客户端创建用户www:
[root@backup ~]# useradd www -u 666
[root@backup ~]# id www
uid=666(www) gid=666(www) groups=666(www)
服务端创建用户www
[root@nfs01 ~]# useradd www -u 666
[root@nfs01 ~]# id www
uid=666(www) gid=666(www) groups=666(www)
5.1.2 第二步:服务端进行nfs文件配置并重启,以及修改共享目录权限
[root@nfs01 ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
[root@nfs01 ~]# /etc/init.d/nfs reload
[root@nfs01 ~]# chown -R www.www /data
[root@nfs01 ~]# ll -d /data
drwxr-xr-x 2 www www 4096 Oct 14 13:31 /data
5.1.3 第三步:客户端重新挂载:
[root@backup ~]# umount /mnt
[root@backup ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 190M 34M 146M 19% /boot
[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@backup ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 190M 34M 146M 19% /boot
172.16.1.31:/data 8.8G 1.5G 6.9G 18% /mnt
5.1.4 第四步,客户端进行测试
测试root用户映射:
[root@backup ~]# touch /mnt/user_root.txt
[root@backup ~]# ll /mnt
total 0
-rw-r--r-- 1 www www 0 Oct 14 2017 user_root.txt
测试普通用户:
[www@backup ~]$ touch /mnt/user_www.txt
[www@backup ~]$ ll /mnt
total 0
-rw-r--r-- 1 www www 0 Oct 14 2017 user_root.txt
-rw-rw-r-- 1 www www 0 Oct 14 2017 user_www.txt
5.2 nfs默认配置文件
[root@nfs01 ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,anonuid=666,anongid=666,sec=sys,rw,root_squash,all_squash)
注意:只是查看作用,影响配置的文件是/etc/exports
第6章 实例
6.1 实例一:共享不同的两个目录,分别赋予读和写权限
服务端要求:
nfs服务器172.16.1.31,共享下面两个目录
/data/w 要求的权限可读写,同步数据,所有用户都压缩为匿名用户
/data/r 要求的权限为只读,同步数据,所有用户都压缩为匿名用户
客户端要求
backup服务器 把NFS服务器的/data/r挂载到/data/r
web01服务器 把NFS服务器的/data/w挂载到/data/w
6.1.1 第一步:创建目录环境
nfs服务端:
[root@nfs01 ~]# mkdir -p /data/{r,w}
[root@nfs01 ~]# ll -d /data/{r,w}
drwxr-xr-x 2 root root 4096 Oct 14 20:28 /data/r
drwxr-xr-x 2 root root 4096 Oct 14 20:28 /data/w
[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data/{r,w}
[root@nfs01 ~]# ll -d /data/{r,w}
drwxr-xr-x 2 nfsnobody nfsnobody 4096 Oct 14 20:28 /data/r
drwxr-xr-x 2 nfsnobody nfsnobody 4096 Oct 14 20:28 /data/w
backup客户端:
[root@backup ~]# mkdir -p /data/r
[root@backup ~]# ll -d /data/r
drwxr-xr-x 2 root root 4096 Oct 14 20:40 /data/r
web客户端:
[root@web01 ~]# mkdir -p /data/w
[root@web01 ~]# ll -d /data/w
drwxr-xr-x 2 root root 4096 Oct 14 20:39 /data/w
6.1.2 第二步:编辑nfs服务端配置文件
[root@nfs01 ~]# vim /etc/exports
/data/w 172.16.1.0/24(rw,sync,all_squash)
/data/r 172.16.1.0/24(ro,sync,all_squash)
注意:在配置共享目录时需要考虑到子目录会继承上一级目录的权限,因此尽量让共享目录之间没有继承关系
6.1.3 第三步:重新加载nfs服务
[root@nfs01 ~]# /etc/init.d/nfs reload
6.1.4 第四不:客户端重新挂载
backup客户端:
[root@backup ~]# mount -t nfs 172.16.1.31:/data/r /data/r/
[root@backup ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 190M 34M 146M 19% /boot
172.16.1.31:/data/r 8.8G 1.5G 6.9G 18% /data/r
web01客户端:
[root@web01 ~]# mount -t nfs 172.16.1.31:/data/w /data/w
[root@web01 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 8.8G 1.5G 6.9G 18% /
tmpfs 238M 0 238M 0% /dev/shm
/dev/sda1 190M 34M 146M 19% /boot
172.16.1.31:/data/w 8.8G 1.5G 6.9G 18% /data/w
6.1.5 第五步测试
backup服务端:
[root@backup /]# touch /data/r/.txt
touch: cannot touch `/data/r/.txt': Read-only file system
web客户端:
[root@web01 /]# touch /data/w/.txt
[root@web01 /]# ll /data/w/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 14 21:09 ol
-rw-r--r-- 1 nfsnobody nfsnobody 0 Oct 14 2017 .txt
6.1.6 第六步-客户端开机自动挂载
方法一:把挂载命令命令写入到/etc/rc.local
##backup客户端
mount -t nfs 172.16.1.31:/data/r /data/r
##web客户端
mount -t nfs 172.16.1.31:/data/w /data/w
方法二:写入/etc/fstab(不推荐)
##backup客户端
172.16.1.31:/data/r /data/r nfs defaults 0 0
##web客户端
172.16.1.31:/data/r /data/r nfs defaults 0 0
注意:在生产环境中,对于共享的NFS目录,一般不会配置到/etc/fstab里。在客户端主机重启时因为启动顺序的原因该配置文件会在网卡配置文件之前启动,就会导致客户机无法挂载。一般是通过把mount -t nfs命令放到rc.local中来实现开机自动挂载NFS。或者使用netfs服务
/etc/init.d/netfs start
chkconfig netfs on
chkconfig --list netfs
第7章 重点梳理
当多个NFS客户端访问服务器端的读写文件时,需要具有以下几个权限
l NFS服务器实际要共享的NFS目录权限具有可写入w的权限,即服务器段本地目录安全权限
l NFS服务器/etc/exports设置需要开放可写入的权限,即服务器端的共享权限
l 每台机器对应存在和NFS默认配置UID的相同UID=65534的nfsnobody用户(确保所有客户端的访问权限统一,否则每个机器需要同时建立相同UID的用户,并覆盖NFS的默认用户配置)
只有满足上述三个条件,多个NFS客户端才能具有查看、修改、删除其他任意NFS客户端上传文件的权限,这在大规模的集群环境中作为集群共享存储时尤为重要
7.1 nfs常用路径
NFS重要路径 |
说明 |
/etc/exports |
NFS服务主配置文件,配置NFS具体共享服务的地点,默认内容为空,以行为单位 |
/usr/sbin/exports |
NFS服务的管理命令 |
/usr/sbin/showmount |
常用来在客户端查看NFS配置及挂载结果的命令 |
/var/lib/nfs/etab |
NFS服务端的配置信息查询文件 NFS配置文件的完整参数设定的文件(有很多没有配置但是默认就有的NFS参数) |
/proc/mounts |
存放客户端挂载参数(配置读写权限时,不管服务端还是客户端,只要有一方权限为ro,则最终目录为只读权限) |
/var/lib/nfs/xtab(历史) |
适合centos5.x记录曾经挂载过的NFS客户端的信息,包括IP地址等,centos 6.8由此文件,但是内容为空 |
/var/lib/nfs/rmtab(历史) |
客户端访问服务器exports的信息列表 |
7.2 卸载目录的方法
7.2.1 退出挂载点,进行卸载
cd ..
umount /data/r
7.2.2 不退出挂载点,强制卸载
umount -lf /data/w
第8章 NFS客户端挂载命令
8.1 NFS客户端挂载命令格式
挂载命令 |
挂载的格式类型 |
指定挂载参数 |
NFS服务端提供的共享目录 |
NFS客户端的挂载点 |
mount |
-t nfs |
-o |
172.16.1.31:/data |
/mnt |
注意:该命令在客户端执行 |
8.2 客户端挂载过程:
8.2.1 第一步:测试是否有可以挂载的共享目录
showmount -e 172.16.1.31
8.2.2 第二步:进行目录挂载
mount -t nfs 172.16.1.31:/data /mnt
8.2.3 第三步:检查挂载结果
df -h
第9章 挂载时常见错误
9.1 常见错误
第一个报错:
[root@nfs-client1 ~]# showmount -e 10.0.0.7 <- 恭喜•各位,这里遇到了故障
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
说明:防火墙开启造成的
第二个报错:
[root@nfs-client1 ~]# showmount -e 10.0.0.7
clnt_create: RPC: Program not registered
说明:nfs服务没有启动;nfs与rpc服务启动顺序不对
9.2 排查过程
1)从客户端ping NFS服务器端IP,目的是看物理链路是否通。
[root@nfs-client1 ~]# ping 10.0.0.7
PING 10.0.0.7 (10.0.0.7) 56(84) bytes of data.
64 bytes from 10.0.0.7: icmp_seq=1 ttl=64 time=0.256 ms
64 bytes from 10.0.0.7: icmp_seq=2 ttl=64 time=0.233 ms
2)从客户端telnet服务器端IP端口检查,用于测试NFS服务(RPC服务)是否通。
[root@nfs-client1 ~]# telnet 10.0.0.7 111
Trying 10.0.0.7...
telnet: connect to address 10.0.0.7: No route to host <- 防火请拦截了
如果不通,再通过去NFS服务器端执行如下命令看看111端口是不是开了!
3) 测试是否有可以挂载的共享目录
showmount -e 172.16.1.31
说明:此步测试失败,表示nfs服务配置有问题
第10章 如何设置客户端自动挂载
方法一:将挂载命令放入/etc/rc.local文件中
echo 'mount -t nfs 172.16.1.31:/data /mnt' >>/etc/rc.local
方法二:编写配置/etc/fstab文件
172.16.1.31:/data/r /data/r nfs defaults 0 0
注意:在生产环境中,对于共享的NFS目录,一般不会配置到/etc/fstab里。在客户端主机重启时因为启动顺序的原因该配置文件会在网卡配置文件之前启动,就会导致客户机无法挂载。一般是通过把mount -t nfs命令放到rc.local中来实现开机自动挂载NFS。或者使用netfs服务
/etc/init.d/netfs start
chkconfig netfs on
chkconfig --list netfs
:利用/etc/fstab编写自动挂载功能时,fstab文件会在网络服务启动前进行加载
第11章 常见客户端的挂载参数
man nfs
参数 |
参数功能 |
默认参数 |
fg bg |
l 当在客户端执行挂载时,可选是在前台(fg)还是在后台(bg)执行 l 若在前台执行,则mount会持续尝试挂载,直到成功或挂载时间超时为止 l 若在后台执行,则mount会在后台持续多次进行mount,而不会影响到前台的其他程序操作 l 如果网络联机不稳定,或是服务器常常需要开关机,建议使用bg比较稳妥。 |
fg |
soft hard |
l 当NFS Client以soft挂载server时,若网络或server出现问题,造成client和server无法传输资料,client就会一直尝试,直到timeout后显示错误才停止。若使用soft mount的话,可能会在timeout出现时造成数据丢失,故一般不采用 l 若使用hard模式挂载硬盘时,刚好与soft相反,此时client会一直尝试连接到server,若server有回应就继续刚才的操作,若没有回应NFS client会一直尝试,此时无法umonut或kill。所以常常会配合intr使用,这是默认值。 |
hard |
intr |
l 当使用hard挂载的资源timeout后,若有指定intr参数,可以在timeout后把它中断掉,这避免出问题时系统整个被NFS锁死,建议使用intr |
无 |
rsize wsize |
l 读出(rsize)与写入(wsize)的区块大小(block size),这个设置值可以影响客户端与服务端传输数据的缓冲存储量,一般来说,如果在局域网(LAN),并且客户端与服务器端都具有足够的内存,这个值可以设置大一点,提升缓冲区块将提升NFS文件系统的传输能力。但设置的值也不要太大,最好以网络能够传输的最大值为限 |
centos5(默认): rsize=1024 wsize=1024 centos6(默认): rsize=131072 wsize=131072 |
proto=tcp |
l 使用tcp协议来传输资料,在LAN中会有比较好的性能。若要跨越internet的话,使用proto=tcp会多些,而且传输的数据会有比较好的纠错能力 |
proto=tcp |
第12章 常见服务端挂载参数
man mount
参数 |
参数意义 |
系统默认参数 |
suid nosuid |
l 当挂载的文件系统上有任何SUID的程序,只要使用nosuid就能够取消设置SUID的功能 |
suid |
rw ro |
l 可以制定文件系统是只读(ro)或是可写(rw) |
rw |
dev nodev |
l 是否可以保留装置文件的特殊功能?一般来说只有/dev才会有特殊的装置,因此可以选择nodev |
dev |
exec noexec |
l 是否具有执行文件的权限?如果想要挂载的仅是普通资源数据区(如:图片、附件)那么可以选择noexec |
exec |
user nouser |
l 是否允许普通用户拥有文件的挂载与卸载功能?如果想要保护文件系统,最好不要为普通用户提供挂载和卸载功能 |
nouesr |
auto noauto |
l 这个auto指的是“mount -a”时会不会挂载的项目,如果不需要这个分区随时被挂载,可以设置为noauto l 备注:mount -a==/etc/init.d/netfs start |
auto |
第13章 mount挂载参数参考(相关参数请参照上文中表或man帮助)
13.1 禁止更新目录及文件时间戳,命令如下
测试:
mount -t nfs -o noatime.nodiratime 10.0.0.1:/data /mnt
写入/etc/fstab配置文件
10.0.0.1:/data /mnt nfs noatime,nodiratime 0 0
13.2 安全加优化的挂载方式
测试:
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 10.0.0.1:/data /mnt
写入/etc/fstab配置文件:
10.0.0.0:/data /mnt nfs nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 0 0
13.3 NFS网络文件系统优化挂载的参数建议
测试:
mount -t nfs -o natime,nodiratime,nosuid,noexec,nodev,rsize=131072,wsize=131072 10.0.0.1:/data /mnt
写入/etc/fatab配置文件
10.0.0.1:/data /mnt nfs natime,nodiratime,nosuid,noexec,nodev,rsize=131072,wsize=131072 0 0
第14章 NFS服务的优点和缺陷
14.1 优点
- 简单、易上手、容易管理
- NFS文件系统内数据是在文件系统上的、即数据是可见的
- 部署快速、维护简单方便、且可控、满足需求是最好的
- 可靠、从软件层面上看,数据可靠性高。经久耐用。数据是在文件系统上的
- 服务非常稳定
- 存在单点故障,如果NFS Server宕机了,所有客户端都不能访问共享目录,这个在后期会通过负载均衡及高可用方案弥补
- 在大数据高并发的场合,NFS效率,性能有限(2千万/日一下PV的网站不是瓶颈,除非网站架构设计太差)
- 客户端认证是基于IP和主机名的,权限要根据ID识别,安全性一般(用于内网则问题不大)
- NFS数据是明文的,NFS本身不对数据完整性进行测试
- 多台客户机挂载一个NFS服务器时,连接管理维护麻烦(耦合度高),尤其当NFS服务器端出问题后,所有NFS客户端都处于挂掉状态(测试环境可使用autofs自动挂载解决,正式环境可修复NFS服务或强制卸载)
- 涉及了同步(实时等待)和异步(解耦)的概念,NFS服务器端和客户端相对来说就是耦合度有些高,网站程序也是一样,尽量不要耦合度太高,系统及程序架构师的重要职责就是为程序及架构解耦,让网站的扩展性变的更好
14.2 缺陷
14.3 应用建议
对于大中小网站(参考点2000万/日PV以下)线上应用,都有用武之地、门户网站也会有应用,生产场景应该多将数据的访问往前推,即尽量将静态存储里的资源通过CDN或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器数量再多也是扛不住压力的,而且用户体验也很差