Linux之NFS静态资源文件服务

Posted 锦衣admin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux之NFS静态资源文件服务相关的知识,希望对你有一定的参考价值。

NFS静态资源服务概述

  • NFS(Network File System)网络文件系统,主要用于Linux系统上实现文件共享的一种协议,其客户端主要是Linux

  • 没有用户认证机制,且数据在网络上传送的时候是明文传送,一般只能在局域网中使用

  • 支持多节点同时挂载及并发写入

  • 企业应用:为集群中的web server提供后端存储(做静态资源服务器)

在这里插入图片描述

NFS组成的组件

  • rpcbind : 负责NFS的数据传输,远程过程调用 tcp/udp协议 端口:111

  • nfs-utils :控制共享哪些文件,权限管理

RPC(Remote Procedure Call Protocol)协议:
rpcbind组件中远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。

在这里插入图片描述

与NFS相关的软件包

# nfs-utils-1.2.3-26.el6.x86_64 			=>	nfs服务的一个脚本控制工具(服务端与客户端组合型脚本)
#n fs4-acl-tools-0.3.3-6.el6.x86_64	acl 	=>	工具包
# nfs-utils-lib-1.1.5-4.el6.x86_64  		=>nfs 库文件,在安装rpcbind、nfs-utils两个组件时会自动安装

安装NFS软件

# yum install rpcbind nfs-utils -y		=>	安装NFS服务组件,相当于安装NFS软件

# rpm -q rpcbind
# rpm -aq|grep ^nfs		=>	搜索所有以nfs开头的软件

NFS服务的配置文件:/etc/exports

  • NFS服务配置文件 /etc/exports 里面默认是没有内容的
# man 5 exports	=>	查看NFS服务配置文件手册

# vim /etc/exports
	共享目录   共享选项
	/share    *(ro,sync)	=>	以只读的形式共享给所有主机
	/public	  *(ro,sync)

	共享主机:
		*   :代表所有主机
		192.168.0.0/24:代表共享给某个网段192.168.0.1 ~ 192.168.0.254
		192.168.0.0/24(rw) 192.168.1.0/24(ro) :代表共享给不同网段
		192.168.0.254:只共享给某个IP
		*.itcast.cn:代表共享给某个域下的所有主机

	共享选项:
#		ro:只读
#		rw:读写
		
#		 sync:实时同步,直接写入磁盘(安全性最高)
#		async:异步,先缓存数据在内存然后再同步磁盘(效率最高,但是有丢失文件风险)
	
#		anonuid:设置访问nfs服务的用户的uid,uid需要在/etc/passwd中存在
#		anongid:设置访问nfs服务的用户的gid
		
#	 	  root_squash :默认选项 root用户创建的文件的属主和属组都变成nfsnobody,其他人nfs-server端是它自己,client端是nobody。(访问NFS服务器时,映射为匿名账号)
#		no_root_squash:root用户创建的文件属主和属组还是root,其他人server端是它自己uid,client端是nobody。(访问NFS服务器时,映射为root管理员账号)
#			all_squash: 不管是root还是其他普通用户创建的文件的属主和属组都是nfsnobody

NFS服务配置说明:

  • anonuidanongid参数和all_squash一起使用。

  • all_squash表示不管是root还是其他普通用户从客户端所创建的文件在服务器端的拥有者和所属组都是nfsnobody;服务端为了对文件做相应管理,可以设置anonuidanongid进而指定文件的拥有者和所属组

任务背景

① 搭建NFS服务器(用于静态资源的存储如图片、视频、附件)

② 使用mount指定对NFS服务器进行挂载,挂载到Web服务器中

③ 对NFS服务器中的静态资源进行实时备份(inotify + rsync)

环境准备

编号主机名称FQDNIP地址作用
1web.itcast.cn10.1.1.11Web服务器
2nfs.itcast.cn10.1.1.12NFS服务器
3backup.itcast.cn10.1.1.13Backup服务器

第一步:设置计算机的在主机名称

# hostnamectl set-hostname web.itcast.cn		=>	Web服务器
# hostnamectl set-hostname nfs.itcast.cn		=>	NFSf服务器
# hostnamectl set-hostname backup.itcast.cn		=>	Backup(NFS备份服务器)

第二步:设置IP地址

# vim /etc/sysconfig/network-scripts/ifcfg-ens33
	BOOTPROTO=none
	IPADDR=10.1.1.11   /10.1.1.13   /10.1.1.13
	NETMASK=255.255.255.0
	GATEWAY=10.1.1.2
	DNS1=119.29.29.29
	DNS2=114.114.114.114

UUID必须是唯一的,所以要么删除,要么更改UUID的值(更改后3位)


# systemctl stop NetworkManager
# systemctl disable NetworkManager
关闭网络管理,以免影响静态IP获取

# systemctl restart network

第三步:关闭防火墙与SELinux

关闭防火墙
	# systemctl stop firewalld
	# systemctl disable firewalld

关闭SELinux
	# setenforce 0
	# vim /etc/selinux/config
	SELINUX=disabled

第四步:配置YUM源

https://jinyi.blog.csdn.net/article/details/116139354

NFS任务解决方案

搭建NFS服务器:10.1.1.12

第一步:搭建NFS服务器

# yum install rpcbind nfs-utils -y	=>	安装NFS服务组件

# mkdir /share	=>	创建共享目录

第二步:编写NFS主配置文件

# vim /etc/exports		=>	编写NFS服务配置文件 
	共享目录   共享选项
	/share    10.1.1.0/24(rw,sync)	=>	代表对共享目录有可读可写权限;sync服务代表实时同步操作,如果/shar目录有更改马上写入硬盘,当并发量大可能丢失数据
	备注:当并发量较大建议使用async,并发量小使用sync

第三步:启动相关的NFS服务

# systemctl start rpcbind	=>	启动rpcbind服务
# systemctl start nfs		=>	启动nfs服务

# ss -naltp |grep 111       =>	当111端口被占用,说明NFS服务已启动
	[root@nfs ~]# vim /etc/exports
	[root@nfs ~]# ss -naltp |grep 111
	LISTEN     0      128    *:111    *:*        users:(("rpcbind",pid=11972,fd=8))
	LISTEN     0      128    :::111    :::*       users:(("rpcbind",pid=11972,fd=11))

	备注:*:111代表IPv4,:::111代表IPv6

搭建web服务器:10.1.1.11

第五步:搭建Web服务器

  • 当Apache软件启动完毕后,会自动占用计算机的80端口。

  • 80端口指向Web服务器的目录 => /var/www/html

  • 所以项目源代码都可以直接存放于/var/www/html目录下

# yum install httpd -y		=>	安装阿帕奇软件

# systemctl start httpd		=>	启动http服务

# touch /var/www/html/index.html	=>	创建一个html网页文件

# echo "NFS实战演练" > /var/www/html/index.html		=>	会在页面输出NFS实战演练这几个字

在web服务器中挂载NFS

第六步:在Web服务器中挂载NFS

# mkdir /var/www/html/media		=>	在web服务器创建挂载目录

# mount -t nfs 10.1.1.12:/share /var/www/html/media 	=>	挂载,两种方式任选一种# mount.nfs 10.1.1.12:/share /var/www/html/media 		=>	挂载,两种方式任选一种

# df -h		=>	查看挂载情况,两种方式任选一种# lsblk		=>	查看挂载情况,两种方式任选一种
	10.1.1.12:/share          17G  5.1G   12G  30% /var/www/html/media


#l 注意:如果客户端没有安装nfs工具可能导致挂载失败:
	# yum -y install nfs-utils nfs-utils-lib nfs4-acl-tools		=>	在web服务器上安装nfs工具包

到此NFS服务挂载完成,只需要往NFS服务器的/shar目录存储数据即可

上传aws.mp4视频到NFS服务器的/share

第一步:使用MX上传aws.mp4到/share目录(NFS服务器)

第二步:在Web服务器中,ll /var/www/html/media目录

[root@web ~]# ll /var/www/html/media/
总用量 2724
-rw-r--r--. 1 root root 2785356 52 17:09 aws.mp4

第三步:在html网页中调用aws.mp4文件
编写代码调用挂载目录的资源

# vim /var/www/html/index.html
	<video width="800" height="450" controls>
		<source src="media/aws.mp4">		=>	引用挂载目录
	</video>

第四步:验证打开web服务器下的网页是否出现NFS的挂载视频
http://10.1.1.11/index.html

对NFS服务器进行实时备份

任务目标:NFS服务器:/share目录有变化,马上rsync进行同步Backup备份服务器的/backup目录

第一步:安装inotify工具(在NFS服务器)

# tar xf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14
# ./configure && make && make install

第二步:编写rsync.sh脚本,监控/share目录的变化(在NFS服务器)

# vim rsync.sh

	#!/bin/bash
	/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib,move /share |while read events
	do
	    rsync -a --delete /share/ 10.1.1.13:/backup/
	    echo "`date +%F\\ %T`出现事件$events" >> /var/log/rsync.log 2>&1
	done

第三步:给rsync添加x权限(在NFS服务器)

还需要将rsync服务托管到xinetd,然后启动xinetd服务

# chmod +x rsync.sh

第四步:把NFS服务器与Backup备份服务器进行免密登录(在NFS服务器)

# ssh-keygen
# ssh-copy-id root@10.1.1.13	=>	在NFS服务器上制作免密登录

NFS备份服务器:10.1.1.13

第五步:在Backup服务器中创建一个/backup目录,用于实时备份(NFS备份服务器上操作)

# mkdir /backup

第六步:在NFS服务器中执行rsync脚本实现实时备份(在NFS服务器)

# nohup ./rsync.sh &


#l 报错
	[root@nfs ~]# nohup ./rsync.sh &
	[1] 72612
	[root@nfs ~]# nohup: 忽略输入并把输出追加到"nohup.out"

#l 解决方法:
	# nohup ./rsync.sh &	=>	nohup ./rsync.sh >/dev/null 2>&1 &	更换一下命令

以上是关于Linux之NFS静态资源文件服务的主要内容,如果未能解决你的问题,请参考以下文章

第九章 网络文件共享服务之NFS

Linux之NFS网络文件系统

NFS共享存储服务

Kubernetes进阶之PersistentVolume 静态供给实现NFS网络存储

Linux基础之命令练习Day7-nginx,nfs

Linux网络文件共享服务之NFS