rsync简介
Rsync(Remote Synchronization)是一款开源的,快速的,多功能的,可实现全量和增量的本地或远程数据同步备份的优秀工具.可实现cp,scp,rm,增量备份等功能
优点
- 同步时能够完整的保留数据目录结构、权限、时间、软硬链接等
- 能够实现增量同步, 每一次同步只会同步发生过改变的数据
- 文件传输效率高
- 支持匿名传输
- 无须特殊权限即可安装
- 支持流控制, 可以精确同步速度和使用的带宽大小
语法
Local: rsync [OPTION...] SRC... [DEST]
Access via remote shell:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
常用选项:
-v, --verbose 显示详细的传输信息
-a, --archive 归档模式, 等于 -rlptgoD
-r, --recursive 递归复制目录
-t, --times 保持文件属性信息时间信息不变(修改时间)
-o, --owner 保持文件属主信息不变
-g, --group 保持文件属组信息不变
-p, --perms 保持文件权限信息不变
-D, 保持设备文件信息不变
-l, --links 保持链接文件属性不变
-L, 保持链接文件数据信息不变
-P, 保留那些因故没有完全传输的文件, 以加快随后的再次传输,可看到传输进度
--exclude=PATTERN 排除指定数据不被传输
--exclude-from=file 排除指定数据不被传输(批量排除)
--bwlimit=RATE 显示传输的速率 100Mb/8=12.5MB
--delete 删除 DST 上 SRC 不存在的数据
备份服务器rsync守护进程配置
-
下载安装软件
rpm -qa|grep rsync yum install -y rsync
-
编写配置文件
#查看帮助文档 man rsyncd.conf vim /etc/rsyncd.conf #参数说明 uid = rsync # 指定管理备份目录的用户 gid = rsync # 指定管理备份目录的用户组 port = 873 # 定义rsync备份服务的网络端口号 fake super = yes # 将rsync虚拟用户伪装成为一个超级管理员用户 use chroot = yes # 和安全相关的配置 max connections = 200 # 最大连接数 同时只能有200个客户端连接到备份服务器 timeout = 300 # 超时时间(单位秒) pid file = /var/run/rsyncd.pid # 记录进程号信息 lock file = /var/run/rsync.lock # 锁文件 log file = /var/log/rsyncd.log # rsync服务的日志文件 用于排错分析问题 ignore errors # 忽略传输中的简单错误 read only = false # 指定备份目录是可读可写 list = false # 使客户端可以查看服务端的模块信息 hosts allow = 172.16.1.0/24 # 允许传输备份数据的主机(白名单) hosts deny = * # 禁止传输备份数据的主机(黑名单) auth users = rsync_backup # 指定认证用户 secrets file = /etc/rsync.password # 指定认证用户密码文件 用户名称:密码信息(密码长度在8位一下,权限必须是600) [backup] # 模块信息 comment = "backup dir " path = /backup # 模块中配置参数 指定备份目录
-
创建rsync服务的系统用户
useradd -r rsync
-
创建备份服务认证密码文
echo "rsync_backup:123456" >/etc/rsync.password chmod 600 /etc/rsync.password
-
创建备份目录并修改属主属组信息
mkdir /backup chown -R rsync.rsync /backup/
-
启动备份服务
systemctl start rsyncd systemctl enable rsyncd systemctl status rsyncd
-
防火墙设置
firewall-cmd --add-service rsyncd
备份实战
客户端脚本(172.16.1.41)
#!/bin/bash
#设置本机的备份目录
backup_dir="/backup"
ip_addr=$(hostname -i)
#创建备份目录
if [[ ! -d "/$backup_dir/$ip_addr" ]]; then
mkdir -p /$backup_dir/$ip_addr
fi
cd /
#创建备份压缩包,包括:
#定时任务服务的配置文件(/var/spool/cron/root)、开机自启动的配置文件(/etc/rc.local)、
#日常脚本的目录(/server/scripts)、防火墙iptables的配置文件(/etc/sysconfig/iptables)
tar zchf /$backup_dir/$ip_addr/system_backup_$(date +%F_week%w).tar.gz ./var/spool/cron/root ./etc/rc.local ./server/scripts ./etc/sysconfig/iptables-config
#删除7天以前的备份
find $backup_dir/ -type f -mtime +7 -exec rm -rf {} \;
#生成文件指纹校验结果文件
find $backup_dir/ -type f -mtime -1 ! -name "finger*" -exec md5sum {} > $backup_dir/$ip_addr/finger.txt \;
#传输到备份服务器
rsync -avz /backup/ [email protected]::backup --password-file=/etc/rsync.password
写入定时任务
crontab -e
0 0 * * * /bin/bash /server/scripts/client_backup.sh >/dev/null 2>&1
服务端脚本(172.16.1.31)
#!/bin/bash
#删除半年前除每周一之外的备份
find /backup/ -type f -mtime +180 ! -name "*week1.tar.gz" -exec rm -rf {} \;
#校验文件的完整性
find /backup/ -type f -name "finger.txt" -exec md5sum -c {} \; >/tmp/check.txt
#校验结果发送到邮箱
mail -s "check into $(date +%F)" [email protected] </tmp/check.txt
写入服务端定时任务
crontab -e
0 5 * * * /bin/sh /server/scripts/backup_server.sh &>/dev/null
服务端邮箱配置方法
这里我们用163邮箱作为代理,首先要进行如下设置
开启IMAP/SMTP服务,获取授权码
备份服务器配置
yum install mailx -y
vim /etc/mail.rc #找不到就是没有安装mailx
#在末尾加入
set from=邮箱地址@163.com smtp=smtp.163.com
set smtp-auth-user=邮箱地址@163.com smtp-auth-password=授权码 smtp-auth=login