文章目录
一、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 | 用处 |
---|---|---|
web | 192.168.44.140 | Web服务器 |
nfs | 192.168.44.141 | NFS服务器 |
backup | 192.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)设置免密同步
设置nfs
和backup
服务器的免密同步
在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主机上是否自动同步