运维基本功(二十): NFS任务解决方案

Posted 机智的小锐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了运维基本功(二十): NFS任务解决方案相关的知识,希望对你有一定的参考价值。

本文是在课程课件基础上修改的学习笔记
课程原地址:https://www.bilibili.com/video/BV1nW411L7xm
如有侵删
运维基本功(一):Linux系统安装
运维基本功(二):Linux基本命令
运维基本功(三):Linux文件管理
运维基本功(四):Linux文件管理-Vim编辑器概述
运维基本功(五):Linux文件管理-用户管理
运维基本功(六):Linux用户管理-远程管理
运维基本功(七):Linux的权限管理操作
运维基本功(八):Linux自有服务与软件包管理
运维基本功(九): Linux自有服务-防火墙&计划任务
运维基本功(十): Linux计划任务以及进程检测与控制
运维基本功(十一): LAMP项目部署实战
运维基本功(十二): Linux命令回顾与扩展
运维基本功(十三): 再谈用户组管理
运维基本功(十四):Linux下yum源配置实战
运维基本功(十五):Linux系统优化基础
运维基本功(十六):远程管理SSH服务
运维基本功(十七):远程管理SSH服务免密登录解决方案
运维基本功(十八): Linux系统下数据同步服务RSYNC解决方案
运维基本功(十九): 文件共享服务之FTP解决方案
运维基本功(二十): NFS任务解决方案

任务背景

由于业务驱动,为了提高用户的访问效率,现需要将原有web服务器上的静态资源文件分离出来,单独保存到一台文件服务器上。

在这里插入图片描述

任务要求

  1. 一台应用服务器web-server部署apache,静态网页资源存放在另外一台NFS服务器上
  2. 对于NFS服务器上保存的静态资源实行实时备份(inotify + rsync)

任务拆解

  1. 共享存储服务器搭建NFS服务,为web服务器提供静态资源文件内容
    • 创建共享目录来保存静态资源文件
    • 发布该共享目录给web服务使用
  2. 一台服务器搭建web服务,并使用(挂载)共享存储的静态资源

在这里插入图片描述

一、知识储备

1、NFS概述

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

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

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

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

2、NFS组成

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

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

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

在这里插入图片描述

3、与NFS相关的软件包

nfs-utils-1.2.3-26.el6.x86_64 		nfs服务的一个脚本控制工具(服务端与客户端)
nfs4-acl-tools-0.3.3-6.el6.x86_64	acl 工具包
nfs-utils-lib-1.1.5-4.el6.x86_64  	nfs 库文件

4、安装NFS软件

# yum install rpcbind nfs-utils -y

# rpm -q rpcbind
# rpm -aq|grep ^nfs

5、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

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

三、NFS任务解决方案

0、环境准备

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

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

Web# hostnamectl set-hostname web.itcast.cn
NFS# hostnamectl set-hostname nfs.itcast.cn
Backup# hostnamectl set-hostname backup.itcast.cn

第二步:设置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位)

第三步:关闭防火墙与SELinux

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

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

第四步:配置YUM源

# yum clean all
# yum mackecache

1、搭建NFS服务器

第一步:安装软件

# yum install rpcbind nfs-utils -y

第二步:创建一个共享目录,如/share

# mkdir /share

2、编写NFS主配置文件

# vim /etc/exports
共享目录   共享选项
/share    10.1.1.0/24(rw,sync)

3、启动相关的NFS服务

# systemctl start rpcbind
# systemctl start nfs

# ss -naltp |grep 111       111端口

4、搭建Web服务器

# yum install httpd -y
# systemctl start httpd

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

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

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

# echo "NFS实战演练" > /var/www/html/index.html

5、在Web服务器中挂载NFS

# mkdir /var/www/html/media


# 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
Filesystem               Size  Used Avail Use% Mounted on
/dev/mapper/centos-root   17G  5.1G   12G  30% /
devtmpfs                 894M     0  894M   0% /dev
tmpfs                    910M     0  910M   0% /dev/shm
tmpfs                    910M   11M  900M   2% /run
tmpfs                    910M     0  910M   0% /sys/fs/cgroup
/dev/sda1               1014M  179M  836M  18% /boot
tmpfs                    182M   28K  182M   1% /run/user/1000
/dev/sr0                 4.3G  4.3G     0 100% /run/media/itheima/CentOS 7 x86_64
tmpfs                    182M     0  182M   0% /run/user/0
10.1.1.12:/share          17G  5.1G   12G  30% /var/www/html/media

如果客户端没有安装nfs工具可能导致挂载失败:
yum -y install nfs-utils nfs-utils-lib nfs4-acl-tools

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

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

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

# ll /var/www/html/media
aws.mp4

7、在html网页中调用aws.mp4文件

# vim /var/www/html/index.html
<video width="800" height="450" controls>
	<source src="media/aws.mp4">
</video>

8、对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目录的变化

# 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权限

# chmod +x rsync.sh

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

# ssh-keygen
# ssh-copy-id root@10.1.1.13

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

# mkdir /backup

第六步:在NFS服务器中执行rsync脚本

# nohup ./rsync.sh &
# chmod +x rsync.sh

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

# ssh-keygen
# ssh-copy-id root@10.1.1.13

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

# mkdir /backup

第六步:在NFS服务器中执行rsync脚本

# nohup ./rsync.sh &

以上是关于运维基本功(二十): NFS任务解决方案的主要内容,如果未能解决你的问题,请参考以下文章

第二十五课预习任务

运维基本功(二十一): 文件共享服务之SAMBA

Linux运维 第三阶段 (二十) tomcat

二十NFS企业级优化

Linux运维之道之ENGINEER1.3(配置SMB共享,配置NFS共享)

28任务二十五——节点折叠展开增加删除查找