NFS存储服务深度实践

第1章 NFS介绍

1.1 什么是NFS

NFS 是Network File System的缩写,中文意思是网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。

NFS网络文件系统就像windows系统的网络共享,安全功能、网络驱动器映射,这也和Linux系统里的Samba服务类似。只不过一般情况下,windows网络共享服务或Samba服务用于办公局域网共享,而互联网中小型网站集群架构后端常用NFS进行数据共享,如果是大型网站,那么有可能还会用到更为复杂的分布式文件系统,例如:Moosefs(mfs)、GlusterFS、FastDFS。

1.2 NFS的历史介绍

第一个网络文件系统成为File Sccess Listener,由Digital Equipment Corporation

(DEC)在1976年开发。

NFS是第一个构建与IP协议智商的现代网络文件系统。在20世纪80年代,它首先作为实验的文件系统,由Sun Microsystems在内部完成开发。NFS协议终归于Request for Comments(RFC)标准,并且随后演化为了NFSv2.作为一个标准,由于NFS与其他客户端和服务器的互操作能力很好而发展快速。

之后,标准继续演化,称为NFSv3,在RFC1813中有定义。这一新的协议比以前的版本具有更好的可扩展性,支持大文件(超过2GB),异步写入,并且将TCP作为了传输协议,为文件系统在更广泛的网络中使用铺平了道路。在2000年,RFC3010(由RFC3530修订)将NFS带入企业级应用。此时,Sum引入了具有较高安全性带有状态协议的NFSv4(NFS之前的版本都是无状态的)。今天,NFS版本的4.1(由RFC5661定义)增加了对跨越分布式服务器并行访问的支持(称之为PNFS extension)。

NFS系统发展的时间表,包括记录器特性的特定RFC,如下图

NFS系统已经历了近30年的发展,它代表了一个非常稳定的(及可移植)网络文件系统,具备可扩展、高性能等特性,并达到了企业级应用质量标准。由于网络速度的增加和延迟的降低,NFS系统一直是通过网络提供文件系统服务的有竞争力的选择,特别是在中小型互联网企业中,应用十分广泛。

1.3 NFS在企业中的应用场景

在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、附件等静态资源文件,通常网站用户上传到的文件都会放到NFS共享里,例如BBS产品的图片、附件、头像(注意网站BBS程序不要放NFS共享里),然后前端所有的节点访问这些静态资源时都会读取NFS存储上的资源。NFS是当前互联网系统架构中最常用的数据存储服务器之一,前面说过,中小型网站公司应用频率更高,大公司或门户除了使用NFS外,还可能会使用更为复杂的分布式文件系统,比如Moosefs(mfs)、GlusterFS、FastDF等。

在企业生产集群架构中,NFS作为所有前端web服务的共享存储,存储的内容一般包括网站用户上传的图片、附件头像等,注意,网站的程序代码不要放NFS共享里,因为网站程序是开发运维人员统一发布的,不存在发布延迟问题,直接批量发布到web节点提供访问比共享到NFS里访问效率更高。

1.4 企业生产集群为什么需要共享存储角色

这里通过图解给大家展示一下集群架构需要共享存储服务的理由。例如:A用户传图片到web服务器,然后让B用户访问这张图片,结果B用户访问的请求分发到了web2,因为web2上没有这张图片,这就导致它无法看到A用户上传的图片,如果此时有一个共享存储,A用户上传图片的请求无论是分发到web1还是web2上,最终都会存储到共享存储上,而在B用户访问图片是,无论请求分发到web1还是web2行,最终也都会去共享存储上找,这样就可以访问到需要的资源了。这个共享存储的位置可以通过开源软件和商业硬件实现,互联网中小型集群架构会用普通PC服务器配置NFS网络文件系统实现。

中小型互联网企业一般不会买硬件存储,因为太贵,大公司如果业务发展很快的话,可能会临时买硬件存储顶一下网站的压力,当网站并发继续加大时,硬件存储的扩展相对就会很费劲,且价格成几何级数增加。例如:淘宝网就曾替换掉了很多硬件设备,比如,用lvs+haproxy替换了netscaler负载均衡设备,用FastDFS、TFS配合PC服务器替换了netapp、emc等商业存储设备,去IOE正在成为互联网公司的主流。

第2章 NFS系统原理介绍

2.1 NFS系统挂载结构图与详解

如上图所示,在NFS服务器端设置好一个共享目录/video后,其他有权限访问NFS服务器端的客户端就可以将这个共享目录/video挂载到客户端本地的某个挂载点(其实就是一个目录,这个挂载点目录可以自己随意指定),上图中的两个NFS客户端本地的挂载点分别为/v/video和/video,不同客户端的挂载点可以不相同。

客户端正确挂载完毕后,就进入到了nfs客户端的挂载点所在的/v/video或/video目录,此时就可以看到NFS服务器端/video共享出来的目录下的所有数据。在客户端上查看是,NFS服务器端的/video目录就相当于客户端本地的磁盘分区或目录,几乎感觉不到使用上的区别,根据NFS服务端授予的NFS共享权限以及共享目录的本地系统权限,只要是指定的NFS客户端操作挂载/v/video或/video的目录,就可以将数据轻松地存储到NFS服务器端的/video目录中了。

客户端挂载NFS后,本地挂载基本信息显示如下:

[[email protected] ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 6.9G 1.5G 5.1G 23% /

tmpfs 242M 0 242M 0% /dev/shm

/dev/sda1 190M 36M 145M 20% /boot

172.16.1.31:/data 6.9G 1.5G 5.1G 23% /mnt<===172.16.1.31为nfs server的ip地址

提示:mount 源 目标

mount 712.16.1.31:/video /video

从挂载信息来看,和本地的磁盘分区几乎没什么差别,只是文件系统对应列的开头是以IP地址开头的形式了。

大家必须知道,NFS在传输数据时使用的端口会随机选择,那NFS客户端是怎么知道NFS服务端使用的是哪个客户端呢?

答案:就是通过RPC(中文意思远程过程调用,英文Remote Procedure Call简称RPC)协议/服务来实现,这个RPC服务的应用在门户级的网站有很多,例如:百度。接下来,就来谈谈什么是RPC协议/服务。

如图所以,PRC服务就像买房与卖房之间的中介一样,RPC也就是服务端与客户端的中介。

NFS需要有RPC服务(rpcbind服务)的协助才能成功对外提供服务。无论是NFS客户端还是NFS服务器端,当要使用NFS时,都需要首先启动RPC服务(rpbind服务),NFS服务必须在RPC服务启动之后启动,客户端无需启动NFS服务,但需要启动RPC服务。

注意:NFS的RPC服务,在CentOS5.5.X名称为portmap,在CentOS6.X下名称为rpcbind。

参考资料:

http://www.tldp.org/HOWTO/NFS-HOWTO/indes.html

http://www.citi.umich.edu/projects/nfsv4/linux/

http://www.vanemery.com/Linux/NFSv4/NFSv4-no-rpcsec.html

http://www.ibm.com/developerworks/cn/linux/l-network-filesystems/

第3章 NFS配置过程Centos6.7

3.1 老男孩教育NFS服务端配置步骤:

1、安装软件

yum install nfs-utils dos2unix rpcbind -y

yum

2、启动服务(注意先后顺序)

/etc/init.d/rpcbind start

rpcinfo -p localhost

/etc/init.d/nfs start

rpcinfo -p localhost

3、设置开机自启动

chkconfig nfs on

chkconfig rpcbind on

4、配置nfs服务

echo " /data 172.16.1.0/21(rw,sync)">>/etc/exports

mkdir -p /data

chown -R nfsnobody.nfsnobody /data

(查看nfs默认使用的用户以及共享的参数cat /var/lib/nfs/etab)

5、重新加载服务(优雅重启)

/etc/init.d/nfs reload =====exportfs -rv

6、检查或测试挂载

showmount -e127.0.0.1

老男孩教育NFS客户端:

1、安装软件

yum install nfs-utils rpcbind -y

2、启动rpcbind

/etc/init.d/rpcbind start

3、配置开机自启动

chkconfig rpcbind on

4、测试服务端共享情况

showmount -e 172.16.1.31

5、挂载

mkdir -p /data

mount -t nfs 172.16.1.31:data /data

6、测试读,写

3.2 小结:

NFS服务端与web端都安装nfs与rpc

[[email protected] ~]# yum install nfs-utils rpcbind -y

[[email protected] ~]# yum install nfs-utils rpcbind -y

NFS服务端

[[email protected] ~]#/etc/init.d/rpcbind start

[[email protected] ~]# /etc/init.d/nfs start

加入开机启动

[[email protected] ~]# chkconfig nfs on

[[email protected] ~]# chkconfig rpcbind on

web客户端

[[email protected] ~]# /etc/init.d/rpcbind start

加入开机启动

[[email protected] ~]#chkconfig rpcbind on

第4章 NFS软件

4.1 NFS软件列表

要部署NFS服务,需要安装下面的软件包:

q nfs-utils:NFS服务的主程序,包括rpc.nfsd、rpc.mountd这两个daemons和相关文档说明,以及执行命令文件等。

q rpcbind:CentOS6.X下面的RPC的主程序。NFS可以视为一个RPC程序,再启动任何一个RPC程序之前,需要做好端口和功能的对应映射工作,这个映射工作就是由rpcbind服务来完成的。因此,在提供NFS服务之前必须先启动rpcbind服务才行

4.2 查看NFS软件包

可使用如下命令查看默认情况下CentOS5.8/6.6里NFS软件的安装情况。

[[email protected] ~]# rpm -qa nfs-utils rpcbind

rpcbind-0.2.0-11.el6_7.x86_64

nfs-utils-1.2.3-64.el6.x86_64

CentOS6.6默认没有安装NFS软件包(CentOS5默认会安装),可以使用yum install nfs-utils rpcbind -y命令来安装NFS软件。

4.3 启动rpcbind服务

因为NFS及其辅助程序都是基于RPC协议的(使用的端口为111),所有首先要确保系统中运行了rpcbind服务。

[[email protected] ~]# LANG=en #临时调整系统位英文字符集,便于grep过滤

[[email protected] ~]# /etc/init.d/rpcbind status #检查rpcbind服务状态

rpcbind (pid 27427) is running...

[[email protected] ~]# rpcinfo -p localhost #检查rpcinfo信息

program vers proto port service

100000 4 tcp 111 portmapper

100000 3 tcp 111 portmapper

100000 2 tcp 111 portmapper

100000 4 udp 111 portmapper

...省略部分

100021 1 tcp 37256 nlockmgr

100021 3 tcp 37256 nlockmgr

100021 4 tcp 37256 nlockmgr

[[email protected] ~]# /etc/init.d/rpcbind start #启动rpcbind服务

[[email protected] ~]# ps -ef|grep "rpc|nfs"

root 29325 28803 0 22:09 pts/1 00:00:00 grep rpc|nfs

[[email protected] ~]# ps -ef|egrep "rpc|nfs"

rpc 27427 1 0 12:53 ? 00:00:00 rpcbind

root 27474 2 0 12:53 ? 00:00:00 [rpciod/0]

root 27483 1 0 12:53 ? 00:00:00 rpc.rquotad

root 27488 1 0 12:53 ? 00:00:00 rpc.mountd

root 27495 2 0 12:53 ? 00:00:00 [nfsd4]

root 27496 2 0 12:53 ? 00:00:00 [nfsd4_callbacks]

root 27497 2 0 12:53 ? 00:00:00 [nfsd]

root 27498 2 0 12:53 ? 00:00:00 [nfsd]

root 27499 2 0 12:53 ? 00:00:00 [nfsd]

root 27500 2 0 12:53 ? 00:00:00 [nfsd]

root 27501 2 0 12:53 ? 00:00:00 [nfsd]

root 27502 2 0 12:53 ? 00:00:00 [nfsd]

root 27503 2 0 12:53 ? 00:00:00 [nfsd]

root 27504 2 0 12:53 ? 00:00:00 [nfsd]

root 27535 1 0 12:53 ? 00:00:00 rpc.idmapd

root 28257 2 0 15:31 ? 00:00:00 [nfsiod]

root 28258 2 0 15:31 ? 00:00:00 [nfsv4.0-svc]

加入开机自启动

[[email protected] ~]# chkconfig rpcbind on

[[email protected] ~]# less /etc/init.d/rpcbind

#! /bin/sh

#

# rpcbind Start/Stop RPCbind

#

# chkconfig: 2345 13 87

[[email protected] ~]# less /etc/init.d/nfs

#!/bin/sh

#

# nfs This shell script takes care of starting and stopping

# the NFS services.

#

# chkconfig: - 30 60

可以看到他们启动的先后次序分别是rpcbind13和nfs30。如果是放进rc.local里面的话就一定要注意启动先后次序。也可以把服务统一放进rc.local里面,这样自己跑什么服务都知道

[[email protected] ~]# /etc/init.d/rpcbind start #开启服务

[[email protected] ~]# /etc/init.d/rpcbind statis

Usage: /etc/init.d/rpcbind {start|stop|status|restart|reload|force-reload|condrestart|try-restart}

[[email protected] ~]# /etc/init.d/rpcbind status #查看服务状态

rpcbind (pid 27427) is running...

[[email protected] ~]# lsof -i :111 #查看端口号

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME

rpcbind 27427 rpc 6u IPv4 40188 0t0 UDP *:sunrpc

rpcbind 27427 rpc 8u IPv4 40191 0t0 TCP *:sunrpc (LISTEN)

rpcbind 27427 rpc 9u IPv6 40193 0t0 UDP *:sunrpc

rpcbind 27427 rpc 11u IPv6 40196 0t0 TCP *:sunrpc (LISTEN)

[[email protected] ~]#

第5章 NFS服务企业案例配置实践

共享/data目录给172.16.1.0整个网段的主机读写,实现把nfs server上的/data目录共享给172.16.1.0整个网段的主机,且可读写。

5.1 在NFS Server端执行的操作

1)查看系统环境

[[email protected] ~]# cat /etc/redhat-release

CentOS release 6.7 (Final)

[[email protected] ~]# uname -r

2.6.32-573.el6.x86_64

编辑 /etc/exports

[[email protected] ~]# vim /etc/exports

#data shared by wangtian at 20160424

/data 172.16.1.0/21(rw,sync)

~

~

~

~

~

[[email protected] ~]# tail /etc/exports

#data shared by wangtian at 20160424

/data 172.16.1.0/21(rw,sync

平滑重启

[[email protected] ~]# /etc/init.d/nfs reload====》exportfs -rv

先进行域名解析,再挂载,速度就很快。

[[email protected] ~]# vi /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.loca

ldomain4

::1 localhost localhost.localdomain localhost6 localhost6.loca

ldomain6

172.16.1.5 lb01

172.16.1.6 lb02

172.16.1.7 web02

172.16.1.8 web01

172.16.1.51 db01

172.16.1.31 nfs01

172.16.1.41 backup

172.16.1.61 m01

把下面的IP与主机名加进去

然后进行挂载

[[email protected] ~]# mount -t nfs 172.16.1.31:/data /mnt

查看挂载结果

[[email protected] ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 6.9G 1.5G 5.1G 23% /

tmpfs 242M 0 242M 0% /dev/shm

/dev/sda1 190M 36M 145M 20% /boot

172.16.1.31:/data 6.9G 1.5G 5.1G 23% /mnt

5.2 客户端

[[email protected] ~]# vi /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.loca

ldomain4

::1 localhost localhost.localdomain localhost6 localhost6.loca

ldomain6

172.16.1.5 lb01

172.16.1.6 lb02

172.16.1.7 web02

172.16.1.8 web01

172.16.1.51 db01

172.16.1.31 nfs01

172.16.1.41 backup

172.16.1.61 m01

[[email protected] ~]# /etc/init.d/rpcbind start

Starting rpcbind: [ OK ]

[[email protected] ~]# showmount -e 172.16.1.31

Export list for 172.16.1.31:

/data 172.16.1.0/21

[[email protected] ~]# mount -t nfs 172.16.1.31:/data /mnt

[[email protected] ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 6.9G 1.5G 5.1G 22% /

tmpfs 242M 0 242M 0% /dev/shm

/dev/sda1 190M 36M 145M 20% /boot

172.16.1.31:/data 6.9G 1.5G 5.1G 23% /mnt

[[email protected] ~]#

开始在nfs服务端写入文件

[[email protected] data]# cd /data/

[[email protected] data]# touch {a..z}

[[email protected] data]# ls

a c e g i k m o q s u w y

b d f h j l n p r t v x z

可以看到客户端已经同步了

[[email protected] mnt]# ls

a c e g i k m o q s u w y

b d f h j l n p r t v x z

此时客户端还不能写,权限不够,要回到服务端更改nfsnobody权限

[[email protected] data]# grep nfsnobody /etc/passwd

nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin

[[email protected] data]# chown -R nfsnobody.nfsnobody /data

再回到客户端就可以写了

[[email protected] mnt]# rm -f *

[[email protected] mnt]# ls

[[email protected] mnt]# touch {1..3}

[[email protected] mnt]# ls

1 2 3

[[email protected] mnt]#

再到服务端查看

[[email protected] data]# ls

1 2 3

5.3 配置小结

服务端vim /etc/exports

#data shared by wangtian at 20160424

/data 172.16.1.0/21(rw,sync)

查看tail /etc/export

#data shared by wangtian at 20160424

/data 172.16.1.0/21(rw,sync)

平滑重启,优雅重启

/etc/init.d/nfs reload

域名解析(服务端,客户端都要解析)

cat >>/etc/hosts<<EOF
172.16.1.5      lb01
172.16.1.6      lb02
172.16.1.7      web02
172.16.1.8      web01
172.16.1.51     db01 db01.etiantian.org
172.16.1.31     nfs01
172.16.1.41     backup
172.16.1.61     m01
EOF

vi /etc/hosts

把ip 主机名追加进去

172.16.1.5 lb01

172.16.1.6 lb02

172.16.1.7 web02

172.16.1.8 web01

172.16.1.51 db01

172.16.1.31 nfs01

172.16.1.41 backup

172.16.1.61 m01

查看服务有没有

[[email protected] /]# showmount -e 127.0.0.1

不放心,可以自己挂载自己

[[email protected] /]# mount -t nfs  172.16.1.31:/data /mnt

然后df -h 查看

[[email protected] /]# df -h

客户端

查看有没有

[[email protected] ~]#showmount -e 172.16.1.31

然后挂载

[[email protected] ~]# mount -t nfs  172.16.1.31:/data /mnt

在查看

[[email protected] ~]# df -h

在服务端

[[email protected] /]# cd /data/

[[email protected] data]# touch {a..z}

[[email protected] data]# ls

a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z

在客户端查看

[[email protected] ~]# ls /mnt/

a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z

如果想再客户端可以写,就要在服务端给相应目录权限

[[email protected] data]# chown -R nfsnobody.nfsnobody /data

第6章 NFS服务的重点知识梳理

当多个NFS客户端访问服务器端的读写文件时,需要具有以下几个权限:

q NFS服务器/etc/exports设置需要开放可写入的权限,及服务端的共享目录权限。

q NFS服务器实际要共享的NFS目录权限具有可写入w的权限,及服务端本地目录的安全权限。

q 每台机器都对应存在和NFS摩恩配置UID的相同UID65534的nfsnobody用户(确保所有客户端的访问权限统一,否则每个机器需要同时建立相同UID的用户,并覆盖NFS的默认用户配置)。

只有满足上述三个条件,多个NFS客户端才能具有查看、修改、删除其他任意NFS客户端上传文件的权限,这在大规模的集群环境中作为集群共享存储时尤为重要。

第7章 NFS内核优化建议

下面是优化选项说明

q /proc/sys/net/core/rmem_default:该文件指定了接受套接字缓冲区大小的默认值(以字节为单位),默认设置:124928.

q /proc/sys/net/core/rmem_maxt:该文件指定了接受套接字缓冲区大小的最大值(以字节为单位),默认设置:124928.

q /proc/sys/net/core/rmem_default:该文件指定了发送套接字缓冲区大小的默认值(以字节为单位),默认设置:124928.

q /proc/sys/net/core/rmem_default:该文件指定了接受套接字缓冲区大小的最大值(以字节为单位),默认设置:124928.

上述文件对应的具体内核优化命令如下:

cat >>/etc/sysctl.conf<<EOF

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

EOF

sysctl -p

第8章 企业生产场景NFS共享存储优化小结

q 硬件:sas/ssd磁盘,买多块,raid0/raid10。网卡吞吐量要大,至少千兆(多块bond)。

q NFS服务器端配置:/data 172.16.1.0/24(rw,sync,all_squash,anonuid=65534,anongid=65534)

q NFS客户端挂载优化配置命令:

mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,rsize=131072,wsize=131072 172.16.1.7:/data/ /mnt #兼顾安全性能

q 对NFS服务的所有服务器内核进行优化时,执行如下命令:

cat >>/etc/sysctl.conf<<EOF

net.core.wmem_default = 8388608

net.core.rmem_default = 8388608

执行sysctl -p生效。

q 如果卸载的时候提示“umount:/mnt:device is busy”,需要退出挂载目录再进行卸载,如果是NFS Server宕机了,则需要强制卸载,可执行umount -lf /mnt.

q 大型网站NFS网络文件系统的替代软件为分布式文件系统Moosefs(mfs)、GlusterFS、FastDFS。

q 放进/etc/fstab生效的方法:chkconfig netfs on 让网卡先启动,再挂载

第9章 NFS系统应用的优缺点说明

NFS服务可以让不同的客户端挂载使用同一个共享目录,也就是将其作为共享存储使用,这样可以保证不同节点客户端数据一致性,在集群架构环境中经常会用到。如果是windows和linux混合环境的集群系统,可以用samba来实现。

优点:

q 简单,容易上手,容易掌握。

q NFS文件系统内数据是在文件系统之上的,即数据是能看见的。

q 部署快速,维护简单方便,且可靠那个,满足需求就是最好的。

q 可靠,从软件层面上看,数据可靠性高,经久耐用。数据是在文件系统之上的。

q 服务非常稳定

局限:

q 存在单点故障,如果NFS Server宕机了,所有客户端都不能访问共享目录。这个在后期的课程会通过负载均衡及高可用方案弥补。

q 在大数据高并发的场合,NFS效率、性能有限(2千万/日一下PV的网站不是瓶颈,除非网站架构设计太差)。

q 客户端认证是基于IP和主机名的,权限要根据ID识别,安全性一般(用于内网则问题不大)。

q NFS数据时是明文的,NFS本事不对数据完整性做验证。

q 多台客户机器挂载一个NFS服务器时,连接管理维护麻烦(耦合度多高。)尤其NFS服务端出问题后,所有NFS客户端都处于挂掉状态(测试环境可使用autofs自动挂在解决,正式环境可修复NFS服务或强制卸载)

q 设计了同步(实时等待)和异步(解耦)的概念,NFS服务端和客户端相对来说就是耦合度有些高。网站程序也是一样,尽量不要耦合度太高,系统及程序架构师的重要职责就是为程序及架构解耦,让网站的扩展性变得更好。

应用建议:

大中小型网站(参考的2千万/日一下PV以下)线上应用,都有用武之地。门户站也会有应用,生产场景应该多把数据的访问往前推,即尽量把静态存储里的资源通过CDN或缓存服务器提供服务,如果没有缓存服务或架构不好,存储服务器数量再多也是扛不住压力的,而且用户体验会很差。

第10章 NFS细节详解

10.1 exports配置文件

exports配置文件格式:

NFS共享的目录 NFS客户端地址1(参1、参2...) 客户端地址(参1、参2...)

例:

/data 172.16.1.0/21(rw,sync)

参数含义:

NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径,如(/data)。注意共享目录的本地权限,如果需要读写共享,一定要让本地目录被NFS客户端的用户(nfsnobody)可以读写。

NFS客户端地址:为NFS服务端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段地址,还可以用“*”来匹配所有客户端服务器,这里所谓的客户端一遍来说是前段的业务服务器,例如:web服务。

指定NFS客户端之地的配置详细说明

客户端地址


具体地址


说明


授权单一客户端访问NFS


10.0.0.30


一般强开下,生产环境中此配置不多。


授权整个网段可访问NFS


10.0.0.0/24


其中的24等同于255.255.255.0,指定网段为生产环境中最常见的配置。配置简单,维护方便。


授权整个网段可访问NFS


10.0.0.*


指定网段的另外写法(不推荐使用)。


授权某个域名客户端访问


nfs.oldboyedu.con


此方法生产环境中一般情况不常用


授权整个域名客户端访问


*.oldboyedu.com


此方法生产环境中一般情况不常用

提示:NFS默认配置文件/etc/exports其实是存在的,但是没有内容,需要自行配置。

10.2 NFS配置权限参数

NFS配置权限设置常用参数说明

参数名称


参数用途


rw


read-write,表示可读写权限


ro


read-only,表示只读权限


sync


请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回。

优点:数据安全不会丢。缺点:性能比不启动该参数差


async


写入时数据会先写到内存缓冲区,直到硬盘有空档才会写入磁盘,这样可以提升写如下效率!风险:若服务器宕机或不正常关机,会损失缓冲区中未写入磁盘的数据(解决办法:服务器主板电池或加UPS不间断电源)


no_root_squash


访问NFS Server共享目录的用户如果是root的话,它对该共享目录具有root权限。这个配置原本是为无盘客户端准备的。用户应避免使用


all_squash


不管访问NFS Server共享目录的身份如何,它的权限都将被压缩成匿名用户,同时它的UID和GID都会变成nfsnobody账号身份。在早期多个NFS客户端同时写入NFS Server数据时,这个参数很有用。


root_squash


如果访问NFS Server共享目录的用户如果是root,则它的权限将被压缩成匿名用户,同时它的UID和GID都会变成nfsnobody账号身份。


anonuid


参数以anon*开头即指anonymous匿名用户,这个用户的UID设置值通常为nfsnobody的UID值,当然也可以自行这个UID值。但是UID必须存在于/etc/passwd中。在多NFS Clients时,如多台web server共享一个NFS目录,通过这个参数可以使得不同的NFS Clients写入的数据对有所NFSClients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用,一般默认即可。


anongid


同anonuid,区别就是把uid(用户id)换成gid(组id)。

在生产中配置NFS的重要技巧:

1)确保所有客户端服务器对NFS共享目录具有相同的用户访问权限。

a.all_squash把所有客户端都压缩成固定的匿名用户(UID相同)。

b.就是anonuid,anongie指定的UID和GID的用户

2)所有的客户端和服务端都需要一个相同的UID和GID的用户,即nfsnobody(UID必须相同)

10.3 NFS常用路径


NFS常用路径


说明


/etc/exports


NFS服务主配置文件,配置NFS具体共享服务的地点,默认内容诶空。以行为单位。

[[email protected] ~]# cat /etc/export

#data shared by wangtian at 20160424

/data 172.16.1.0/21(rw,sync)


/usr/sbin/exportfs


NFS服务的管理命令。例如:可以加载NFS配置生效,还可以直接配置NFS共享目录,即无需配置/etc/exports实现共享。[[email protected] ~]#exportfs -rv加载配置生效,等价优雅重启(平滑重启)/etc/init.d/nfs reload


/usr/sbin/showmount


常用来在客户端,查看NFS配置及挂载结果的命令show mount information for an NFS server配置nfsserver,分别在服务端及客户端查看挂载情况。


/var/lib/nfs/etab


NFS配置文件的完整参数设定的文件(有很多没有配置但是默认就有的NFS参数)/var/lib/nfs/etab maset table of exports


/var/lib/nfs/xtab


适合C5.x记录曾经挂载过NFS客户端的信息,包括IP地址等,CentOS6.6没有此文件了。


/proc/mounts


客户端挂载参数[[email protected] ~]#grep mnt/proc/mounts


/var/lib/nfs/rmtab


客户端访问服务器exports的信息列表

[[email protected] ~]# df -h

Filesystem Size Used Avail Use% Mounted on

/dev/sda3 6.9G 1.5G 5.1G 23% /

tmpfs 242M 0 242M 0% /dev/shm

/dev/sda1 190M 36M 145M 20% /boot

172.16.1.31:/data 6.9G 1.5G 5.0G 23% /mnt

当服务端挂掉的时候,客户端df -h 会失效,此时就要使用mount查看挂载信息

第11章 本章重点回顾

q NFS服务的访问原理流程(会口述)*****

q NFS作为集群共享存储角色的搭建、部署。

q NFS作为集群共享角色的排障,高级优化(会口述)*****

q mount命令的知识及参数,如-o(noatime,nodirtime,noexec,nosuid,nodec,rsize,wsize)等。

q fstab文件的知识。

q 常用命令showmount,exportfs,umount(-lf),rpcinfo,

q NFS的优缺点,适合的应用场景*****

q 替代产品(Moosefs(mfs)、GlusterFS、FastDFS)*****。

q 了解autofs

时间: 2024-08-04 22:18:31

NFS存储服务深度实践的相关文章

NFS存储服务及部署

1 NFS简介 1.1 什么是NFS NFS=Network File System=网络文件系统.主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录.NFS客户端(一般为应用服务器,例如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载到NFS客户端本地系统中(就是某一个挂载点下).从客户端本地看,NFS服务器端共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录.分布式文件系统:Moosefs(mfs).Glu

NFS存储服务部署(上)

作者:George 归档:学习笔记 2018/1/24 NFS存储服务部署(上) 1.1 NFS服务介绍 1.1.1 什么是NFS? 1. NFS--Network File Systemt网络文件系统,叫称为网络共享文件系统 2. 作用:通过网络(一般为局域网)让不同主机系统之间可以共享文件 3. NFS服务和winodws系统的网络共享很相似,但NFS无法部署在windows上 4. windows与linux网络共享使用FTP.samba,它们都支持windows与linux之间共享 5.

部署NFS存储服务(下)

作者:Georgekai 归档:学习笔记 2018/1/25 部署NFS存储服务(下) 2.1 服务端有关的配置 2.1.1 练习题:共享不同的俩个目录,分别赋予读和写权限 服务端部署过程: 第一个里程:编写nfs配置文件 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) 注:服务端配置文件中,尽量避免继承权限的发生(因权限大的会生效) 第二

NFS存储服务(下)

第1章 回顾及练习 1.1  回顾总结 1.1.1 NFS存储服务是什么? 网络文件系统,实现数据共享统一一致 1.1.2 NFS工作原理 1. 什么是rpc服务 rpc服务类似于中介,nfs服务将启动的进程和端口信息,向rpc服务进行注册 nfs客户端向rpc服务发出请求,进行共享目录挂载,从而实现通过网络存储数据信息 2. 服务端做了三件事: ①. 首先启动rpc服务 ②. 其次启动nfs服务 ③. nfs服务向rpc服务进行注册,只注册一次(如果nfs服务进行了重启,会再次注册) 3. 客

Linux(10):期中架构(2)--- NFS存储服务

1. 共享存储服务概念: # NFS是Network File System的缩写,中文意思是网络文件系统, # 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录. 2. NFS共享存储服务的应用: # 将数据存储到一台服务器上,实现数据统一一致,共享访问 # NFS存储服务器中主要存储哪些信息:用户上传的图片 音频 视频 附件等信息 # NFS服务是分为服务端和客户端 # 存储服务器:NFS服务端 网站web服务器:NFS客户端 # 实现共享存储好处: 01. 实现

NFS存储服务(上)

第1章 NFS介绍 1.1 什么是NFS NFS是Network File System的缩写,中文意思是网络文件系统 它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录 NFS==网络共享文件系统 互联网中小型网站集群架构后端常用NFS进行数据共享 如果大型网站,那么有可能还会用到更复杂的分布式文件系统,例如:Moosefs(mfs).GlusterFS.FastDFS 扩展:NFS网络文件系统很像Windows系统的网络共享,但是无法部署在windows系统上,NF

LAMP集群项目五 部署NFS存储服务并设置WEB服务挂载

yum install nfs-utils portmap -y 在centos6.5中portmap已经改为rpcbind 先启动rpcbind /etc/init.d/rpcbind start /etc/init.d/nfs start mkdir /backup   创建一个共享目录\ 确保nfsnobody都是同一个uid : 65534 ,否则不是一个权限 grep  nfsnobody  /etc/passwd vim  /etc/exports /backup 192.168.1

NFS存储服务

一.NFS 原理图 二.NFS 原理描述 2.1:什么是NFS NFS中文名字:网络共享存储,就是通过网络共享目录,让网络上的其他服务器能够挂载访问共享目录的数据(NFS一般都是用来存放视频.附件.图片等静态数据的). NFS是通过网络来进行服务端和客户端数据传输的,那么只要是通过网络的就一定会有端口,那NFS的端口是什么呢?很失望的是NFS的端口是随机的,每次重启服务端口都会改变. 那么客户端是怎样知道服务端的端口的呢?其实NFS服务器是通过远程过程调用(RPC)协议/服务来实现的,也就是说R

nfs存储服务实时同步

1.NFS简介 NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过网络共享资源.将NFS主机分享的目录,挂载到本地客户端当中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,在客户端端看起来,就像访问本地文件一样. RPC,基于C/S模型.程序可以使用这个协议请求网络中另一台计算机上某程序的服务而不需知道网络细节,甚至可以请求对方的系统调用. 对于Linux而言,文件系统是在内核空间实现的,即文件系统比如ext3.ext4等是在Kern