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文件,现要将客户端上的数据备份至服务端

Rsync数据同步备份_第1张图片

Rsync数据同步备份_第2张图片

2、 Rsync 应用场景

1. 推:所有主机推送本地数据至Rsync备份服务器,会导致数据同步缓慢(适合少量数据备份)

Rsync数据同步备份_第3张图片

2.拉:Rsync备份服务器拉取所有主机上的数据,会导致备份服务器开销过大

Rsync数据同步备份_第4张图片

3.大量服务器备份场景

Rsync数据同步备份_第5张图片

4.异地备份场景

Rsync数据同步备份_第6张图片

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大致使用三种主要的数据传输方式

  1. 本地传输

  2. 远程通道传输

  3. 守护进程传输

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)

主机名

Web服务器

ens33:192.168.1.232

ens37:172.16.30.10

web

NFS服务器

ens33:192.168.1.233

ens37:172.16.30.20

nfs

Rsync服务器

ens33:192.168.1.234

ens37:172.16.30.30

rsync_servr







具体要求如下:每天晚上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 [email protected]

set smtp=smtps://smtp.qq.com:465

set [email protected]

set smtp-auth-password=dkmcmgeovuebg

set smtp-auth=login

set ssl-verify=ignore

set nss-config-dir=/etc/pki/nssdb/

1.3 发送邮件测试发件服务器是否配置成功

[root@rsync_server ~]# mail -s "123" [email protected]

1.4 打开邮箱查看是否收到邮件

Rsync数据同步备份_第7张图片

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}" [email protected] <$Path/MD5_result_${Date}

#如果不为空则给管理员发送校验文件为空

else

echo "校验文件输出文件为空,请您尽快处理" |mail -s "校验失败" [email protected]

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/ [email protected]::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客户端配置相同,唯一不同就是你需要备份的目录是什么。