网络共享存储NFS的基本原理、安装与配置
作者:互联网
网络文件系统NFS(1)-基本原理
Cloud研习社 Cloud研习社 2022-09-08 07:31 发表于山东 收录于合集 #一站式教程134个 #linux72个 #存储系统10个 #计算机44个教程每周二、四、六更新
基本原理
-
什么是NFS?全称 network file system 网络文件系统,它是通过网络存储和组织文件的一种方法或机制。
-
存储的种类三种存储方式:DAS(Direct Attach STorage)、SAN(Storage Area Network)、NAS(Network Attach Storage)三种存储类型:块存储、文件存储、对象存储
DAS和SAN都是块存储类型:
- DAS(Direct Attach STorage):是直接连接于主机服务器的一种储存方式,每一台主机服务器有独立的储存设备,每台主机服务器的储存设备无法互通,需要跨主机存取资料时,一般需要一定的配置。通常用在单一网络环境下且数据交换量不大,性能要求不高的环境下。
- SAN(Storage Area Network):是一种用高速(光纤)网络联接专业主机的一种存储方式,此系统会位于应用服务器的后端,使用高速I/O 连接, 如 SCSI、 Fibre- Channels。一般而言,SAN应用在对网络速度要求高、对数据的可靠性和安全性要求高、对数据共享的性能要求高的应用环境中,特点是代价高,性能好。但是由于SAN系统的价格较高,且可扩展性较差,已不能满足成千上万个CPU规模的系统。
文件存储
NAS产品一般就是文件存储。
NAS(Network Attached Storage),是一套网络存储设备,通常是直接连在网络上并提供数据存取服务,一套 NAS 储存设备就如同一个提供数据文件服务的系统,特点是性价比高。它采用NFS或CIFS命令集访问数据,以文件为传输协议,通过TCP/IP实现网络化存储,可扩展性好。如目前在集群计算中应用较多的NFS文件系统,但由于NAS的协议开销高、带宽低、延迟大,不利于在高性能集群中应用。
对象存储
对象存储最常用的方案,就是多台服务器内置大容量硬盘,再装上对象存储软件,然后再额外搞几台服务器作为管理节点,安装上对象存储管理软件。管理节点可以管理其他服务器对外提供读写访问功能。
之所以出现对象存储这种东西,是为了克服块存储与文件存储各自的缺点,发扬各自的优点。简单来说块存储读写快,不利于共享,文件存储读写慢,利于共享。能否弄一个读写块,利于共享的存储出来呢?于是就有了对象存储。具体内容到后面讲到ceph的时候我们再进一步了解。
-
NFS工作原理NFS(Network File System)网络文件系统NFS功能,需要很多服务。每个服务都有端口,而且经常变化。如何让客户端找到这些端口呢?就需要一个经纪人(rpc服务)
NFS服务包含的内容:
1、NFS服务(有很多进程和端口),把自己的端口告诉RPC。
2、RPC服务(对外固定端口111)
NFS工作流程见下图:
步骤详解:
第一步:启动RPC服务,这是NFS依赖的服务,必须先启动。
第二步:启动NFS服务。启动后会告诉RPC服务自己有哪些端口号可用。
第三步:客户端发起NFS服务请求。由于NFS服务的端口号不确定,所以NFS客户端需要先请求RPC服务(固定端口号111),RPC服务收到请求以后,会查询可用的端口号。
第四步:RPC查询到可用端口以后,会返回客户端一个可用的端口号。
第五步:客户端拿到端口号以后,就拿着这个端口号去请求NFS服务,实现数据读写。
我们再来看一个图,更进一步了解一下NFS工作流程(portmap是centos5以前的概念,现在是rpcbind):
优缺点说明
优点
-
节省本地存储空间将常用的数据存放在一台服务器可以通过网络访问
-
简单容易上手
-
方便部署非常快速,维护十分简单
缺点
-
局限性容易发生单点故障,及server机宕机了所有客户端都不能访问
-
在高并发下NFS效率/性能有限
-
客户端没用用户认证机制,且数据是通过明文传送,安全性一般(一般建议在局域网内使用)
-
NFS的数据是明文的,对数据完整性不做验证
-
多台机器挂载NFS服务器时,连接管理维护麻烦(耦合度高)
至此为止,我们了解了NFS的工作流程,下一期我们开始实践。
推荐阅读
《一站式教程之集群架构》:
一文彻底搞懂IP地址知识(值得收藏的手册)
老司机:子网掩码我不怕,怕的是子网划分!
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
Cloud研习社 为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等 151篇原创内容 公众号NFS全面讲解(2)- 安装与配置
Cloud研习社 Cloud研习社 2022-09-10 10:31 发表于山东 收录于合集 #一站式教程134个 #linux72个 #存储系统10个 #计算机44个 #云计算48个教程每周二、四、六更新
规划环境
安装配置nfs server
[root@nfs ~]# yum -y install nfs-utils rpcbind
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync)
#创建共享目录
[root@nfs ~]# mkdir /data
[root@nfs ~]# chown -R nfsnobody:nfsnobody /data
#启动服务
[root@nfs ~]# systemctl start rpcbind
[root@nfs ~]# systemctl start nfs
# 配置开机自启动
[root@nfs ~]# systemctl enable rpcbind
[root@nfs ~]# systemctl enable nfs
# 列出所有在本机用rpcbind注册的RPC程序。
[root@nfs ~]# 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
100024 1 udp 40663 status
100024 1 tcp 53187 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 33584 nlockmgr
100021 3 udp 33584 nlockmgr
100021 4 udp 33584 nlockmgr
100021 1 tcp 42688 nlockmgr
100021 3 tcp 42688 nlockmgr
100021 4 tcp 42688 nlockmgr
# 确认服务启动成功且可用
[root@nfs ~]# showmount -e localhost
Export list for localhost:
/data 172.16.1.0/24
/etc/exports讲解
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync)
解析:
第一个字段:/data,这里是待共享的目录,用来存放共享数据。将来客户端对数据的读写都是从这个目录里获取的。
第二个字段:可以访问的主机的网段。这里是允许172.16.1.0/24网段的主机访问
第三个字段:(注意:和网段之间不能有空格,网段之后直接写小括号)。这里是权限配置字段,详细情况见配置参数、挂载参数详解部分。
上面配置文件的含义:把服务器上的/data目录作为共享目录,为客户端提供数据存储和读写的内容。可以访问本目录的客户端包括172.16.1.0/24网段的所有客户端,客户端对该目录有读写的权限(rw),并且客户端写入数据的时候是同步把数据写到硬盘上,而不是仅仅写到缓冲区中。
推荐阅读
《一站式教程之集群架构》:
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
Cloud研习社 为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等 151篇原创内容 公众号 收录于合集 #一站式教程 134个NFS全面讲解(3)- 配置客户端、配置参数
Cloud研习社 Cloud研习社 2022-09-13 07:31 发表于山东 收录于合集 #一站式教程134个 #linux72个 #存储系统10个 #学习资料3个 #云计算48个教程每周二、四、六更新
配置客户端
[root@backup backup]# yum -y install nfs-utils rpcbind
[root@backup backup]# showmount -e 172.16.1.21 # 显示nfs上可共享的所有目录
Export list for 172.16.1.21:
/data 172.16.1.0/24
查看效果
我们先在本地挂载nfs:
# 把NFS挂载到本地/mnt下
[root@backup backup]# mount -t nfs 172.16.1.21:/data /mnt
查看远端的文件:
# 在服务端创建一个文件并写入内容
[root@nfs data]# echo abc > nfs_file1
# 在客户端查看刚才创建的文件
[root@backup ~]# cat /mnt/nfs_file1
abc # 这不正是我们刚写入的文件内容吗
服务进程说明
/etc/exports配置参数讲解
参数 | 说明 |
rw、ro(重点) | rw,Read-Write,表示可读、可写权限。ro,Read-Only,表示只读权限 |
sync(重点) | 有I/O操作时,都会同步处理I/O,即把数据同步写入磁盘,这种情况会牺牲一点I/O性能,但是,换来的是掉电后数据的安全性 |
async(重点) | 和sync相反,I/O的操作都是异步处理,写入数据会先写入缓冲区,即不会同步写到磁盘,此参数会提高性能,但会降低数据的安全性,一般情况下,生产环境下不推荐使用,除非对性能要求很高。(解决办法:服务器主板电池或配置UPS) |
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必须相同)。 |
no_all_squash(默认) | 访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组 |
anonuid(重点) | 参数以anon*开头即指anonymous匿名用户,这个用户的UID设置值通常为nfsnobody的UID值,当然也可以自行设置这个UID值。但是,UID必须存在于/etc/passwd 中。在多NFS Clients时,如多台Web Server共享一个NFS目录,通过这个参数可以使得不同的NFS Clients写入的数据对所有NFS Clients保持同样的用户权限,即为配置的匿名UID对应用户权限,这个参数很有用,一般默认即可。 |
no_root_squash | 访问NFS Server共享目录的用户如果是root的话,它对该共享目录具有root权限。这个配置原本是为无盘客户端准备的。用户应避免使用。 |
root_squash | 如果访问NFS Server共享目录的用户时root,则它的权限将被压缩成匿名用户,同时它的UID和GID通常会变成nfsnobody账号身份。 |
推荐阅读
《一站式教程之集群架构》:
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
Cloud研习社 为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等 151篇原创内容 公众号NFS全面讲解(4)
Cloud研习社 Cloud研习社 2022-09-15 07:53 发表于山东 收录于合集 #一站式教程134个 #linux72个 #存储系统10个 #云计算48个教程每周二、四、六更新
anonuid\anongid详解
配置文件中指定映射的用户id(默认是nfsnobody),即修改默认用户为用户指定的用户。
比如:指定NFS共享的匿名用户为www。
[root@nfs ~]# useradd www -u 6666
[root@nfs ~]# vim /etc/exports
/data 172.16.1.0/24(rw,sync,anonuid=6666,anongid=6666,all_squash)
[root@nfs ~]# systemctl reload nfs
[root@nfs /]# chown -R www:www /data/
NFS的默认配置:
[root@nfs ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=6666,anongid=6666,sec=sys,rw,secure,root_squash,no_all_squash)
创建临时共享目录
创建临时共享目录就是在不修改nfs配置文件的情况下,新增加一个共享目录供客户端使用。
[root@nfs ~]# mkdir tmp
[root@nfs ~]# exportfs -o rw,sync 172.16.1.0/24:/root/tmp
# 客户端看一下
[root@backup ~]# showmount -e 172.16.1.21
Export list for 172.16.1.21:
/root/tmp 172.16.1.0/24
/data 172.16.1.0/24
下面我们来在客户端挂载这个临时目录:
[root@backup ~]# mount -t nfs 172.16.1.21:/root/tmp /tmp
[root@backup ~]# ls /tmp
ls: cannot open directory /tmp: Permission denied
我们发现上面报错了,提示没有权限。回想一下:我们创建tmp目录的时候是在root的家目录下,创建完成后,其所属的用户和用户组是root,nfs只有nfsnobody的权限,所以我们需要修改一下权限:
# 在服务端修改一下所属组
[root@nfs ~]# chown -R nfsnobody:nfsnobody /root/tmp
# 客户端验证一下是否可以访问了
[root@backup ~]# ls /tmp
课后项目实践:
- 在web01客户端实现挂载NFS
- 给NFS新建共享目录/data_log,允许web01和backup客户端对/data_log可读写
- web01客户端上传图片,backup客户端可以删除web01上传的图片
- NFS下面共享/data2,允许web01客户端访问
推荐阅读
《一站式教程之集群架构》:
看完本文有收获?请分享给更多人
推荐关注「Cloud研习社」,带你从零开始掌握云计算技术!
Cloud研习社 为Linux云计算零基础同学服务,致力于打造一套完整的linux云计算教程。包括新手学习路线、linux、存储、集群架构以及Docker,K8S,DevOps等 151篇原创内容 公众号 收录于合集 #一站式教程 134个 上一篇NFS全面讲解(3)- 配置客户端、配置参数 阅读 68标签:rsync,服务,基本原理,nfs,NFS,网络共享,root,客户端 来源: https://www.cnblogs.com/cherishthepresent/p/16699204.html