linux 架构之NFS
linux架构之NFS
客户端需求:
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
[root@db01 ~]# mkdir -p /backup/nfs_172.16.1.31_`date +%F`
2.客户端在本地打包备份(将etc目录中所有的普通文件打包)拷贝至/backup/nfs_172.16.1.31_2018-09-02
[root@db01 ~]# tar -czPf /backup/nfs_172.16.1.31_`date +%F`/etc.tar.gz $(find /etc -type f)
3.客户端最后将备份的数据进行推送至备份服务器
[root@db01 ~]# cd /backup/nfs_172.16.1.31_`date +%F`
[root@db01 nfs_172.16.1.31_2021-10-20]# md5sum etc.tar.gz
6586c5629e5c3b883bfb417721519f99 etc.tar.gz
记得启动rsync
[root@db01 nfs_172.16.1.31_2021-10-20]#systemctl start rsyncd
[root@db01 nfs_172.16.1.31_2021-10-20]#rsync -avzP /backup rsync_backup@172.16.1.41::backup
或者
[root@db01 nfs_172.16.1.31_2021-10-20]#rsync -avzP /backup rsync_backup@172.16.1.41::backup--password-file=/etc/rsync.passwd
4.客户端每天凌晨1点定时执行该脚本
chmod +x rsync.sh
先加个可执行权限,在定时任务
crontab -e
0 1 * * * /root/rsync.sh
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
[root@db01 ~]# find /backup/ -ctime +7 -name "nfs" -exec rm -rf {} \;
----------------------------------------------------------------
#客户端脚本
mkdir -p /backup/nfs_172.16.1.31_`date +%F`
tar -czPf /backup/nfs_172.16.1.31_`date +%F`/etc.tar.gz $(find /etc -type f)
cd /backup/nfs_172.16.1.31_`date +%F`
md5sum etc.tar.gz > md5sum.txt
rsync -avzP /backup/ rsync_backup@172.16.1.41::backup
find /backup/ -ctime +7 -name "nfs" -exec rm -rf {} \;
----------------------------------------------------------------
服务端需求:
1.服务端部署rsync,用于接收客户端推送过来的备份数据
yum install rsync -y
2.服务端需要每天校验客户端推送过来的数据是否完整?md5sum
需要客户端配合 推文件之前要创建这个文本然后一起发过去
验证
cd/backup/nfs_172.16.1.31_`date +%F`
[root@rsync nfs_172.16.1.31_2021-10-20]# md5sum -c md5sum.txt
etc.tar.gz: OK
3.服务端需要每天校验的结果通知给管理员
email
yum install mailx -y
vim /etc/mail.rc
set from=1617271856@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=1617271856@qq.com
set smtp-auth-password=dettesbjmssvbdec
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
验证结果
$? :代表md5sum验证是否成功
-eq :等于号
$? -eq 等于0,代表成功
if [$? -eq 0] ;then
echo "验证成功" | mail -s "验证结果" 1617271856@qq.com
else
echo "验证失败" | mail -s "验证结果" 1617271856@qq.com
fi
4.服务端仅保留6个月的备份数据,其余的全部删除
find /backup/ -ctime +180 -name 'nfs' -exec rm -rf {} \;
----------------------------------------------------------------
服务端脚本
cd /backup/nfs_172.16.1.31_`date +%F`/
md5sum -c md5sum.txt
if [$? -eq 0] ;then
echo "验证成功" | mail -s "验证结果" 1617271856@qq.com
else
echo "验证失败" | mail -s "验证结果" 1617271856@qq.com
fi
find /backup/ -ctime +180 -name 'nfs*' -exec rm -rf {} \;
----------------------------------------------------------------
复习
1.备份
1.1、scp
全量备份
1.1.1、推数据
scp [本地文件路径] [用户]@[IP]:[远程服务器路径]
1.1.2、拉数据
scp [用户]@[IP]:[远程服务器路径] [本地文件路径]
1.1.2、参数
-r : 递归
-p : 不修改文件时间
1.2、rsync
增量备份
1.2.1、本地备份
rsync [原路径] [新路径]
1.2.2、远程备份
1.2.2.1、推数据
rsync [本地文件路径] [用户]@[IP]:[远程服务器路径]
1.2.2.2、拉数据
rsync [用户]@[IP]:[远程服务器路径] [本地文件路径]
1.2.3、以守护进程方式备份
服务端:
1、修改配置文件
vim /etc/rsyncd.conf
2、创建备份目录
mkdir /backup
3、创建守护进程的用户名和密码,并修改权
echo "rsync_backup:123456" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
4、启动守护进程
useradd rsync -r -M -s /sbin/nologin
chown rsync.rsync /backup
systemctl start rsyncd
客户端:
1、上传文件
rsync -avzP [文件路径] rsync_backup@172.16.1.41::backup
2.rsync + inotify
2.1、安装inotify
yum install inotify-tools -y
2.2、运行inotify + rsync
inotifywait -mr --format "%Xe %w %f" -e create,modify,delete [监控路径] | while read line ;do
rsync -avzP [监控路径] rsync_backup@172.16.1.41::backup
done
nfs基础
#什么是nfs
NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS
#为什么使用nfs
实现多台服务器之间数据共享
实现多台服务器之间数据一致
#nfs原理
1.用户访问NFS客户端,将请求转化为函数
2.NFS通过TCP/IP连接服务端
3.NFS服务端接收请求,会先调用portmap进程进行端口映射
4.Rpc.nfsd进程用于判断NFS客户端能否连接服务端;
5.Rpc.mount进程用于判断客户端对服务端的操作权限
6.如果通过权限验证,可以对服务端进行操作,修改或读取
主机 | 外网IP | 内网IP | 角色 |
---|---|---|---|
nfs | 10.0.0.31 | 172.16.1.31 | NFS服务端 |
web01 | 10.0.0.7 | 172.16.1.7 | NFS客户端 |
1.nfs部署
1、安装nfs服务
rpcbind是为nfs提供网络
yum install nfs-utils rpcbind -y
2、关闭防火墙和selinux
[root@nfs ~]# setenforce 0
[root@nfs ~]# systemctl stop firewalld
3、创建一个目录,用于存放文件的仓库
[root@nfs ~]# mkdir /data
4、创建一个系统用户,用于权限验证(权限验证时真正验证的时UID)
[root@nfs ~]# useradd www -r -M -s /sbin/nologin -u 996
5、修改NFS的配置文件(作用:指定NFS的仓库及权限)
NFS的配置文件:/etc/exports
[root@nfs ~]# vi /etc/exports
[仓库地址] [可以访问的IP段](权限)
/data 172.16.1.0/20(rw,all_squash,sync)
[root@nfs data]# vim /etc/exports
[root@nfs data]# cat /etc/exports
/data 172.16.1.0/20(rw,all_squash,sync)
#权限分为四个组:
#控制NFS读写权限
rw 读写权限 (常用)
ro 只读权限 (不常用)
#控制访问NFS时,NFS基于的权限
root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户 (不常用)
no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员 (不常用)
all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户 (常用)
no_all_squash 无论NFS客户端使用什么账户访问,都不进行压缩 (不常用)
#控制NFS同步方式
sync 同时将数据写入到内存与硬盘中,保证不丢失数据 (常用),但是会产生延时
async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 (不常用)
#控制默认的用户(非必须)
anonuid 配置all_squash使用,指定NFS的用户UID,必须存在系统 (常用)
anongid 配置all_squash使用,指定NFS的用户UID,必须存在系统 (常用)
6、启动NFS服务
[root@nfs data]# systemctl start nfs-server rpcbind
#验证启动
[root@nfs ~]# ps -ef | grep nfs
showmount -e 检查一下
客户端操作
7、挂载使用(客户端必须安装nfs-utils)
[root@web01 ~]# yum install nfs-utils -y
[root@web01 ~]# mount -t nfs 172.16.1.31:/data /opt
8、查看NFS的挂载点是否设置成功
# 查看指定服务器的挂载点
[root@nfs data]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data 172.16.1.0/20
# 查看本机的挂载点
[root@nfs data]# showmount -e
Export list for nfs:
/data 172.16.1.0/20
9、给服务端设置权限
[root@nfs data]# chown nfsnobody.nfsnobody /data/
挂载不上:
1、selinux没关闭
2、防火墙没有关闭
3、nfs客户端未安装
[root@web01 ~]# yum install nfs-utils -y
没权限:
nfs服务端是root权限
[root@nfs data]# chown nfsnobody.nfsnobody /data/
2.nfs参数详详情
NFS共享参数 | 参数作用 |
---|---|
rw | 读写权限 (第一组) 可读可写 |
ro | 只读权限(第一组) 可读 |
root_squash | 当NFS客户端以root访问时,修改权限为NFS服务器的匿名用户(不常用)(第二组)只能root用户访问 |
no_root_squash | 当NFS客户端以root访问时,修改权限为NFS服务器的root用户(几乎不用)(第二组)只能root用户访问 |
all_squash | 当NFS客户端以任意用户访问时,修改权限为NFS服务器的匿名用户(常用)(第二组)任意用户访问 |
no_all_squash | 当NFS客户端以任意用户访问时,不修改权限(不常用)(第二组) |
sync | 同时将数据写入内存和磁盘(保证数据不丢失)(第三组) |
async | 优先将数据写入内存,再写入硬盘;效率高,但是会丢失数据(第三组) |
anonuid | 配合all_squash,指定匿名用户的uid,用户为系统用户,必须存在(第四组) 在/etc/exports加anonuid=uid号 |
anongid | 配合all_squash,指定匿名用户的gid(第四组) 在/etc/exports加anongid=gid号 |
3.nfs案例
1、安装web服务软件
[root@web01 ~]# yum install -y httpd php
2、上传代码
cd /var/www/html
vim index.php
<?php
phpinfo();
3、开启web服务
[root@web01 html]# systemctl start httpd
将图片上传到web01上访问
3.1、将图片上传至NFS服务器
拖过来就好了
3.2、将NFS挂载到web网站对应目录
[root@web01 html]# mount -t nfs 172.16.1.31:/data /var/www/html/img/
3.3、上传代码
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<img src="./img/狗.jpg" alt="">
</body>
</html>
3.4、浏览器访问
192.168.15.7
4.nfs上传案例
1、安装web服务软件
[root@web02 ~]# yum install httpd php -y
2、上传代码
3、将代码复制到网站根目录(/var/www/html)
[root@web02 ~]# cp kaoshi/* /var/www/html/
4、开启web服务
[root@web02 html]# systemctl start httpd
5、统一用户(权限)
useradd www -r -M -s /sbin/nologin -u 996
查找某个软件的配置
rpm -qc [软件名]
5.2、修改httpd的启动用户
[root@web02 etc]# vim /etc/httpd/conf/httpd.conf
User www
Group www
5.3、重启WEB服务软件
[root@web02 etc]# systemctl restart httpd
5.4、修改站点目录的用户
[root@web02 etc]# chown -R www.www /var/www/html/
5.5、关闭selinux
setenforce 0 临时关闭
5.6、上传的文件共享至web01中
挂载到 172.16.1.31 :/data下
[root@web02 etc]# mount -t nfs 172.16.1.31:/data /var/www/html/upload