Rsync数据同步备份
1、 rsync 基础概述
rsync是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份和增量备份,因此非常适合用于架构集中式备份或异地备份等应用。
rsync官方地址:
rsync监听端口:873
rsync运行模式:c/s
rsync常见的两种备份方式
1. 完全备份
2. 增量备份
rsync优点:
1. 支持增量备份,第一次全量备份,第二次增量备份:边复制,边比较,边统计,传输效率很高。
2. 数据集中备份,客户端可以推送数据至服务端,也可以从服务端获取数据,以客户端为参照物。保持文件属性,符号链接,硬链接,权限,时间等。
3. 安全方式传输,rsync本身不对不对数据加密,使用ssh作为传输端口。
4. 指定排除文件,排除无需同步的文件或目录。
5. 进程方式同步,rsync运行在c/s架构,通过进程方式传输文件或数据。
rsync缺点:
1. 大量小文件同步会比较慢,需要比对较长时间,有可能会造成rsync进程停止。
解决思路:将小文件进行打包,然后在同步,减少比对时间,传输效率提高。
2. 同步大文件会出现中断情况,而且长时间同步会造成网络资源被耗尽。
解决思路:配置限速同步,未同步完之前修改为隐藏文件,同步完成后修改为正常文件。
解析
假设客户端上有 file1 file2 file3文件,服务端上有file1文件,现要将客户端上的数据备份至服务端
2、 rsync 应用场景
1. 推:所有主机推送本地数据至rsync备份服务器,会导致数据同步缓慢(适合少量数据备份)
2.拉:rsync备份服务器拉取所有主机上的数据,会导致备份服务器开销过大
3.大量服务器备份场景
4.异地备份场景
3、 rsync 命令讲解
rysnc命令格式
rsync [option...] src... [user@]host::dest
rsync [option...] src... rsync:#[user@]host[:port]/dest
rsync常⽤选项:
参数选项 |
选项说明 |
-a |
归档模式传输,等于 -tropgdl |
-v |
详细模式输出,打印速率,文件数量等 |
-z |
传输时进行压缩以提高效率 |
-r |
递归传输目录及子目录,即目录下得所有目录都同样传输 |
-t |
保持文件时间信息 |
-o |
保持文件属主信息 |
-p |
保持文件权限 |
-g |
保持文件属组信息 |
-l |
保留软链接 |
-p |
显示同步的过程及传输时的进度等信息 |
-d |
保持设备文件信息 |
-l |
保留软链接指向的目标文件 |
-e |
使用的信道协议,指定替代rsh的shell程序 |
--exclude=pattern |
指定排除不需要传输的文件模式 |
--exclude-from=file |
文件名所在的目录文件 |
--bwlimit=100 |
限速传输 |
--partial |
断点续传 |
--delete |
让目标目录和源目录数据保持一致 |
rsync大致使用三种主要的数据传输方式
-
本地传输
-
远程通道传输
-
守护进程传输
4、 rsync 传输模式
1. 本地传输 local
语法:
access via remote shell:
pull: rsync [option...] [user@]host:src... [dest]
push: rsync [option...] src... [user@]host:dest
命令 选项 源文件 目标文件
实例:
[root@rsync-servre ~]# rsync /etc/passwd /tmp/
# 命令
2. 远程通道传输 remote shell
语法:拉取远端数据⾄本地(下载)
access via remote shell:远程传输
pull: rsync [option...] [user@]host:src... [dest](下载)
push: rsync [option...] src... [user@]host:dest(上传)
远程方式存在的缺陷:
1. 需要使用系统用户(不安全)
2. 使用普通用户(权限不足)
3. 需要走ssh协议
3. 守护进程传输 daemon(服务,持续后台运行)
语法:
access via rsync daemon:守护进程方式传输
pull: rsync [option...] [user@]host::src... [dest](下载)
push: rsync [option...] src... [user@]host::dest(上传)
一、项目需求:
已知3台服务器主机名分别为web、nfs、rsync,主机信息见下表:
服务器角色 | 外网ip(nat) | 内网ip(lan) | 主机名 |
rsync服务器 | ens33:192.168.1.232 | ens37:172.16.30.30 | rsync_server |
web服务器 | ens33:192.168.1.233 | ens37:172.16.30.20 | web_server |
nfs服务器 | ens33:192.168.1.234 | ens37:172.16.30.10 | nfs_server |
具体要求如下:
每天晚上01点整在web服务器上打包备份系统配置文件、日志文件、其他目录并通过rsync命令推送备份服务器backup上备份保留,所有服务器在本地按日期打包,然后再推到备份服务器backup上。
1. 所有服务器的备份目录必须都为/backup。
2. 备份的系统配置文件包括但不限于;
3. web服务器本地保留最近7天的数据,避免浪费磁盘空间
4. rsync备份服务器上,其它要保留6个月的数据副本。
5. 客户端服务器推送数据,以主机名_ip地址_当前时间作为目录,所有的备份数据存放至该目录下rsync_server_172.16.30.30_2019-04-06/
6. 确保备份的数据完整,在备份服务器上对备份的数据进行检查,把备份的成功及失败结果信息发送到系统管理员邮箱中。
7. 真实工作中除了服务器之间备份,可能还会需要异地备份,这个地方请大家思考如何异地备份。
二、需求分析:
1、客户端需求:
1. 客户端每天凌晨1点在服务器本地打包备份(系统配置文件、日志文件、其他目录、应用配置等文件);
2. 客户端备份的数据必须打包存放在主机名_ip地址_当前时间命名的目录中;
3. 客户端对打包数据进行添加标记信息;
4. 客户端最后推送到本地已打包好的备份文件至rsync备份服务器上;
5. 客户端服务器本地保留最近7天的数据,避免浪费磁盘空间。
2、服务端需求:
1. 服务端部署配置邮件服务;
2. 服务端部署rsync服务,用于接收客户端推送过来的备份数据;
3. 服务端需要每天校验客户端推送过来数据的完整性;
4. 服务端需要每天校验的结果以邮件的形式通知给管理员;
5. 服务端本地仅仅保留180天备份数据,其余的全部删除;
注意:所有服务器的备份目录必须都为/backup
三、操作步骤:
1、服务端配置
1. 同步服务器时间
[root@rsync_server ~]# ntpdate ntp.aliyun.com
2. 配置邮件服务器
2.1 安装邮件软件
[root@rsync_server ~]# yum -y install mailx
2.2 配置邮箱发件服务器
[root@rsync_server ~]# vim /etc/mail.rc
set from=912905986@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=912905986@qq.com
set smtp-auth-password=dkmcmgeovuebbe
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/
1.3 发送邮件测试发件服务器是否配置成功
[root@rsync_server ~]# mail -s "123" 912905986@qq.com </etc/hosts
1.4 打开邮箱查看是否收到邮件
3. 安装rsync软件
[root@rsync_server ~]# yum -y install rsync
4. 配置rsync服务
##rsyncd.conf start##
uid = rsync
gid = rsync
port = 873
use chroot = no
max connections = 2000
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
address = 172.16.30.30
hosts allow = 172.16.30.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path = /backup
comment = rsync server backup
5. 创建rsync用户不创建家目录,不允许其登陆
[root@rsync_server ~]# useradd -m -s /sbin/nologin rsync
[root@rsync_server ~]# id rsync
6. 创建备份目录(尽可能磁盘空间足够大),授权rsync用户为属组
[root@rsync_server ~]# mkdir /backup
[root@rsync_server ~]# chown rsync:rsync /backup/
[root@rsync_server ~]# ll / |grep backup
7. 创建虚拟用户和密码,并赋予600权限
[root@rsync_server ~]# echo "rsync_backup:123" >> /etc/rsync.password
[root@rsync_server ~]# chmod 600 /etc/rsync.password
[root@rsync_server ~]# ll /etc/ |grep rsync.password
8. 启动服务,并加入开机自启
[root@rsync_server ~]# systemctl start rsyncd
[root@rsync_server ~]# systemctl enable rsyncd
[root@rsync_server ~]# systemctl status rsyncd
9. 查看监听端口是否正常运行
[root@rsync_server ~]# netstat -lntp |grep rsync
10. 编写服务端脚本
[root@rsync_server ~]# vim /server/shell/server_rsync.sh
#!/bin/bash
#定义全局变量信息
export path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#定义本地变量信息
path=/backup
date=$(date +%f)
#查找flag文件,并对该文件进行校验,校验完毕的结果输出到md5_result_时间
find $path/*_${date} -type f -name "flag_${date}"|xargs md5sum -c >$path/md5_result_${date}
#检查校验输出的文件是否为空
if test -s $path/md5_result_${date}; then
#如果不为空则把校验后的结果发送邮件给管理员
mail -s "rsync backup ${date}" 912905986@qq.com <$path/md5_result_${date}
#如果不为空则给管理员发送校验文件为空
else
echo "校验文件输出文件为空,请您尽快处理" |mail -s "校验失败" 912905986@qq.com
fi
#删除超过七天的校验md5_result文件
find $path/ -type f -name "md5_result*" -mtime +7 |xargs rm -f
#删除超过180天的备份数据
find $path/ -type d -mtime +180 |xargs rm -rf
11. 添加到定时计划任务
[root@rsync_server ~]# crontab -e
30 6 * * * /usr/bin/sh /server/shell/server_rsync.sh
二、客户端配置
1. 同步服务器时间
[root@nfs ~]# ntpdate ntp.aliyun.com
2. 安装rsync软件
[root@nfs ~]# yum -y install rsync
3. 编写脚本
[root@nfs ~] vim rsync_crond_backup.sh
#!/bin/bash
export path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
#定义变量信息
host=$(hostname)
addr=$(ifconfig ens37 |awk 'nr==2{print $2}')
date=$(date +%f)
dest=${host}_${addr}_${date}
path=/backup
#创建备份目录
mkdir -p $path/$dest
#备份对应的文件
cd / && \
/usr/bin/tar -czf $path/$dest/system_$date.tar.gz etc/fstab etc/rsyncd.conf &&\
/usr/bin/tar -czf $path/$dest/log_$date.tar.gz var/log/messages var/log/secure &&\
#生成md5验证信息
md5sum $path/$dest/*.tar.gz > $path/$dest/flag_$date &&\
#推送本地数据到rsync服务端
export rsync_password=1
rsync -az $path/ rsync_backup@172.16.30.30::backup &&\
#配置本地保留7天数据
find $path/ -type d -mtime +7|xargs rm -rf
4. 配置定时计划任务
[root@nfs ~]# crontab -e
10 1 * * * /usr/bin/sh /root/rsync_crond_backup.sh
web 客户端配置与nfs客户端配置相同,唯一不同就是你需要备份的目录是什么。