Rsync备份服务小结
rsync命令
常用选项:
-a #归档模式传输, 等于-tropgDl -t -r -o -p -g -D -l
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--partial #断点续传
--password-file=xxx #使用密码文件
----------------------------------------------------------------------------
--bwlimit=100kb #限速传输单位默认是kb (不用z选项)
[root@web01 /tmp]# rsync -avP --bwlimit 100 /tmp/ rsync_backup@172.16.1.41::backup
sending incremental file list
./
data.txt
5,537,792 1% 100.04kB/s
---------------------------------------------------------------------------
--delete #让目标目录和源目录数据保持一致(不用*)放前后皆可
#推:数据与推送数据的源数据一致
[root@web01 /tmp]# rsync -avP --delete /tmp/ rsync_backup@172.16.1.41::backup
sending incremental file list
deleting file2
deleting file1
sent 223 bytes received 43 bytes 532.00 bytes/sec
total size is 0 speedup is 0.00
rsyncd备份案例
#客户端需求
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/主机_IP_时间
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/主机_IP_时间
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
#服务端需求
1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
客户端需求解析
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/主机_IP_时间
[root@web01 ~]# mkdir -p /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`
2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/主机_IP_时间
[root@web01 ~]# cd /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`
[root@web01 /backup/web01_172.16.1.7_2020-08-12]# tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null
3.客户端最后将备份的数据进行推送至备份服务器
生成校验码
[root@web01 ~]# md5sum /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`/conf.tar.gz > /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`/check.md5
文件推送检查
[root@web01 ~]# rsync -avz /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`/ rsync_backup@172.16.1.41::backup --password-file=/etc/rsyncd.passwd
4.客户端每天凌晨1点定时执行该脚本
[root@web01 ~]# crontab -e 编写任务
#每天凌晨1点进行文件备份
00 01 * * * /bin/bash /scripts/backup.sh &> /dev/null
[root@web01 ~]# crontab -l 检查任务
#每天凌晨1点进行文件备份
00 01 * * * /bin/bash /scripts/backup.sh &> /dev/null
5.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
[root@web01 ~]# find /backup/ -type d -mtime +7 | xargs rm -rf
服务端需求解析
1.服务端部署rsync,用于接收客户端推送过来的备份数据
[root@web01 ~]# yum install -y rsyncd
[root@web01 ~]# echo '123456' > /etc/rsync.passwd
[root@web01 ~]# cat /etc/rsync.passwd
[root@web01 ~]# chmod 600 /etc/rsync.passwd
[root@web01 ~]# systemctl start rsyncd
[root@web01 ~]# netstat -lntp
[root@web01 ~]# ps aux | grep rsync // ps -ef | grep rsync
2.服务端需要每天校验客户端推送过来的数据是否完整
md5sum -c /backup/*_`date +%F`/check.md5 > /backup/result.txt
3.服务端需要每天校验的结果通知给管理员
[root@backup ~]# yum install -y mailx
[root@backup ~]# vim /etc/mail.rc
--------------------------------------------
set from=xxx@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
----------------------------------------------
[root@backup ~]# mail -s '备份数据完整校验' xxx@qq.com < /backup/result.txt
4.服务端仅保留6个月的备份数据,其余的全部删除
[root@backup ~]# find /backup/ -type d -mtime +180 |xargs rm -rf
rsync双端服务配置
客户端配置
1>#启动rsyncd服务
# 安装rsyncd,rsync守护进程
[root@backup ~]# yum install -y rsyncd
#创建目录
[root@backup ~]# mkdir /backup
# 创建密码文件
[root@backup ~]# echo '123456' > /etc/rsyncd.passwd
[root@backup ~]# cat /etc/rsyncd.passwd
123456
# 将密码文件的权限改成600
[root@backup ~]# chmod 600 /etc/rsyncd.passwd
# 启动rsync
[root@backup ~]# systemctl start rsyncd
# 检查启动情况
[root@backup ~]# netstat -lntup | grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1149/rsync
tcp6 0 0 :::873 :::* LISTEN 1149/rsync
[root@backup ~]# ps aux | grep rsync
root 1149 0.0 0.1 114748 1124 ? Ss 02:54 0:00 /usr/bin/rsync --daemon --no-detach
2>#写脚本
[root@web01 ~]# vim /scripts/backup.sh
#!/bin/bash
#1.定义变量
MOD=/backup
HOST=`hostname`
IP=`hostname -I | awk '{print $2}'`
DATE=`date +%F`
DIR=${MOD}/${HOST}_${IP}_${DATE}
#2.创建目录
mkdir -p $DIR
#3.进到目录下并打包本地文件到当前目录
cd $DIR
tar zcf conf.tar.gz /etc/passwd /var/log/messages &> /dev/null
#4.对文件生成验证文件
md5sum $DIR/conf.tar.gz > $DIR/check.md5
#5.定义环境变量 并推送数据($DIR包括目录本身,$DIR/ 推目录下的全部文件不包括目录本身)
export RSYNC_PASSWORD=123456
rsync -avz $DIR rsync_backup@172.16.1.41::backup
#6.清理数据
find $MOD -type d -mtime +7 | xargs rm -rf
3>#定时任务
#客户端每天凌晨1点定时执行该脚本
[root@web01 ~]# crontab -e
#每天凌晨1点定时执行该脚本
00 01 * * * /bin/bash /scripts/backup.sh &> /dev/null
#定时任务检查
[root@web01 ~]# crontab -l
服务端配置
1>#配置rsyncd服务
# 安装rsyncd,rsync的守护进程
[root@backup ~]# yum install -y rsyncd
# 写配置文件
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = gjs_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup
# 创建rsync用户
[root@backup ~]# useradd rsync -M -s /sbin/nologin
# 创建备份的目录
[root@backup ~]# mkdir /backup
# 给目录的属主和属组改成rsync
[root@backup ~]# chown rsync.rsync /backup/
# 创建密码文件
[root@backup ~]# echo 'gjs_backup:123456' > /etc/rsync.passwd
[root@backup ~]# cat /etc/rsync.passwd
gjs_backup:123456
# 将密码文件的权限改成600
[root@backup ~]# chmod 600 /etc/rsync.passwd
# 启动rsync
[root@backup ~]# systemctl start rsyncd
# 检查启动情况
[root@backup ~]# netstat -lntup | grep rsync
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 1149/rsync
tcp6 0 0 :::873 :::* LISTEN 1149/rsync
[root@backup ~]# ps aux | grep 'rsync'
root 1149 0.0 0.1 114748 1124 ? Ss 02:54 0:00 /usr/bin/rsync --daemon --no-detach
2>#安装并配置邮件服务
#安装邮箱
[root@backup ~]# yum install -y mailx
#编辑邮件系统
[root@backup ~]# vim /etc/mail.rc
set from=xxx@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
3>#编写服务端脚本
# 写脚本文件
[root@backup ~]# vim /root/check.sh
#!/bin/bash
# 1.定义模块目录变量
MOD=/backup
DATE=`date +%F`
DIR=${MOD}/*_${DATE}
# 2.服务端需要每天校验客户端推送过来的数据是否完整
md5sum -c $DIR/check.md5 >> $MOD/result.txt
# 3.服务端需要每天校验的结果通过QQ邮箱通知
mail -s '校验备份数据完整性' xxx@qq.com < $MOD/result.txt
# 4.服务端仅保留6个月的备份数据,其余的全部删除
find $MOD/ -type d -mtime +180 |xargs rm -rf
4>#定时任务
# 写定时任务
[root@backup ~]# crontab -e
00 01 * * * /bin/bash /scripts/check.sh &>/dev/null
[root@backup ~]# crontab -l
00 01 * * * /bin/bash /scripts/check.sh &>/dev/null