一、Rsync常用参数
1.常用参数
-a
-v
-z
-r
-t
-o
-p
-g
-l
-P
-D
-L
-e
--exclude= PATTERN
--exclude-from= file
--bwlimit= 100
--partial
--delete
--password-file= xxx
1)–exclude-from=file 排除参数
[ root@web01 ~]
[ root@web01 ~]
total 0
drwxr-xr-x. 2 root root 6 Nov 19 08:44 dir
-rw-r--r--. 1 root root 0 Nov 19 08:44 file
-rw-r--r--. 1 root root 0 Nov 19 08:59 txt1
-rw-r--r--. 1 root root 0 Nov 19 08:59 txt10
-rw-r--r--. 1 root root 0 Nov 19 08:59 txt2
-rw-r--r--. 1 root root 0 Nov 19 08:59 txt3
-rw-r--r--. 1 root root 0 Nov 19 08:59 txt4
-rw-r--r--. 1 root root 0 Nov 19 08:59 txt5
-rw-r--r--. 1 root root 0 Nov 19 08:59 txt6
-rw-r--r--. 1 root root 0 Nov 19 08:59 txt7
-rw-r--r--. 1 root root 0 Nov 19 08:59 txt8
-rw-r--r--. 1 root root 0 Nov 19 08:59 txt9
[ root@web01 ~]
txt1
txt2
txt3
txt4
[ root@web01 ~]
sending incremental file list
1.txt
txt10
txt5
txt6
txt7
txt8
txt9
dir/
sent 468 bytes received 165 bytes 422.00 bytes/sec
total size is 20 speedup is 0.03
2)–bwlimit=100 限速传输
[ root@web01 ~]
[ root@web01 ~]
sending incremental file list
1.txt
114,130,944 10% 1.01MB/s 0:15:06
[ root@web01 ~]
sending incremental file list
1.txt
262,078,464 24% 9.89MB/s
3)–delete 数据一致(无差异同步)
[ root@web01 ~]
total 0
-rw-r--r--. 1 root root 0 Nov 19 09:17 txt2
-rw-r--r--. 1 root root 0 Nov 19 09:17 txt3
-rw-r--r--. 1 root root 0 Nov 19 09:17 txt4
-rw-r--r--. 1 root root 0 Nov 19 09:17 txt5
-rw-r--r--. 1 root root 0 Nov 19 09:17 txt6
-rw-r--r--. 1 root root 0 Nov 19 09:17 txt7
-rw-r--r--. 1 root root 0 Nov 19 09:17 txt8
-rw-r--r--. 1 root root 0 Nov 19 09:17 txt9
[ root@web01 ~]
[ root@web01 ~]
[ root@web01 ~]
[ root@web01 ~]
sending incremental file list
deleting txt4
deleting txt3
deleting txt2
./
sent 332 bytes received 52 bytes 768.00 bytes/sec
total size is 7,746 speedup is 20.17
[ root@backup backup]
total 0
-rw-r--r--. 1 rsync rsync 0 Nov 19 09:17 txt5
-rw-r--r--. 1 rsync rsync 0 Nov 19 09:17 txt6
-rw-r--r--. 1 rsync rsync 0 Nov 19 09:17 txt7
-rw-r--r--. 1 rsync rsync 0 Nov 19 09:17 txt8
-rw-r--r--. 1 rsync rsync 0 Nov 19 09:17 txt9
拉取时:客户端数据与服务端数据一致,以服务端数据为准
推送时:服务端数据一客户端数据一致,一客户端数据为准
二、Rsync备份案例
1.准备服务器
主机 IP 身份 web01 10.0.0.7 客户端 backup 10.0.0.41 服务端
2.了解需求
客户端需求:
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
2.客户端在本地打包备份( 系统配置文件、应用配置等) 拷贝至/backup/nfs_172.16.1.31_2018-09-02
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
服务端需求:
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
3.客户端
1)创建备份目录
[ root@web01 ~]
[ root@web01 ~]
web01
[ root@web01 ~]
10.0.0.7 172.16.1.7
[ root@web01 ~]
172.16.1.7
[ root@web01 ~]
2020-11-19
[ root@web01 ~]
[ root@web01 ~]
[ root@web01 ~]
drwxr-xr-x. 2 root root 6 Nov 19 10:00 web01_172.16.1.7_2020-11-19
2)打包数据
[ root@web01 ~]
[ root@web01 ~]
[ root@web01 ~]
3)推送文件
[ root@web01 ~]
4)将以上步骤写成脚本
[ root@web01 ~]
DIR= /backup
HOSTNAME= $( hostname )
IP= $( hostname -I | awk '{print $2 }' )
DATE= $( date +%F)
SRC= ${DIR} /${HOSTNAME} _${IP} _${DATE}
mkdir $SRC -p
cd /var && tar zcf $SRC /conf.tar.gz ./log/messages
export RSYNC_PASSWORD= 123456
rsync -az $DIR / rsync_backup@172.16.1.41::backup
PS:个人另一脚本案例:
host= ` hostname `
ip= ` hostname -I | awk '{print $2 }' `
time= ` date "+%F" `
src= ${host} _${ip} _${time}
export RSYNC_PASSWORD= 123
tar zcf /backup/${src} .gz /etc/hosts & > /dev/null
md5sum /backup/* > /tmp/md5.txt
rsync -az /backup/* rsync_backup@10.0.0.31::backup & > /dev/null
5)将脚本加入定时任务
[ root@web01 ~]
0 1 * * * /bin/bash /root/client.sh
6)只保留七天 的数据
[ root@web01 ~]
[ root@web01 ~]
7)加入脚本
[ root@web01 ~]
DIR= /backup
HOSTNAME= $( hostname )
IP= $( hostname -I | awk '{print $2 }' )
DATE= $( date +%F)
SRC= ${DIR} /${HOSTNAME} _${IP} _${DATE}
mkdir $SRC -p
cd /var && tar zcf $SRC /conf.tar.gz ./log/messages
export RSYNC_PASSWORD= 123456
rsync -az $DIR / rsync_backup@172.16.1.41::backup
find $DIR / -type d -mtime +7 | xargs rm -rf
8)客户端先判断文件是否存在
[ root@web01 ~]
DIR= /backup
HOSTNAME= $( hostname )
IP= $( hostname -I | awk '{print $2 }' )
DATE= $( date +%F)
SRC= ${DIR} /${HOSTNAME} _${IP} _${DATE}
[ -d $SRC ] || mkdir $SRC -p
[ -f $SRC /conf.tar.gz ] || cd /var && tar zcf $SRC /conf.tar.gz ./log/messages
export RSYNC_PASSWORD= 123456
rsync -az $DIR / rsync_backup@172.16.1.41::backup
find $DIR / -type d -mtime +7 | xargs rm -rf
4.服务端
1)部署rsync服务端
2)客户端脚本加入生成校验码的操作
[ root@web01 ~]
DIR= /backup
HOSTNAME= $( hostname )
IP= $( hostname -I | awk '{print $2 }' )
DATE= $( date +%F)
SRC= ${DIR} /${HOSTNAME} _${IP} _${DATE}
mkdir $SRC -p
cd /var && tar zcf $SRC /conf.tar.gz ./log/messages
md5sum $SRC /conf.tar.gz > $SRC /flag
export RSYNC_PASSWORD= 123456
rsync -az $DIR / rsync_backup@172.16.1.41::backup
find $DIR / -type d -mtime +7 | xargs rm -rf
3)校验文件
[ root@backup backup]
4)使用邮件发送消息
1.服务端配置邮件功能
[ root@backup ~]
[ root@backup ~]
set from= 1710724925@qq.com
set smtp= smtps://smtp.qq.com:465
set smtp-auth-user= 1710724925@qq.com
set smtp-auth-password= jbruyyuzywrwejfb
set ssl-verify= ignore
set nss-config-dir= /etc/pki/nssdb/
保存退出;执行命令:输入想发送的内容,
mail -s "what are you doing?" 1710724925@qq.com < 1.txt
2.测试发送邮件
[ root@backup ~] mail -s "what are you doing?" 1710724925@qq.com < 1.txt
5)服务端脚本
#!/bin/bash
DIR= /backup
HOSTNAME= $( hostname )
IP= $( hostname -I | awk '{print $2 }' )
DATE= $( date +%F)
SRC= ${DIR} /${HOSTNAME} _${IP} _${DATE}
md5sum -c $DIR /*_$DATE /flag > $DIR /result.txt
mail -s "$DATE 备份文件 校验结果" 1240206455@qq.com < $DIR /result.txt
find $DIR / -type d -mtime +180 | xargs rm -rf
6)将服务端脚本加入定时任务
[ root@backup ~]
0 7 * * * /bin/bash /root/server.sh & > /dev/null
七、Rsync结合inotify
1.安装inotify
[ root@web01 ~]
2.常用参数
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
3.测试命令
/usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /backup
4.实时备份脚本编写
1)粗略版(推荐,简洁直接)
[ root@backup ~]
dir= /backup
/usr/bin/inotifywait -mrq --format '%w %f' -e create,delete,attrib,close_write $dir | while read line; do
cd $dir && rsync -az -R --delete . rsync_backup@172.16.1.31::backup --password-file= /etc/rsync.passwd > /dev/null 2> & 1
done &
2)精油版(不推荐,啰嗦)
#!/bin/bash
src= /data
des= backup
rsync_passwd_file= /etc/rsync.passwd
ip1= 172.16.1.41
user= rsync_backup
cd ${src}
/usr/bin/inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file
do
CREATE /backup/ 1.txt
INO_EVENT= $( echo $file | awk '{print $1 }' )
INO_FILE= $( echo $file | awk '{print $2 }' )
if [ [ $INO_EVENT = ~ 'CREATE' ] ] || [ [ $INO_EVENT = ~ 'MODIFY' ] ] || [ [ $INO_EVENT = ~ 'CLOSE_WRITE' ] ] || [ [ $INO_EVENT = ~ 'MOVED_TO' ] ]
then
rsync -azcR --password-file= ${rsync_passwd_file} ${INO_FILE} ${user} @${ip1} ::${des}
fi
if [ [ $INO_EVENT = ~ 'DELETE' ] ] || [ [ $INO_EVENT = ~ 'MOVED_FROM' ] ]
then
rsync -azR --delete --password-file= ${rsync_passwd_file} $( dirname ${ INO_FILE} ) ${user} @${ip1} ::${des} > /dev/null 2> & 1
fi
if [ [ $INO_EVENT = ~ 'ATTRIB' ] ]
then
if [ ! -d "$INO_FILE " ]
then
rsync -azcR --password-file= ${rsync_passwd_file} $( dirname ${ INO_FILE} ) ${user} @${ip1} ::${des} > /dev/null 2> & 1
fi
fi
done &
NFS 服务
一、什么是NFS
共享存储,文件服务器
1.基本概述
NFS是Network File System的缩写及网络文件系统。NFS主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS系统和Windows网络共享、网络驱动器类似, 只不过windows用于局域网, NFS用于企业集群架构中, 如果是大型网站, 会用到更复杂的分布式文件系统FastDFS,glusterfs,HDFS
2.为什么使用NFS
1.实现多台服务器之间数据共享
2.实现多台服务器之间数据一致
二、NFS应用
1.没有NFS时
1.A用户上传图片经过负载均衡,负载均衡将上传请求调度至WEB1服务器上。
2.B用户访问A用户上传的图片,此时B用户被负载均衡调度至WEB2上,因为WEB2上没有这张图片,所以B用户无法看到A用户传的图片。
2.如果有NFS
1.A用户上传图片无论被负载均衡调度至WEB1还是WEB2, 最终数据都被写入至共享存储
2.B用户访问A用户上传图片时,无论调度至WEB1还是WEB2,最终都会上共享存储访问对应的文件,这样就可以访问到资源了
3.NFS原理
vim /etc/exports
/data 172.16.1.0/24( rw,sync,all_squash)
1.用户访问NFS客户端,将请求转化为函数
2.NFS通过TCP/IP连接服务端
3.NFS服务端接收请求,会先调用portmap进程进行端口映射
4.Rpc.nfsd进程用于判断NFS客户端能否连接服务端;
5.Rpc.mount进程用于判断客户端对服务端的操作权限
6.如果通过权限验证,可以对服务端进行操作,修改或读取