11、NFS服务器

RHCE板块

欢迎来到我的博客,这里是Linux板块,配合之前RHCSA进阶,希望我的博客可以帮助到您,感谢您的阅读,有什么问题还希望一起探讨交流,感谢各位的支持,感谢!

  1. 使用Linux搭建一个简单的论坛
  2. RHCE——一、安装部署及例行性工作
  3. RHCE——二、时间服务器
  4. RHCE——三、远程连接服务器
  5. RHCE——四、Web服务器(理论篇
  6. RHCE——五、Web服务器及内网穿透(实验篇
  7. RHCE——六、基于https协议的静态网站
  8. RHCE——七、搭建云存储器
  9. RHCE——八、DNS域名解析服务器
  10. RHCE——九、SELinux
  11. RHCE——十、防火墙、iptables、firewalld
  12. RHCE——十一、NFS服务器
  13. RHCE——十二、Mysql服务
  14. RHCE——十三、Shell自动化运维编程基础
  15. RHCE——十四、变量和引用
  16. RHCE——十五、shell条件测试
  17. RHCE——十六、流程控制之条件判断、循环
  18. RHCE——十七、文本搜索工具-grep、正则表达式
  19. RHCE——十八、shell编程之sed
  20. RHCE——十九、shell编程之awk
  21. RHCE——二十、Ansible及安装与配置
  22. RHCE——二十一、Ansible模块

一、简介

1、NFS背景介绍

  • NFS是一种古老的用于在UNIX/Linux主机之间进行文件共享的协议。它古老到你必须穿着白大褂才能接近一台计算机的年代。在那个年代,所有的联网计算机都被认为是可信的,而不像现今这样,任何人都有多种多样方法能连接到你的计算机。因此,NFS在开发的时候专注于快速及易用的文件共享,而忽视了其安全性设计
  • NFS(Network File System,网络文件系统)是FreeBSD支持的文件系统中的一种,它允许网络中的计算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源,主要在unix系列操作系统上使用。
  • NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中看来,那个远程主机的目录就好像是自己的一个磁盘分区一样。
  • 由于NFS支持的功能比较多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此NFS的功能所对应的端口并不固定,而是随机取用一些未被使用的小于1024的端口用于传输。但如此一来就会产生客户端连接服务器的问题,因为客户端需要知道服务器端的相关端口才能够连接。此时就需要RPC
  • RPC(Remote Procedure Call,远程过程调用):由于服务器在启动NFS时会随机选取数个端口号,并主动向RPC注册,所以RPC知道每个NFS功能所对应的端口号,RPC将端口号通知给客户端,让客户端可以连接到正确的端口上去。RPC采用固定端口号port 111来监听客户端的需求并向客户端响应正确的端口号。
  • 注:在启动NFS之前,要先启动RPC,否则NFS会无法向RPC注册。另外,RPC若重新启动,原来注册的数据会消失不见,因此RPC重启后,它管理的所有服务都需要重新启动以重新向RPC注册。

2、生产应用场景

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

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

  • NFS是当前互联网系统架构中常用的数据存储服务之一,中小型网站(2000万pv(页面浏览量)以下)公示应用频率居高,大公司或门户除了使用NFS外,还可能会使用更为复杂的分布式文件系统

二、NFS工作原理

1、示例图

2、流程

  • 首先服务器端启动RPC服务,并开启111端口
  • 服务器端启动NFS服务,并向RPC注册端口信息
  • 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
  • 服务端的RPC(portmap)服务反馈NFS端口信息给客户端。(服务器搭建成功后可以使用下列命令查看,一般都是2049)

三、NFS的使用

1、安装

[root@server ~]# yum  install  nfs-utils   -y   #安装nfs
[root@server ~]# yum  install  rpcbind  -y # 默认已安装

在这里插入图片描述

2、配置文件

  • 主配置文件:/etc/exports , 文件不一定存在
  • /usr/sbin/exportfs : 该文件是维护NFS共享目录资源的命令文件,可以使用命令重新共享/etc/exports的目录资源、卸载共享目录
  • 日志目录:/var/lib/nfs
  • 权限设置文件:/var/lib/nfs/etab

3、主配置文件分析

  • /etc/exports 文件默认为空文件,需要输入nfs共享命令
  • 格式:共享目录的路径 允许访问的NFS客户端(共享权限参数)
  • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
  • 分析
    • 允许访问的NFS客户端:可以写完整的IP地址或IP网段,如:
      • 192.168.48.130/24
      • 192.168.48.130/255.255.255.0
      • 192.168.48.0/24
      • *: 允许所有主机都可以访问
      • 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
    • 权限参数:必须写在圆括号中,且括号是紧挨着主机名的,全选的相关参数如下,多个参数之间使用逗号隔开:
权限参数作用
ro只读
rw读写(最终还要看文件系统rwx权限)
root_squash当NFS客户端以root账户访问时,映射为NFS服务器端的匿名账户(nobody)(以普通账户访问时,映射为普通账户)
no_root_squash当NFS客户端以root账户访问时,映射为root账户(不推荐、不安全)
all_squash无论NFS客户端使用什么账户访问,均映射为NFS 服务器的匿名账户(nobody),推荐
no_all_squash客户端普通账户访问服务器的数据时,实际的信息原样显示
anonuid= anongid=将文件的用户和工作组映射为指定UID和GID,若不指定则默认为65534(nobody)
sync同步,同时将数据写入内存与硬盘中,保证数据不会丢失,推荐
async异步,优先将数据保存到内存,然后在写入硬盘,效率高,但可能会数据丢失
  • exports文件内容示例
  • /home/public *(rw,sync) : 对所有主机共享/home/public目录,可读可写,同步传输
    • /home/public 192.168.48.131/24(ro,all_squash,sync) : 只对131主机开发共享/home/public ,只读权限,客户端映射为nobody账户,同步传输
    • /home/public 192.168.48.0/24(rw , sync , all_squash , anonuid=2000, anongid=2000): 对192.168.48.0网段中所有主机开放/home/public 目录,可读可写,同步传输,客户端映射为nobody,uid为2000,gid为2000

3.1 实验1

  • 建立NFS服务器,使用客户端访问
  • 第一步:服务端server操作(恢复快照),完成准备工作
root@server ~]# setenforce  0
[root@server ~]# systemctl stop  firewalld
[root@server ~]# yum  install  nfs-utils  -y   #安装nfs
  • 第二步:客户端node1操作(恢复快照),完成准备工作
root@server ~]# setenforce  0
[root@server ~]# systemctl stop  firewalld
[root@server ~]# yum  install  nfs-utils  -y  #安装nfs

在这里插入图片描述

  • 第三步:服务端server操作,新建共享目录,并设置权限
[root@server ~]# mkdir   /nfsfile
[root@server ~]# echo  "www.openlab.com" >   /nfsfile/redme
[root@server ~]# ls  /nfsfile/
redme
[root@server ~]# cat  /nfsfile/redme 
www.openlab.com
[root@server ~]# chmod  -Rf  777  /nfsfile/

在这里插入图片描述

  • 第四步:服务端server操作,修改nfs主配置文件
[root@server ~]# vim  /etc/exports
/nfsfile        192.168.13.135/24(rw,all_squash,sync)

在这里插入图片描述

  • 第五步:服务端server操作,先启动rpc服务,后启动nfs服务
[root@server ~]# systemctl start rpcbind
[root@server ~]# systemctl start nfs-server
[root@server ~]# systemctl enable rpcbind
[root@server ~]# systemctl enable nfs-server
# 注意:启动rpcbind服务时,若启动失败,可以先停止服务,在重新启动
systemctl stop rpcbind
systemctl start rpcbind
  • 第六步:客户端node1操作,通过命令查询共享数据并远程挂载使用
# 查询远程共享信息:showmount  -参数  服务器IP地址
# 参数:
	# -e:显示NFS服务器的共享列表
	# -a:显示本地挂载的文件资源列表
	# -v:显示版本号
[root@node1 ~]# showmount  -e  192.168.48.130  # 查询130的共享信息
Export list for 192.168.48.130:
/nfsfile 192.168.48.131/24

[root@node1 ~]# mkdir  /nfs1  # 新建本地挂载目录
[root@node1 ~]# mount  -t  nfs  192.168.48.130:/nfsfile  /nfs1  # 远程挂载      (-t指明用哪种文件系统)
[root@node1 ~]# cd  /nfs1/   # 通过本地目录查看远程共享数据
[root@node1 nfs1]# ls
redme
[root@node1 nfs1]# cat  redme 
www.openlab.com
  • 第七步:客户端node1操作,设置开机挂载,实现挂载永久性
[root@node1 nfs1]# vim   /etc/fstab   # 添加如下:
192.168.48.130:/nfsfile         /nfs1   nfs     defaults        0       0
# 重启后测试

原文件:
在这里插入图片描述
更改后:
在这里插入图片描述

4、NFS账户映射

4.1 实验2

  • 基于上例,将/nfsfile权限进行修改,查看客户端是够可以访问,是否可以写入数据
# 定位server端

[root@server ~]# vim  /etc/exports  # 确认是否为rw写权限
[root@server ~]# cd  /nfsfile/
[root@server nfsfile]# ll
总用量 4
-rwxrwxrwx 1 root root 16  828 09:29 redme
[root@server nfsfile]# chmod  -Rf  444  /nfsfile/   # 修改权限
[root@server nfsfile]# ll
总用量 4
-r--r--r-- 1 root root 16  828 09:29 redme

# 定位node1端
root@node1 nfs1]# cd  ~
[root@node1 ~]# cd  /nfs1
-bash: cd: /nfs1: 权限不够

# 定位server端
[root@server nfsfile]# chmod  -Rf  777  /nfsfile/  # 多执行几次,可能有延迟
[root@server nfsfile]# chmod  -Rf  777  /nfsfile/
[root@server nfsfile]# chmod  -Rf  777  /nfsfile/

# 定位node1端
[root@node1 ~]# cd  /nfs1
[root@node1 nfs1]# 

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

4.2 实验3

  • 客户端访问服务端,演示账户映射
# 定位node1端
[root@node1 nfs1]# touch  test.txt

# 定位server端
[root@server nfsfile]# ll
总用量 4
-rwxrwxrwx 1 root   root   16  828 09:29 redme
-rw-r--r-- 1 nobody nobody  0  828 10:18 test.txt  # 注意:账户及工作组
[root@server nfsfile]# vim  /etc/exports
/nfsfile        192.168.48.131/24(rw,root_squash,sync)
[root@server nfsfile]# exportfs  -arv    # 不卸载,即可让配置文件生效
exporting 192.168.48.131/24:/nfsfile

# 定位node1端
[root@node1 nfs1]# cd  /
[root@node1 /]# su  fox
[fox@node1 /]$ cd  /nfs1
[fox@node1 nfs1]$ ls
redme  test2.txt  test.txt
[fox@node1 nfs1]$ touch  test3.txt
[fox@node1 nfs1]$ ll
总用量 4
-rwxrwxrwx 1 root   root   16  828 09:29 redme
-rw-r--r-- 1 nobody nobody  0  828 10:23 test2.txt
-rw-rw-r-- 1 fox    fox     0  828 10:25 test3.txt  # 注意:账户映射名称
-rw-r--r-- 1 nobody nobody  0  828 10:18 test.txt
[fox@node1 nfs1]$ su  root
密码: 
[root@node1 nfs1]# 

# 定位server端
[root@server nfsfile]# vim  /etc/exports
/nfsfile        192.168.48.131/24(rw,all_squash,sync,anonuid=3000,anongid=3000)
[root@server nfsfile]# exportfs  -arv  # 信配置生效
exporting 192.168.48.131/24:/nfsfile

# 定位node1端
[root@node1 nfs1]# touch  test4.txt
[root@node1 nfs1]# ll
总用量 4
-rwxrwxrwx 1 root   root   16  828 09:29 redme
-rw-r--r-- 1 nobody nobody  0  828 10:23 test2.txt
-rw-rw-r-- 1 fox    fox     0  828 10:25 test3.txt
-rw-r--r-- 1   3000   3000  0  828 10:29 test4.txt  # 注意:uid和guid
-rw-r--r-- 1 nobody nobody  0  828 10:18 test.txt

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

四、autofs自动挂载服务

1、产生原因

  • 在一般NFS文件系统的使用过程中,如果客户端要使用服务端所提供的文件系统,可以在 /etc/fstab中设置开机时自动挂载,也可以在登录系统后手动利用mount来挂载。

  • 由于网络的问题,NFS服务器与客户端的连接不会一直存在,当我们挂载了NFS服务器之后,任何一方脱机都可能造成另外一方等待超时,如果在资源挂载后长期不使用,也会造成服务器硬件资源的浪费。

  • 为了解决这样的问题,就出现了下面的想法:

    • 当客户端在有使用NFS文件系统的需求时才让系统自动挂载。

    • 当NFS文件系统使用完毕后(autofs默认自动卸载时间为300s即5分钟),让NFS自动卸载。

  • autofs 自动挂载服务可以帮我们解决这一问题,该服务是运行在客户端的一种 Linux 系统守护进程,在用户需要使用该文件系统时才去动态挂载,从而节约了网络资源和服务器的硬件资源。

2、安装

[root@node1 ~]# yum install autofs -y   # 客户端安装

3、配置文件分析

  • 配置文件路径:/etc/auto.master

  • 作用:处于生产环境中的 Linux 服务器,一般会同时管理许多设备的挂载操作。如果把这些设备挂载信息都写入到 autofs 服务的主配置文件中,无疑会让主配置文件臃肿不堪,不利于服务执行效率,也不利于日后修改里面的配置内容,则需要将挂载的设备独立配置形成子文件,主配置文件只存储配置挂载设置的文件名

  • /etc/auto.master文件内容格式:挂载目录 子配置文件

    • 挂载目录:不需要事先存在,因为autofs会主动建立该目录
    • 子配置文件:文件名可自定义
    • 例:/nfs /etc/auto.nfs
  • 子配置文件由自己创建,内容格式:

    • 本地挂载子目录 [-挂载参数] 服务器地址:目录
    • 例:testmnt 192.168.48.130:/data
    • 挂载参数:
参数功能
fg/bg当执行挂载时,该挂载行为会在前台(fg)还是后台(bg)执行,若在前台执行,则mount会持续尝试挂载,直到成功或time out为止;若为后台执行,则mount会在后台持续多次进行mount,而不会影响到前台的程序运行。
soft/hardhard表示当两者之间的任何一台主机脱机,则RPC会持续地呼叫,直到对方恢复连接为止。如果是soft的话,那RPC会在time out后重复呼叫,而非持续呼叫
intr当使用上面提到的hard方式挂载时,若加上intr这个参数,则当RPC持续呼叫时,该次的呼叫是可以被中断的
rsize/wsize读出(rsize)与写入(wsize)的区块大小。这个设置值可以影响客户端与服务器

4、实验4

  • 服务器创建共享目录,客户端实现自动挂载
  • 第一步:服务器与客户端都恢复快照,关闭安全软件
  • 第二步:安装软件
# 定位server端
[root@server ~]# yum  install  nfs-utils  -y
[root@server ~]# yum  install  rpcbind  -y

# 定位node1端
[root@node1 ~]# yum  install  nfs-utils  -y
[root@node1 ~]# yum  install  autofs  -y
  • 第三步:定位server端,新建共享目录,编辑nfs配置文件,设置权限
root@server ~]# mkdir  /data
[root@server ~]# vim   /etc/exports
/data   *(ro,sync,all_squash)

[root@server ~]# echo  "this is test"  > /data/file.txt
[root@server ~]# chmod  -Rf  777 /data

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

  • 第四步:定位server端,启动服务,必须先启动rpcbind
[root@server ~]# systemctl start rpcbind  
[root@server ~]# systemctl start nfs-server  
[root@server ~]# systemctl enable rpcbind  
[root@server ~]# systemctl enable nfs-server  
  • 第五步:定位node1端,编辑自动挂载主配置文件
# 计划node1端,挂载目录为/nfs/testmnt
[root@node1 ~]# vim  /etc/auto.master  #定位第7行添加一行 
/nfs    /etc/auto.nfs            # 挂载的父目录及子配置文件(子配置文件自行命名)

[root@node1 ~]# vim  /etc/auto.nfs   # 编辑子配置文件
testmnt         192.168.48.130:/data   # 挂载目录的子目录    nfs服务器参数

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

  • 第六步:定位node1端,启动服务
[root@node1 /]# systemctl start autofs
[root@node1 /]# systemctl enable autofs
  • 第七步:定位node1端,测试
[root@node1 /]# cd  /nfs
[root@node1 nfs]# ls
[root@node1 nfs]# cd  testmnt   # 进入挂载目录时,testmnt自动创建
[root@node1 testmnt]# ls
file.txt
[root@node1 testmnt]# cat  file.txt 
this is test
[root@node1 testmnt]# df  -h
文件系统               容量  已用  可用 已用% 挂载点
devtmpfs               4.0M     0  4.0M    0% /dev
tmpfs                  968M     0  968M    0% /dev/shm
tmpfs                  388M  9.4M  378M    3% /run
/dev/mapper/rhel-root   16G  4.2G   12G   27% /
/dev/nvme0n1p1         395M  235M  160M   60% /boot
tmpfs                  194M   92K  194M    1% /run/user/0
/dev/sr0               8.5G  8.5G     0  100% /run/media/root/RHEL-9-1-0-BaseOS-x86_64
192.168.48.130:/data    16G  4.2G   12G   27% /nfs/testmnt

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

5、实验5

  • 自动挂载光驱

  • 第一步:定位server,恢复快照,关闭安全软件,安装autofs软件

[root@server ~]# yum  install  autofs  -y
  • 第二步:计划光驱本地挂载目录为:/media/cdrom
  • 第三步:编辑主配置文件
[root@server ~]# vim  /etc/auto.master
/media  /etc/iso.aa

# /media 为最终挂载目录的父目录
# /etc/iso.aa:为子配置文件

在这里插入图片描述

在这里插入图片描述

  • 第四步:编写子配置文件
[root@server ~]# vim  /etc/iso.aa
cdrom   -fstype=iso9660,ro,nosuid,nodev :/dev/sr0  # 注意:冒号前有空格

在这里插入图片描述

  • 第五步:启动服务
[root@server ~]# systemctl start autofs
[root@server ~]# systemctl enable autofs
  • 第六步:测试
[root@server ~]# umount  /dev/sr0   # 先卸载设备已挂载的光驱

[root@server ~]# df  -h             # 查看已挂载的设备信息
文件系统               容量  已用  可用 已用% 挂载点
devtmpfs               4.0M     0  4.0M    0% /dev
tmpfs                  968M     0  968M    0% /dev/shm
tmpfs                  388M  9.5M  378M    3% /run
/dev/mapper/rhel-root   16G  4.2G   12G   27% /
/dev/nvme0n1p1         395M  235M  160M   60% /boot
tmpfs                  194M  104K  194M    1% /run/user/0

[root@server ~]# cd  /media
[root@server media]# ls
[root@server media]# cd  cdrom   # 触发自动挂载
[root@server cdrom]# ls          
AppStream  EFI   extra_files.json  images    media.repo               RPM-GPG-KEY-redhat-release
BaseOS     EULA  GPL               isolinux  RPM-GPG-KEY-redhat-beta
[root@server cdrom]# df -h     
文件系统               容量  已用  可用 已用% 挂载点
devtmpfs               4.0M     0  4.0M    0% /dev
tmpfs                  968M     0  968M    0% /dev/shm
tmpfs                  388M  9.5M  378M    3% /run
/dev/mapper/rhel-root   16G  4.2G   12G   27% /
/dev/nvme0n1p1         395M  235M  160M   60% /boot
tmpfs                  194M  104K  194M    1% /run/user/0
/dev/sr0               8.5G  8.5G     0  100% /media/cdrom

isolinux RPM-GPG-KEY-redhat-beta
[root@server cdrom]# df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 968M 0 968M 0% /dev/shm
tmpfs 388M 9.5M 378M 3% /run
/dev/mapper/rhel-root 16G 4.2G 12G 27% /
/dev/nvme0n1p1 395M 235M 160M 60% /boot
tmpfs 194M 104K 194M 1% /run/user/0
/dev/sr0 8.5G 8.5G 0 100% /media/cdrom

![在这里插入图片描述](https://img-blog.csdnimg.cn/c0139422951240969dbe272fc62a04a0.png)
  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值