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。

1.2 NFS历史介绍

第一个网络文件系统被称为File Access Listener,由DEC在1976年开发。
NFS是第一个构建在IP协议之上的现代网络文件系统,在20世纪80年代,首先作为实验文件系统,由Sun Microsystems在内部开发完成,NFS协议归属与RFC标准,在随后演化为NFSv2,作为一个标准,由于NFS与其他客户端和服务器的互操作能力很好而发展迅速。

1.3 NFS企业在企业中的应用场景

在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、附件等静态资源文件,通常网站用户上传的文件都会放到NFS共享中,例如BBS产品的图片、附件、头像(网站BBS的程序不要放在NFS共享中),然后前端所有节点在访问这些静态资源时都会读取NFS存储上的资源。
NFS是当前互联网系统架构中最常用的数据存储服务之一,特别是中小型网站应用频率更高。

1.5 NFS工作流程图

在这里插入图片描述
在这里插入图片描述

1.6 NFS原理图

在这里插入图片描述

注意:NFS的rpc服务,在Centos5系列下名称为portmap,在Centos6/7系列下名称为rpcbind

第2章 NFS服务的搭建

操作系统 服务器角色 IP地址
CentOS 7 NFS服务端(nfs-server) 内网:192.168.128.20
CentOS 7 NFS客户端(nfs-client) 内网:192.168.128.30

2.1 部署服务器前的准备

2.2 NFS服务端的配置

2.2.1 检查操作系统的环境

[root@nfs01 ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708

2.2.2 关闭防火墙及SELINUX

systemctl stop firewalld
systemctl disable firewalld 

2.2.3 关闭:SELINUX

vi /etc/selinux/config
修改SELINUX=disabled

3 下载软件包(配置完yun前提下)

3.1 检查是否安装服务包

rpm -qa nfs-utils rpcbind 

3.2 下载软件包

yum install nfs-utils rpcbind -y 
#注意:在安装完该软件包后会自动创建nfsnobody用户
[root@nfs01 ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)

3.3启动rpc服务

systemctl start rpcbind 
systemctl enable rpcbind 
systemctl status rpcbind

3.4查看rpc的端口:

[root@nfs01 ~]# netstat -tnulp|grep rpc 端口为111
tcp     0     0 0.0.0.0:111         0.0.0.0:*               LISTEN      703/rpcbind         
tcp6    0      0 :::111            :::*                    LISTEN      703/rpcbind         
udp     0      0 0.0.0.0:111       0.0.0.0:*                          703/rpcbind         
udp6   0      0 :::111                 :::*                                703/rpcbind 

3.5查看端口映射情况:

[root@nfs01 ~]# rpcinfo -p localhost
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper

3.6 启动nfs服务

systemctl start nfs
systemctl enable nfs
systemctl status nfs

3.7 查看端口映射情况:

root@nfs01 ~]# rpcinfo -p localhost
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 28839 mountd
100005 1 tcp 34541 mountd

注意

注意:此时有了端口映射
【特别注意】必须先启动rpcbind服务之后,才能启动nfs服务
原因:nfs可以视为一个rpc程序,在启动任何一个rpc程序之前,需要做好端口和功能的映射工作,这个映射工作就是由rpcbind服务来完成的,因此在提供nfs服务之前,必须要先启动rpcbind服务

4 .检查nfs和rpc进程

4.1 nfs

[root@nfs01 ~]# ps -ef |grep nfs
root 2900 2 0 19:05 ? 00:00:00 [nfsiod]
root 3133 2 0 19:40 ? 00:00:00 [nfsd4]
root 3134 2 0 19:40 ? 00:00:00 [nfsd4_callbacks]
root 3135 2 0 19:40 ? 00:00:00 [nfsd]
root 3136 2 0 19:40 ? 00:00:00 [nfsd]
root 3137 2 0 19:40 ? 00:00:00 [nfsd]
root 3138 2 0 19:40 ? 00:00:00 [nfsd]
root 3139 2 0 19:40 ? 00:00:00 [nfsd]
root 3140 2 0 19:40 ? 00:00:00 [nfsd]
root 3141 2 0 19:40 ? 00:00:00 [nfsd]
root 3142 2 0 19:40 ? 00:00:00 [nfsd]
root 3221 2130 0 19:41 pts/0 00:00:00 grep nfs

4.2 rpc

[root@nfs01 ~]# ps -ef |grep nfs
root 2900 2 0 19:05 ? 00:00:00 [nfsiod]
root 3133 2 0 19:40 ? 00:00:00 [nfsd4]
root 3134 2 0 19:40 ? 00:00:00 [nfsd4_callbacks]
root 3135 2 0 19:40 ? 00:00:00 [nfsd]
root 3136 2 0 19:40 ? 00:00:00 [nfsd]
root 3137 2 0 19:40 ? 00:00:00 [nfsd]
root 3138 2 0 19:40 ? 00:00:00 [nfsd]
root 3139 2 0 19:40 ? 00:00:00 [nfsd]
root 3140 2 0 19:40 ? 00:00:00 [nfsd]
root 3141 2 0 19:40 ? 00:00:00 [nfsd]
root 3142 2 0 19:40 ? 00:00:00 [nfsd]
root 3221 2130 0 19:41 pts/0 00:00:00 grep nfs

4.3 编辑配置文件

vim /etc/exports
#添加一下内容
/data 192.168.128.0/24(rw,sync,no_root_squash,no_all_squash)

4.4使配置生效

exportfs -r 

5. 配置文件详细

5.1 nfs配置文件的格式

1: NFS共享的目录 NFS客户端地址(参1,参2,……) NFS客户端地址2(参1,参2,……)
2: NFS共享的目录 NFS客户端地址(参1,参2,……)

5.2 上述各列参数的含义:
NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径如(/data)。注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被NFS客户端的用户(nfsnobody)读写。/etc/exports配置文件格式书写详细如下表
常用格式说明

实例:

配置案例1	/data 172.16.1.0/24(rw,sync) 允许客户端读写,并且数据同步写到服务器的磁盘里
配置案例2	/data 172.16.1.0/24(rw,sync,all_squash,anonuid=888,anongid=888) 允许客户端读写,并且数据同步写到服务器的磁盘里,并且指定客户端的uid和gid,早期生产环境中的一种配置,适合多客户端共享一个NFS单目录,如果所有服务器的nfsnodoby账户的UID相同,则本案例就没什么意义了
配置案例3	/data 172.16.1.0/24(ro) 只读共享,用途:例如在生产环境中开发人员有查看服务器日志的需求,但是又不希望给开发服务器的权限,那么就可以给开发提供从某个测试服务器NFS客户端上查看某个生产服务器日志目录(NFS共享目录)的权限,但是,这不是唯一的方法喲

5.3 NFS 客户端地址:为NFS服务端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段的地址,还可以用”*”来匹配所有的客户端服务器.

授权整个网段可访问 NFS	172.0.0.*	指定网段的另外写法(不推荐使用)
授权某个域名客户端访问	nfs.lzhnb.com	生产环境中一般不使用
授权整个域名客户端访问	*.lzhnb.com	生产环境中一般不使用

5.4 NFS配置参数权限,具体如下表

参数名称	参数用途
rw(熟记)	表示可读写权限
sync(熟记)	请求或写入数据时,数据同步写入到NFS Server的硬盘后才返回,优点:数据安全不会丢,缺点:性能比不启用该参数要差
async(熟记)	写入数据时会先写到内存缓冲区,直到硬盘有空档才会在写入磁盘,这样可以提升写入效率。风险是若服务器宕机或不正常关机,会损失缓冲区中未写入硬盘的数据(解决办法:服务器主板电池或UPS不间断电源)
all_squash(熟记)	不管访问NFS Server共享目录的用户身份如何,它的权限都将被压缩为匿名用户,同时它的UID和GID都会变成nfsnobody账号身份,在早期多个NFS客户端同时读写NFS Server数据时,这个参数很有用,在生产环境中配置NFS的重要技巧:1)确保所有客户端服务器对NFS共享目录具备相同的用户访问权限,all_squash把所有客户端都压缩成匿名用户(UID相同),就是anonuid,anongid指定的UID和GID相同,2)所有的客户端和服务器端都需要有一个相同的UID和GID的用户,nfsnodoby(UID必须相同)
anonuid(熟记)	参数以anon*开头即值anonymous匿名用户,这个用户的UID设置值通常为nfsnobody的UID值,当然我们也可以自行设置这个UID值。但是,UID必须存在于/etc/passwd中。在多个NFS Clients时,如多台web server共享一个NFS目录时,通过这个参数可以使得不同的NFS Clients写入的数据对所有NFS Clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用。一般默认就好
anongid(熟记)	同anonuid,区别是把uid(用户id)换成gid(组id)
ro	表示只读权限

6 . 创建共享盘

6.1 创建共享目录

[root@nfs01 ~]# mkdir /data -p
[root@nfs01 ~]#  ll -d /data/
 drwxr-xr-x. 2 root root 4096 Nov 19 10:45 /data/

7. 更改共享目录的权限

7.1 修改挂载点权限

chmod -R 755 /data

7.2 递归修改用户与组

chown -R nfsnobody:nfsnobody /data
# ll -d /data
drwxr-xr-x 2 nfsnobody nfsnobody 4096 Mar 12 19:27 /data

7.3 重新加载NFS服务

[root@nfs01 ~]# /etc/init.d/nfs reload
【注意】
/etc/init.d/nfs reload<==>fexportfs -rv
修改完/etc/exports配置后,需要重新加载NFS服务
用yum/rpm包安装的软件,用service和/etc/init.d/服务名启动是一样的

7.4 利用showmount来进行检查

[root@nfs01 ~]# showmount -e 192.168.128.20
Export list for 192.168.128.20:
/data 192.168.128.0/24

8. 客户端

8.1 配置完yum 关防火墙SELINUX

yum install nfs-utils rpcbind -y  #安装服务

8.2 客户端挂载

mount -t nfs 192.168.128.20:/data  /mnt  

查看是否挂载完成

[root@localhost ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 899M     0  899M    0% /dev
tmpfs                    910M     0  910M    0% /dev/shm
tmpfs                    910M  9.6M  901M    2% /run
tmpfs                    910M     0  910M    0% /sys/fs/cgroup
/dev/mapper/centos-root   47G  1.6G   46G    4% /
/dev/sda1               1014M  183M  822M   19% /boot
tmpfs                    182M     0  182M    0% /run
192.168.128.20/data      20G   40M   20G    1% /mnt
/dev/sr0                 4.4G  4.4G     0  100% /mnt

9.创建共享目录配置 /etc/exports 共享文件 参数


  mkdir /sharedata

 配置内容              /sharedata/      * (rw,sync,no_hide,no_all_squash)

各部分说明 :           共享目录            被允许的客户端IP(* 表示任意IP都可以)

IP后括号里的设置表示对该共享文件的权限

ro                      只读访问

rw                      读写访问

sync                    所有数据在请求时写入共享

hide                    在NFS共享目录中不共享其子目录

no_hide                 共享NFS目录的子目录

all_squash              共享文件的UID和GID映射匿名用户anonymous,适合公用目录。

no_all_squash           保留共享文件的UID和GID(默认)

root_squash             root用户的所有请求映射成如anonymous用户一样的权限(默认)

no_root_squash           root用户具有根目录的完全管理访问权限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值