您的位置:首页 > 其它

NFS存储服务(上)

2018-01-25 21:32 288 查看

第1章 NFS介绍

1.1 什么是NFS

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

1.2 NFS在企业中的应用场景

1.2.1 为什么要用这个NFS软件?

实现web集群中服务器数据一致性
a. 实现数据信息的共享b. 实现数据信息的一致



NFS在网络文件共享服务作用总结:
1. 负载均衡设备会将访问流量,进行分流,但不便于文件和数据的互相访问;
2. 利用服务器间的数据同步可以使用户之间数据互访,但同步管理操作过于复杂;
3. 利用NFS服务器可以统一管理数据,使用户之间可以顺利互访

1.3 共享存储服务分类

硬件存储:IBM oracle(sun)EMC(去IOE)
软件存储:NFS mfs ftp samba

第2章 NFS共享系统原理

2.1 NFS系统挂载结构



简单描述NFS工作原理:
1. 部署好NFS服务,在NFS服务端创建一个video共享目录
2. web服务器(NFS客户端)创建一个本地video目录,作为一个挂载点
3. web服务器通过mount命令实现网络挂载,将nfs服务器上video目录挂载到本地video目录挂载点上
4. web服务器(NFS客户端)上在video目录中,增加 删除 修改数据的操作,都等价于在NFS服务端
video目录中的操作

2.2 什么是RPC(Remote Procedure Call)

2.2.1 简单理解



根据上图可以简单理解RPC相当于中介服务
默认NFS服务启动会产生多个进程,多个端口号信息并且产生的多个端口号信息会在服务重启时,发生变化,因此不便于nfs客户端进行连接访问
在拥有rpc服务端之后,可以让nfs客户端直接访问rpc服务,提供中介服务,便于nfs客户端进行连接访问

2.2.2 没有RPC服务的状况

因每个服务进程对应的端口号不同,并且是随机的,所有对于客户端来说不知道该访问哪个端口。



2.2.3 RPC服务的情况

NFS服务端的每个服务进程都会向RPC服务进程注册,客户端也只需访问RPC服务的111端口即可,由RPC服务来告诉客户端访问服务的端口号。



2.2.4 标准工作流程图



NFS服务工作流程图:
01. 启动rpc服务,建立中介服务
02. 启动nfs服务,开启进程信息(房源信息),向rpc服务进行注册
03. rpc服务接收到nfs服务进程信息(房源信息)
04. nfs客户端向rpc服务发出请求(访问共享目录)
05. rpc服务响应nfs客户端请求
06. nfs客户端与nfs服务端共享目录建立网络连接,实现数据网络存储

当访问程序通过NFS客户端向NFS服务器存取文件时,其请求数据流程大致如下:
1. 首先用户访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务(rpcbind服务)的111端口发出NFS文件存取功能的询问请求。
2. NFS服务器端的RPC服务(rpcbind服务)找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务(rpcbind服务)。
3. 此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据。
4. NFS客户端把数据存取成功后,返回给前端访问程序,告知用户存取结果,作为网站用户,就完成了一次存取操作。
更多的NFS相关信息可以参考: 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/ http://www.tldp.org/HOWTO/NFS-HOWTO/index.html

第3章 NFS网络共享文件系统服务部署流程

3.1 NFS服务端部署流程

3.1.1 第一个里程:检查nfs服务相关软件是否安装

rpm -qa|grep -E "nfs-utils|rpcbind"
yum install -y nfs-utils rpcbind
[root@nfs01 ~]# rpm -qa|grep -E "nfs-utils|rpcbind"[root@nfs01 ~]# yum install -y nfs-utils rpcbind[root@nfs01 ~]# rpm -qa|grep -E "nfs-utils|rpcbind"nfs-utils-lib-1.1.5-13.el6.x86_64rpcbind-0.2.0-13.el6_9.1.x86_64nfs-utils-1.2.3-75.el6_9.x86_64
3.1.2 第二个里程:编写nfs服务配置文件
NFS服务的默认配置文件/etc/exports是安装完软件就有的,并且默认是空的,需要用户自行配置。
vim /etc/exports
1. 定义共享目录 ---------> /data 2. 定于允许使用共享目录的主机或网段地址信息3. 定义共享目录权限信息(注意:“24和(”之间没有空格) /data 172.16.1.0/24(rw,sync,all_squash)
[root@nfs01 ~]# vim /etc/exports# 01.定义共享目录 02.定于允许使用共享目录的主机或网段地址信息(03.定义共享目录权限信息)/data 172.16.1.0/24(rw,sync,all_squash)
3.1.3 第三个里程:创建共享目录 mkdir /data
chown -R nfsnobody.nfsnobody /data/
[root@nfs01 ~]# mkdir /data[root@nfs01 ~]# chown -R nfsnobody.nfsnobody /data/[root@nfs01 ~]# ll /data/ -ddrwxr-xr-x 2 nfsnobody nfsnobody 4096 Jan 24 12:11 /data/
nfsnobody是默认用户

3.1.4 第四个里程:启动nfs相关服务

/etc/init.d/rpcbind start
/etc/init.d/nfs start
[root@nfs01 wuhuang]# /etc/init.d/rpcbind startStarting rpcbind: [ OK ][root@nfs01 wuhuang]# /etc/init.d/nfs startStarting NFS services: [ OK ]Starting NFS quotas: [ OK ]Starting NFS mountd: [ OK ]Starting NFS daemon: [ OK ]Starting RPC idmapd: [ OK ]
注意:要先启动rpcbind ,后启动 nfs

3.1.5 第五个里程:本地检查测试

rpcinfo -p 172.16.1.31 ---检查rpc服务中是否有注册的进程服务和对应端口号信息
showmount -e 172.16.1.31 ---检查是否有可以共享的目录
[root@nfs01 wuhuang]# rpcinfo -p 172.16.1.31 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 100000 3 udp 111 portmapper 100000 2 udp 111 portmapper 100011 1 udp 875 rquotad 100011 2 udp 875 rquotad 100011 1 tcp 875 rquotad 100011 2 tcp 875 rquotad 100005 1 udp 62058 mountd 100005 1 tcp 53154 mountd 100005 2 udp 22521 mountd 100005 2 tcp 30878 mountd 100005 3 udp 56674 mountd 100005 3 tcp 12281 mountd 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs 100003 4 tcp 2049 nfs 100227 2 tcp 2049 nfs_acl 100227 3 tcp 2049 nfs_acl 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 4 udp 2049 nfs 100227 2 udp 2049 nfs_acl 100227 3 udp 2049 nfs_acl 100021 1 udp 9976 nlockmgr 100021 3 udp 9976 nlockmgr 100021 4 udp 9976 nlockmgr 100021 1 tcp 24261 nlockmgr 100021 3 tcp 24261 nlockmgr100021 4 tcp 24261 nlockmgr[root@nfs01 wuhuang]# showmount -e 172.16.1.31Export list for 172.16.1.31:/data 172.16.1.0/24
3.2 NFS客户端部署流程

3.2.1 第一个里程碑:确认是否安装nfs服务相关软件

rpm -qa|grep -E "nfs-utils|rpcbind"
yum install nfs-utils rpcbind -y
[root@backup ~]# rpm -qa|grep -E "nfs-utils|rpcbind"nfs-utils-lib-1.1.5-13.el6.x86_64rpcbind-0.2.0-13.el6_9.1.x86_64nfs-utils-1.2.3-75.el6_9.x86_64
3.2.2 第二个里程碑:检查局域网中是否存在共享存储服务(目录)
rpcinfo -p 172.16.1.31 ---rpcinfo命令需要安装rpcbind软件才能拥有
showmount -e 172.16.1.31
[root@backup ~]# rpm -qf `which rpcinfo`rpcbind-0.2.0-13.el6_9.1.x86_64[root@backup ~]# rpm -qf `which showmount`nfs-utils-1.2.3-75.el6_9.x86_64[root@backup ~]# showmount -e 172.16.1.31Export list for 172.16.1.31:/data 172.16.1.0/24
3.2.3 第三个里程碑:实现共享目录应用(网络挂载应用)
当客户端没有安装nfs相关软件
挂载失败:没有安装nfs相关软件
[root@wuhuang ~]# mount -t nfs 172.16.1.31:/data/ /mnt/mount: wrong fs type, bad option, bad superblock on 172.16.1.31:/data/, missing codepage or helper program, or other error (for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helper program) In some cases useful info is found in syslog - try dmesg | tail or so
当客户端安装nfs相关软件
挂载成功:安装好nfs先关软件
[root@backup ~]# mount -t nfs 172.16.1.31:/data/ /mnt/[root@backup ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda3 20G 1.5G 17G 9% /tmpfs 238M 0 238M 0% /dev/shm/dev/sda1 190M 40M 141M 22% /boot172.16.1.31:/data/ 20G 1.5G 17G 9% /mnt
第4章 NFS服务常见进程详解
[root@nfs01 ~]# ps -ef |egrep "rpc|nfs"
rpc 1833 1 0 10:41 ? 00:00:00 rpcbind
root 1869 2 0 10:41 ? 00:00:00 [rpciod/0]
root 1878 1 0 10:41 ? 00:00:00 rpc.rquotad < -磁盘配额进程(remote quote server)
root 1883 1 0 10:41 ? 00:00:00 rpc.mountd < - 权限管理验证等(NFS mount daemon)
root 1890 2 0 10:41 ? 00:00:00 [nfsd4]
root 1891 2 0 10:41 ? 00:00:00 [nfsd4_callbacks]
root 1892 2 0 10:41 ? 00:00:00 [nfsd] < - NFS主进程
root 1893 2 0 10:41 ? 00:00:00 [nfsd] < - NFS主进程,管理登录,
ID身份判别
root 1894 2 0 10:41 ? 00:00:00 [nfsd]
root 1895 2 0 10:41 ? 00:00:00 [nfsd]
root 1896 2 0 10:41 ? 00:00:00 [nfsd]
root 1897 2 0 10:41 ? 00:00:00 [nfsd]
root 1898 2 0 10:41 ? 00:00:00 [nfsd] < - NFS主进程
root 1899 2 0 10:41 ? 00:00:00 [nfsd]
root 1930 1 0 10:41 ? 00:00:00 rpc.idmapd < - name mapping daemon 用户压缩/用户映射(记录)
root 2509 1231 0 17:42 pts/0 00:00:00 egrep rpc|nfs
服务或进程名用途说明
nfsd(rpc.nfsd)rpc.nfsd的主要功能是管理NFS客户端是否能够登入NFS服务器端主机,其中还包括登入者的ID判别等
mountd (rpc mountd)rpc.monutd的主要功能则是管理NFS文件系统,当NFS客户端顺利通过rpc.nfsd登入NFS服务器端主机时,在使用NFS服务器提供数据之前,它会读NFS的配置文件/etc/esports来对比NFS客户端的权限,通过这一关之后,还要经过NFS服务器端本地文件系统使用权限(就是owner、group、other权限)等认证程序。如果都通过了,NFS客户端就可以取得使用NFS服务器端文件的权限。注意:这个/etc/exports文件也是我们用来管理NFS共享目录的使用权限与安全设置的地方,特别强调,NFS本身设置的是网络共享权限,整个共享目录的权限还和目录自身的系统权限有关

rpc.lockd (非必要)用来锁定文件,用于多客户端同时写入
rpc.statd(非必要)检查文件的一致性,与rpc.lockd有关。c 、d 两个服务需要客户端,服务器端同时开启才可以;rpc.statd监听来自其他主机重启的通知,并且管理当本地系统重启时主机列表
rpc.idmapd名字映射后台进程
重点掌握:
rpc.statd主要作用:检查数据存储的一致性
rpc.rquotad主要作用:控制磁盘配额
rpc.mountd主要作用:核对/etc/exports配置文件中的权限,和NFS服务器端本地文件系统权限
rpc.idpamd主要作用:实现用户压缩/映射(经用户压缩后,身份转换为nfsnobody)

第5章 NFS服务配置文件格式信息说明

/etc/exports文件配置格式为:
NFS共享目录 NFS客户端地址1(参数1,参数2,...) 客户端地址2(参数1,参数2,...)

NFS 共享目录 NFS客户端地址(参数1,参数2,...)
查看exports语法文件格式帮助的方法为:
执行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)

5.1 NFS共享目录:

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

5.2 NFS客户端地址

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



5.3 权限参数集

对授权的NFS客户端的访问权限设置。
nfs权限(共享目录) nfs配置的/etc/exports /data 172.16.1.0/24(rw)
本地文件系统权限, 挂载目录的权限rwxr-xr-x root root /data

5.3.1 重要配置文件参数说明——权限相关

参数名称参数用途
rw < -重点掌握
read-write,表示可读可写模式---设置共享目录读写模式
ro
read-only,表示只读权限---设置共享目录只读模式
sync < -重点掌握
请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回。
优点:数据安全不会丢;缺点:性能比不启动该参数要差
---采用同步方式存储数据,存储数据到硬盘中
async < -重点掌握
写入时数据会先写到内存缓冲区,直到硬盘有空挡才会写人磁盘,这样可以提升写入效率!风险为若服务器宕机或不正常关机,会损失缓冲区中未写入磁盘的数据(解决办法:服务器主板电池或加UPS,AB(双路电源)不间断电源)!
停电---ups---发电机
---采用异步方式存储数据,存储数据到内存中
no_root_squash
保持root用户不进行压缩
访问NFS Server共享目录的用户如果是root的话,它对该共享目录具有root权限,这个配置原本是为无盘客户端准备的,用户应避免使用。
root_squash
如果访问NFS Server共享目录的用户是root,则它的权限将被压缩成匿名用户,同时,它的UID和GID通常会变为nfsnobody账号身份
all_squash < -重点掌握
不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩成匿名用户,同时它的UID和GID都会变成nfsnobody账号身份。在早期多个NFS客户端同时读写NFS Server数据时,这个参数很有用
在生产中配置NFS的重要技巧
1. 确保所有客户端服务器对NFS共享目录具备相同的用户访问权限。
a. all_squash把所有客户端都压缩成固定的匿名用户(UID相同)b. 就是anonuid,anongid指定的UID和GID的用户2. 所有的客户端和服务器端都需要有一个相同的UID和GID的用户,即nfsnobody(UID必须相同)


总结:
1. rw参数:可读写
2. ro参数:只读
/data 172.16.1.0(ro,sync,all_squash) :ro权限给开发人员用于读取配置文件,而不能修改
3. sync参数的作用:同步,保证数据的可靠性
4. async参数:ups AB双路电源

5.3.2 用户压缩映射相关参数

1. no_all_squash参数:所有用户都不映射(什么身份过来就是什么身份)
2. all_squash参数:所有用户都映射(成指定nfsnobody)3. root_squash参数:root用户映射(成指定nfsnobody)4. no _root_squash参数:不对root用户映射(进来NFS服务器后是root身份,权限 很大)



注意:
/etc/init.d/nfs reload ---平滑重启(只是重新加载了配置文件,已有的连接不会断开)
/etc/init.d/nfs restart ---重启(重新将服务关闭再开启,已有的连接会断开)

5.4 企业生产环境常见NFS案例









5.5 企业实战需求

1. /data/共享目录权限固定为www用户管理
2. 在nfs配置文件中,设置all_squash全部用户都映射参数
3. 让nfs客户端可以向共享目录存储数据

5.5.1 第一个里程:设置/data/权限信息

chown -R www.www /data/
[root@nfs01 ~]# chown -R www.www /data/[root@nfs01 ~]# ll -d /data/drwxr-xr-x 2 www www 4096 Jan 25 21:04 /data/
5.5.2 第二个里程:编写nfs配置文件
1. 查看www用户的UID,GID信息
id www
[root@nfs01 ~]# useradd -s /sbin/nologin -M www -u 502[root@nfs01 ~]# id wwwuid=502(www) gid=502(www) groups=502(www)
2. 编辑配置文件:vim /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=502,anongid=502)
3. 平滑重启:
/etc/init.d/nfs reload
anonuid和anongid参数作用说明:
将客户端所有用户,映射为指定用户,而不再是默认nfsnobody用户了
ps:两点注意
01. 客户端要有nfs配置文件anonuid或者anongid指定用户,此处是www
02. 客户端和服务端创建默认映射用户,uid和gid信息需要保持一致,即客户端的www用户的UID和
GID也要是502

5.5.3 第三个里程:重新挂载共享目录

(1) 先卸载 umount /mnt(2) 再挂载 mount -t nfs 172.16.1.31:/data /mnt
[root@backup ~]# mount -t nfs 172.16.1.31:/data /mnt[root@backup ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/sda3 20G 1.5G 17G 9% /tmpfs 238M 0 238M 0% /dev/shm/dev/sda1 190M 40M 141M 22% /boot172.16.1.31:/data 20G 1.5G 17G 9% /mnt
5.5.4 第四个里程:进行数据存储测试 创建测试文件查看属主信息是否为www
[root@backup mnt]# touch /mnt/wuhuang.txt[root@backup mnt]# ll /mnt/wuhuang.txt-rw-r--r-- 1 www www 0 Jan 25 21:04 /mnt/wuhuang.txt服务端[root@nfs01 ~]# ll /data/wuhuang.txt-rw-r--r-- 1 www www 0 Jan 25 21:04 /data/wuhuang.txt
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  NFS 存储服务 共享