➤NFS概述
NFS是一种基于TCP/IP传输的网络文件系统协议。通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。
➤1、NFS优点与缺点
对于大多数负载均衡群集来说,使用NFS协议来共享数据存储是比较常见的做法,NFS也是NAS存储设备必然支持的一种协议。但是由于NFS没有用户认证机制,而且数据在网络上明文传输,所以安全性很差,一般只能在局域网中使用。
➤2、NFS服务实现所需条件
NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,以完成远程到本地的映射过程。
所以需要安装 nfs-utils、rpcbind 软件包来提供 NFS共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持。
1.环境准备(安装相关软件)
准备两台虚拟机(webserver,nfsserver)
webserver:
回顾【
[root@webserver ~]# systemctl stop firewalld
[root@webserver ~]# systemctl disable firewalld
[root@webserver ~]# setenforce 0
[root@webserver ~]# vim /etc/selinux/config
SELINUX=disabled
[root@localhost ~]# yum install --downloadonly --downloaddir=./soft nginx
[root@localhost ~]# ls soft/ //安装包的位置
(1)安装createrepo制作仓库的软件
[root@localhost ~]# yum -y install createrepo
(2)把soft⽂件夹做成⼀个本地的⾃建仓库
[root@localhost ~]# createrepo soft/ //使用createreop生成仓库
[root@localhost ~]# cd soft/
[root@localhost soft]# ls
(3)在/etc/yum.repos.d/下创建soft.repo
[root@localhost soft]# rm -rf /etc/yum.repos.d/*.repo //删除其他仓库⽂件
[root@localhost soft]# vim /etc/yum.repos.d/soft.repo //配置仓库文件
[soft]
name=soft_local
gpgcheck=0
baseurl=file:///root/soft
enable=1
[root@localhost soft]# yum clean all
[root@localhost soft]# yum makecache
[root@localhost soft]# yum -y install nginx //再次安装nginx,不用再次下载
[root@webserver ~]# nginx
[root@webserver ~]# netstat -lnput|grep nginx
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 2033/nginx: master
tcp6 0 0 :::80 :::* LISTEN 2033/nginx: master
】
[root@nfsserver ~]# yum -y install nfs-utils.x86_64 rpcbind.x86_64 //安装相关软件包
nfsserver:
[root@nfsserver ~]# yum -y install nfs-utils.x86_64 rpcbind.x86_64 // 安装相关软件包
[root@nfsserver ~]# mkdir /share //创建共享⽬录
[root@nfsserver ~]# touch /share/passwd
[root@nfsserver ~]# scp -r root@192.168.1.100:/usr/share/nginx/html /share/
[root@nfsserver ~]# vim /etc/exports //修改配置文件
./share *(rw,sync) //sync同步,async异步
共享⽬录 共享选项
2.配置文件解读
共享主机:
* :代表所有主机
192.168.0.0/24:代表共享给某个⽹段
192.168.0.0/24(rw) 192.168.1.0/24(ro) :代表共享给不同⽹段
192.168.0.254:共享给某个IP
*.itcast.com:代表共享给某个域下的所有主机
共享选项:
ro:只读
rw:读写
sync:实时同步,直接写⼊磁盘
async:异步,先缓存在内存再同步磁盘
anonuid:设置访问nfs服务的⽤户的uid,uid需要在/etc/passwd中存在
anongid:设置访问nfs服务的⽤户的gid
root_squash :默认选项 root⽤户创建的⽂件的属主和属组都变成nfsnobody,其他⼈nfs-server端是它⾃⼰,client端是nobody。
no_root_squash:root⽤户创建的⽂件属主和属组还是root,其他⼈server端是它⾃⼰uid,client端是nobody。
all_squash: 不管是root还是其他普通⽤户创建的⽂件的属主和属组都是nfsnobody
说明:
anonuid和anongid参数和all_squash⼀起使⽤。
all_squash表示不管是root还是其他普通⽤户从客户端所创建的⽂件在服务器端的拥有者和所属组都是nfsnobody;服务端为了对⽂件做相应管理,可以设置anonuid和anongid进⽽指定⽂件的拥有者和所属组
3.启动服务
[root@nfsserver ~]# systemctl start rpcbind.service
[root@nfsserver ~]# systemctl start nfs //启动服务
[root@nfsserver ~]# netstat -lnput|grep 111 //查看端口占用
[root@nfsserver ~]# ls /share/ //共享目录
html passwd tdr.png
4.挂载及网站测试
回到webserver:
[root@webserver ~]# mkdir /usr/share/nginx/html/static/ //创建挂载点
[root@webserver ~]# mount -t nfs 192.168.1.125:/share /usr/share/nginx/html/static/ //挂载nfs-server端共享⽬录
[root@webserver ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 17G 13G 4.5G 74% /
devtmpfs 224M 0 224M 0% /dev
tmpfs 236M 0 236M 0% /dev/shm
tmpfs 236M 5.6M 230M 3% /run
tmpfs 236M 0 236M 0% /sys/fs/cgroup
/dev/sr0 8.8G 8.8G 0 100% /mnt
/dev/sda1 1014M 130M 885M 13% /boot
tmpfs 48M 0 48M 0% /run/user/0
192.168.1.125:/share 17G 12G 5.9G 66% /usr/share/nginx/html/static
[root@webserver ~]# ls /usr/share/nginx/html/static/
html passwd tdr.png //可以看到nfsserver主机共享目录下的文件
[root@webserver ~]# vim /usr/share/nginx/html/index.html //测试
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<body>
<img src="static/tdr.png" />
</body>
</html>
5.做备份,实现nfs-server端的数据⽂件实时同步
再准备一台虚拟机(bakhost):
[root@bakhost ~]# systemctl stop firewalld
[root@bakhost ~]# setenforce 0
[root@bakhost ~]# yum -y install rsync
[root@bakhost ~]# mkdir /bak //备份目录
nfsserver:
[root@nfsserver ~]# yum -y install rsync
[root@nfsserver ~]# yum -y install inotify-tools
[root@nfsserver ~]# ssh-keygen //设置免密登陆
[root@nfsserver ~]# ssh-copy-id root@192.168.1.225
[root@nfsserver ~]# rsync -av /share/ root@192.168.1.225:/tmp
[root@nfsserver ~]# vim bak.sh //编写脚本
#!/bin/bash
/usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move /share/ |while read events
do
rsync -av /share/ root@192.168.1.225:/bak
echo "`date +%F\ %T`出现事件$events" >> /var/log/rsync.log 2>&1
done
[root@nfsserver ~]# chmod +x bak.sh //加可执⾏权限
[root@nfsserver ~]# nohup ./bak.sh & //脚本放到后台去运⾏
验证:
[root@nfsserver ~]# touch /share/aaa.txt
[root@nfsserver ~]# tail -f /var/log/rsync.log //查看日志
2024-07-22 16:27:20出现事件/share/ CREATE aaa.txt
2024-07-22 16:27:31出现事件/share/ ATTRIB aaa.txt
回到bakhost查看:
[root@bakhost ~]# ls /bak
aaa.txt a.txt passwd tdr.png