欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

Rsync数据同步备份

程序员文章站 2023-02-22 20:47:26
1、 Rsync 基础概述 Rsync是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份和增量备份,因此非常适合用于架构集中式备份或异地备份等应用。 Rsync官方地址:https://rsync.samba.org/ Rsync监听端口:873 Rsync运行模式:C/S 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文件,现要将客户端上的数据备份至服务端

Rsync数据同步备份

Rsync数据同步备份

 

2、 rsync 应用场景

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

 Rsync数据同步备份

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

 Rsync数据同步备份

3.大量服务器备份场景

 Rsync数据同步备份

4.异地备份场景

 Rsync数据同步备份

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) 主机名
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 打开邮箱查看是否收到邮件

 Rsync数据同步备份

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