Rsync数据同步备份
1、 Rsync 基础概述
Rsync是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份和增量备份,因此非常适合用于架构集中式备份或异地备份等应用。
Rsync官方地址:https://rsync.samba.org/
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客户端配置相同,唯一不同就是你需要备份的目录是什么。