一、NFS服务

1. NFS是什么?

NFS(Network File System)网路文件系统
特点:

  • 主要用于Linux系统上实现文件共享的一种协议,其客户端主要是Linux
  • 没有用户认证机制,且数据在网络上传送的时候是明文传送,一般只能在局域网中使用
  • 支持多节点同时挂载以及并发写入

企业应用:为集群中的WebServer提供后端存储

2.NFS的组成

该服务包括的组件:

  • RPC(Remote Procedure Call Protocol):远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。
  • rpcbind:负责NFS的数据传输,远程过程调用tcp/udp协议,端口号为111
  • nfs-utils:控制共享哪些文件,权限管理

在这里插入图片描述

3. 安装NFS软件

命令:yum -y install rpcbind nfs-utils

[root@localhost ~]# rpm -q rpcbind
rpcbind-0.2.0-49.el7.x86_64
[root@localhost ~]# rpm -aq|grep ^nfs
nfs-utils-1.3.0-0.68.el7.2.x86_64 #nfs服务的一个脚本控制工具(服务端与客户端)
[root@localhost ~]# 

4. NFS的配置文件

命令:vim /etc/exports
注意:该配置文件默认为空

常用配置

# 共享目录	共享选项
/目录名		*(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
*.hhy.cn:代表共享给某个域下的所有主机(*.hhy.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实战

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

在这里插入图片描述

1. 任务要求

1.搭建NFS服务器(用于静态资源的存储如图片、视频、附件)
2. 使用mount指定对NFS服务器进行挂载,挂载到Web服务器中
3. 对NFS服务器中的静态资源进行实时备份(inotify + rsync)

在这里插入图片描述

2. 环境准备

主机名ip用处
web192.168.44.140Web服务器
nfs192.168.44.141NFS服务器
backup192.168.44.142备份服务器

第一步:设置主机名
命令:hostnamectl set-hostname [名称]

第二步:配置静态ip

TYPE="Ethernet"
BOOTPROTO="static" #静态
IPADDR=192.168.44.140 #ip
NETMASK=255.255.255.0 #子网掩码
GATEWAY=192.168.44.2 # 网关
DNS1=8.8.8.8 
DNS2=114.114.114.114
NAME="ens33"
DEVICE="ens33"
ONBOOT="yes"

第三步:关闭防火墙和SELinux

# systemctl stop firewalld
# systemctl disable firewalld

# setenforce 0
# vim /etc/selinux/config
SELINUX=disabled

第四步:配置yum源
可以使用本地也可以配置网络源(阿里、华为…)

# 清除Yum缓存
yum clean all
# 从新建立缓存
yum makecache

3. 搭建NFS服务器

1)安装NFS

第一步:安装NFS相关服务软件
命令:yum -y install rpcbind nfs-utils

第二步:创建一个共享目录/share
命令:mkdir /share

2)编写NSF配置文件

命令:vim /etc/exports

写入

#共享目录	共享选项
/share	192.168.44.0/24(rw,sync)
  • 表示共享的目录为share
  • 共享给192.168.44.*这个网段的机器
  • rw:表示对这个目录可读可写
  • sync:实时同步,直接写入磁盘(比较安全

3)启动相关的NFS服务

  • systemctl start rpcbind
  • systemctl start nfs

查看是否有111端口
命令:ss -naltp | grep 111

在这里插入图片描述

4. 搭建Web服务器

1)安装httpd服务

安装Apache:yum install httpd -y
启动Apache服务:systemctl start httpd
通过命令查看httpd服务的端口号:ss -naltp | grep httpd

在这里插入图片描述
当Apache软件启动完毕后,会自动占用计算机的80端口。

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

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

2)测试httpd服务

[root@web html]# touch /var/www/html/demo.html
[root@web html]# echo "<h1>NCF实战</h1>" >> /var/www/html/demo.html
[root@web html]#

通过Web服务器的ip在浏览器访问

在这里插入图片描述

3)在Web服务器中挂载NFS

第一步:创建挂载目录
命令:mkdir /var/www/html/static

第二步:安装nfs工具(防止挂载失败)
命令:yum -y install nfs-utils nfs-utils-lib nfs4-acl-tools

第三步:把nsf挂服务器的/share载到/var/www/html/static下,就可以获取/share的文件了

命令:mount -t nfs 192.168.44.141:/share /var/html/media或者mount.nfs 192.168.44.141:/share /var/www/html/media

通过df -h命令查看是否挂载成功

在这里插入图片描述

5. 上传视频文件到NFS服务器

第一步:上传视频文件到NFS服务器的/share目录下
在这里插入图片描述

第二步:在Web服务器中,查看 /var/www/html/static目录
NFS服务器上传的视频文件自动同步到了Web服务器

在这里插入图片描述

6. 在html网页中调用视频文件文件

编辑html文件:vim /var/www/html/demo.html

<video width="800" height="450" controls>
        <source src="static/mv.mp4">
</video>

在这里插入图片描述

7. 对NFS服务器进行实时备份

对NFS服务器进行实时备份:只要/share目录有变化,马上rsync进行同步到backup备份服务器的/backup目录

1)安装inotify工具

先用命令安装**c/c++**编译器:yum install gcc gcc-c++ ncurses-devel -y
第一步:安装inotify工具(在NFS服务器上)

[root@nfs file]# tar -xf inotify-tools-3.14.tar.gz
[root@nfs file]# cd inotify-tools-3.14
[root@nfs inotify-tools-3.14]# ls
aclocal.m4  config.guess  config.sub    COPYING  install-sh       Makefile.am  missing  src
AUTHORS     config.h.in   configure     depcomp  libinotifytools  Makefile.in  NEWS
ChangeLog   config.log    configure.ac  INSTALL  ltmain.sh        man          README
[root@nfs inotify-tools-3.14]# ./configure && make && make install 

编译+安装:./configure && make && make install

2)设置免密同步

设置nfsbackup服务器的免密同步
nfs主机生成非对称密钥:ssh-keygen -t rsa -P ""
把公钥发送给backuo服务器:ssh-copy-id root@192.168.44.142

3)编写rsync.sh脚本

只要nfs主机的/share目录下的文件发生变化,马上就同步到backup主机的/backup目录

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

手动创建日志文件:touch /var/log/rsync.log

rsync.sh添加可执行权限:chmod +x rsync.sh

4)创建备份目录

在backup服务器中创建一个/backup目录,用于实时备份
命令:mkdir /backup

5)在nfs和backup安装rsync

在nfs和backup两台机器上都安装rsyncf
命令:yum -y install rsync
启动rsync服务
命令:systemctl start rsyncd

6)在NFS服务器中执行rsync脚本

命令:nohup ./rsync.sh &

  • & : 让inotify.sh在计算机后台运行,可以使用jobs命令查看,kill %编号结束,当我们退出终端时,这个执行会自动结束
  • nohup : 让程序一直在后台运行,即使我们关闭了终端

在这里插入图片描述

6)测试同步

nfs服务器上创建test.c文件,看看backup主机上是否自动同步

在这里插入图片描述

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐