ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

01rsync备份

2021-11-06 20:31:54  阅读:116  来源: 互联网

标签:rsync root 备份 01rsync web01 172.16 backup


rsync备份(备份服务器)

一、介绍备份的场景

1、什么情况下需要备份

一般数据比较重要的情况下,数据如果丢失很容易找不回来,建议备份

2、什么是备份

把重要的数据或者文件复制一份保存到另一个地方,实现不同主机之间的数据同步

3、为什么做备份

1、数据在公司是很重要的
2、备份就是为了恢复

4、备份工具

本地备份工具:cp
远程本分工具:scp   Rsync
scp : 全量备份
rsync : 增量备份

5、scp的格式

1、推数据:将本机的文件上传到其他服务器
scp [参数] [本机文件的路径] [远端服务器用户]@[远端服务器ip]:[远端服务器的路径]

2、拉数据:将其他服务器上的文件下载到本机
scp [参数] [远端服务器用户]@[远端服务器ip]:[远程主机的路径] [本机文件的路径]

3、scp参数
-p: 保留原文件的修改时间,访问时间和访问权限
-r: 递归复制整个目录
-l limit: 限定用户所能使用的带宽,以Kbit/s为单位


案例1、将db01服务器上的etc目录中所有的普通文件打包备份到rsync服务器上的/tmp目录上
[root@db01 ~]# tar -czPf /root/etc.tar.gz $(find /etc -type f)
[root@db01 ~]# scp /root/etc.tar.gz root@172.16.1.41:/tmp/
       
案例2、要求rsync服务器主动备份db服务器的/tmp目录中
[root@rsync ~]# scp root@172.16.1.51:/root/etc.tar.gz /tmp

案例3、要求备份etc.tar.gz文件,且时间尽可能不改变
[root@db01 ~]# scp -p /tmp/etc.tar.gz root@172.16.1.41:/tmp/

案例4、要求将root目录上传到rsync的/opt目录中
[root@db01 ~]# scp -r /root/ root@172.16.1.41:/opt/

 

二、介绍Rsync

1、简介
rsync是远程增量文件备份的工具。rsync简称叫做远程同步,可以实现不同主机之间的数据同步,还支持全量和增量

2、特性
1、支持拷贝特殊文件,如连接文件、设备等。
2、可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
3、可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。
4、可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。
5、可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。
6、可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****。
7、支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。

3、场景
cron + rsync :跟定时任务进行绑定
rsync + innotify :以守护进程的方式同步文件

 

三、Rsync的应用场景

1、备份方式

1、全量备份:将数据完整的复制一份保留
2、增量备份:备份上一次备份后新增的数据

2、rsync的传输方式

1、推:
客户端将数据从本地推送至服务端
2、拉:
客户端将数据从服务端拉取到本地

3、传输存在的问题

1、推的问题:当客户端服务器数量过多,容易造成数据推送缓慢
2、拉的问题:当客户端服务器数量过多,容易造成服务端压力过大

 

四、Rsync的传输模式

1、本地传输模式

1、格式
rsync [参数] [原来的路径] [现在的路径]

2、参数
-t 保持文件时间信息
-r 递归传输目录及子目录
-o 保持文件属主信息
-g 保持文件属组信息
-l 保留软连接
-a 归档模式传输 = -torpgDl
-p 保持文件权限
-D 保持设备文件信息
-P 显示同步的过程及传输时的进度等信息
-v 详细模式输出, 打印速率, 文件数量等
--bwlimit=100 限速传输
--password-file=xxx 使用密码文件
常用的参数组合:-avzP

案例1、将/tmp/etc.tar.gz上传到/mnt目录下
rsync /tmp/etc.tar.gz /mnt/

案例2、将/root目录传输到/mnt目录
rsync -r /root /mnt

2、远程传输模式

1、推数据
rsync [参数] [本地文件路径] [远端服务器用户]@[远端服务器ip]:[远端服务器的保存路径]

2、拉数据
rsync [参数] [远端服务器用户]@[远端服务器ip]:[远端服务器的文件路径] [本地保存文件路径]

案例1、将1.txt传输到db01服务器上的/opt目录
[root@rsync ~]# rsync -avzP 1.txt root@172.16.1.51:/opt/

案例2、要求rsync服务器主动备份1.txt到/tmp目录中
[root@rsync ~]# rsync -avzP root@172.16.1.41:/tmp/1.txt /tmp

3、以守护进程的方式

1)为什么使用守护进程模式

1、保证数据安全
2、数据归档

2)服务端rsync

1、编写rsync的守护进程的配置文件
1、编写配置文件
[root@rsync ~]# yum install rsync -y
#查找配置文件
[root@rsync ~]# rpm -qa rsync
[root@rsync ~]# vim /etc/rsyncd.conf
=============================================
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
logi file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup
==============================================


2、创建配置文件运行需要的环境
1、创建rsync的启动用户
[root@rsync ~]# useradd -r -M -s rsync /sbin/nologin
2、创建密码文件
[root@rsync ~]# touch /etc/rsync.passwd
3、创建用户和密码关联数据(一定不能有空格)
[root@rsync ~]# echo 'rsync_backup:123456'>/etc/rsync.passwd
4、授权密码文件
[root@rsync ~]# chmod 600 /etc/rsync.passwd
5、创建备份目录
[root@rsync ~]# mkdir /backup
6、将目录的用户权限修改成rsync
[root@rsync ~]# chown -R rsync.rsync /backup/
3、启动rsync服务
[root@rsync ~]# systemctl start rsyncd
4、验证启动
[root@rsync ~]# netstat -lntp | grep 873
[root@rsync ~]# ps -ef | grep rsync

3)客户端rsync

1、安装rsync
[root@db01 ~]# yum install rsync -y
2、创建认证密码文件
[root@db01 ~]# touch /etc/rsync.passwd
[root@db01 ~]# echo "123456" >/etc/rsync.passwd
3、授权密码文件
[root@db01 ~]# chmod 600 /etc/rsync.passwd
4、客户端推拉数据
方法一:自己输入密码
[root@db01 ~]# rsync -avzP 1.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd
方法二:添加环境变量
[root@db01 ~]# export RSYNC_PASSWORD=123456
[root@db01 ~]# rsync -avzP /opt/3.txt rsync_backup@172.16.1.41::backup
方法三:设置密码文件,运行时读取
[root@db01 ~]# rsync -avzP /opt/3.txt rsync_backup@172.16.1.41::backup

4、rsync常见报错

1.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backu@172.16.1.41::backup
Password:
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
#原因:1)虚拟用户的用户名或者密码错误,2)服务端密码文件权限不为600

2.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd
ERROR: password file must not be other-accessible
rsync error: syntax or usage error (code 1) at authenticate.c(196) [sender=3.1.2]
#原因:客户端密码文件权限不是600

3.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backu
@ERROR: Unknown module 'backu'
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
#原因:模块名字错误

4.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::/backup
ERROR: The remote path must start with a module name not a /
rsync error: error starting client-server protocol (code 5) at main.c(1649) [sender=3.1.2]
#原因:双冒号后面跟的是模块名字,而不是目录名字不要加/

5.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]
#原因:防火墙开启,没有配置防火墙规则
[root@backup ~]# firewall-cmd --add-port=873/tcp
success

6.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
rewriteip.sh
rsync: mkstemp ".rewriteip.sh.vx4Cry" (in backup) failed: Permission denied (13)

sent 207 bytes received 128 bytes 44.67 bytes/sec
total size is 194 speedup is 0.58
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
#原因:selinux没有关闭

7.报错内容:
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup
sending incremental file list
rsync: delete of stat xattr failed for "rewriteip.sh" (in backup): Permission denied (13)

sent 55 bytes received 114 bytes 338.00 bytes/sec
total size is 194 speedup is 1.15
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1179) [sender=3.1.2]
#原因:服务端备份目录权限不是rsync

8.报错内容
[root@web01 ~]# rsync -avz 1.txt rsync_backup@172.16.1.41::backup
rsync: failed to connect to 172.16.1.41 (172.16.1.41): Connection refused (111)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.2]
#原因:服务端服务没有启动

9.报错内容
[root@web01 ~]# rsync -avz 1.txt rsync_backup@10.0.0.41::backup
sending incremental file list
rsync: read error: Connection reset by peer (104)
rsync error: error in socket IO (code 10) at io.c(785) [sender=3.1.2]
#原因:服务端配置错误,导致启动问题

三、rsync备份案例

1、了解需求

客户端需求:
1、客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
2、客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
3、客户端最后将备份的数据进行推送至备份服务器
4、客户端每天凌晨1点定时执行该脚本
5、客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间

服务端需求:
1、服务端部署rsync,用于接收客户端推送过来的备份数据
2、服务端需要每天校验客户端推送过来的数据是否完整
3、服务端需要每天校验的结果通知给管理员
4、服务端仅保留6个月的备份数据,其余的全部删除

2、客户端需求

1)创建备份目录

[root@web01 ~]# mkdir /backup
[root@web01 ~]# hostname
web01
[root@web01 ~]# hostname -I
10.0.0.7 172.16.1.7
[root@web01 ~]# hostname -I | awk '{print $2}'
172.16.1.7
[root@web01 ~]# date +%F
2020-11-19

#结合信息创建目录
[root@web01 ~]# mkdir /backup/$(hostname)_$(hostname -I | awk '{print $2}')_$(date +%F)
[root@web01 ~]# mkdir /backup/`hostname`_`hostname -I | awk '{print $2}'`_`date +%F`

[root@web01 ~]# ll /backup/
drwxr-xr-x. 2 root root 6 Nov 19 10:00 web01_172.16.1.7_2020-11-19

2)打包数据

#打包
[root@web01 ~]# tar -zcf conf.tar.gz /var/log/messages
#移动
[root@web01 ~]# mv conf.tar.gz /backup/$(hostname)_$(hostname -I | awk '{print $2}')_$(date +%F)/

#或者使用下面方式

#直接打包到目录
[root@web01 ~]# tar zcPf /backup/$(hostname)_$(hostname -I | awk '{print $2}')_$(date +%F)/conf.tar.gz /var/log/messages

3)推送文件

[root@web01 ~]# rsync -avz /backup/ rsync_backup@172.16.1.41::backup
sending incremental file list
./
web01_172.16.1.7_2020-11-19/
web01_172.16.1.7_2020-11-19/conf.tar.gz

sent 124,299 bytes received 54 bytes 248,706.00 bytes/sec
total size is 130,519 speedup is 1.05

4)将以上步骤写成脚本

[root@web01 ~]# vim rsync_client.sh 
#!/bin/bash
#1、定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}

#2、创建备份目录
mkdir -p $SRC

#3、打包文件
tar zcPf $SRC/conf.tar.gz /var/log/messages

#4、推送文件
export RSYNC_PASSWORD=123456
rsync -az $DIR/ rsync_backup@172.16.1.41::backup

5)将脚本加入定时任务

[root@web01 ~]# crontab -e
#每天凌晨1点执行备份脚本
0 1 * * * /bin/bash /root/rsync_client.sh

6)只保留七天数据

#模拟到今天的数据
[root@web01 ~]# for i in {1..19};do date -s 2020/11/$i;sh rsync_client.sh;done

#删除七天前的数据
[root@web01 ~]# find /backup/ -type d -mtime +7 | xargs rm -rf

7)加入脚本

[root@web01 ~]# vim rsync_client.sh 
#!/bin/bash
#1、定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}

#2、创建备份目录
mkdir -p $SRC

#3、打包文件
tar zcPf $SRC/conf.tar.gz /var/log/messages

#4、推送文件
export RSYNC_PASSWORD=123456
rsync -az $DIR/ rsync_backup@172.16.1.41::backup

#5、删除七天之前的数据
find $DIR/ -type d -mtime +7 | xargs rm -rf

8)客户端先判断文件是否存在

[root@web01 ~]# vim rsync_client.sh 
#!/bin/bash
#1、定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}

#2、创建备份目录
[ -d $SRC ] || mkdir -p $SRC

#3、打包文件
[ -d $SRC/conf.tar.gz ] || tar zcPf $SRC/conf.tar.gz /var/log/messages

#4、推送文件
export RSYNC_PASSWORD=123456
rsync -az $DIR/ rsync_backup@172.16.1.41::backup

#5、删除七天之前的数据
find $DIR/ -type d -mtime +7 | xargs rm -rf

3、服务端需求

1)部署rsync服务端

2)客户端加入校验码操作

#!/bin/bash
#1、定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}

#2、创建备份目录
[ -d $SRC ] || mkdir -p $SRC

#3、打包文件
[ -d $SRC/conf.tar.gz ] || tar zcPf $SRC/conf.tar.gz /var/log/messages

#4.生成校验码
md5sum $SRC/conf.tar.gz > $SRC/flag_$DATE

#5、推送文件
export RSYNC_PASSWORD=123456
rsync -az $DIR/ rsync_backup@172.16.1.41::backup

#6、删除七天之前的数据
find $DIR/ -type d -mtime +7 | xargs rm -rf

3)校验文件

[root@backup backup]# md5sum -c /backup/*_$(date +%F)/flag_2020-11-19

4)使用邮件发送消息

#1.服务端配置邮件功能
[root@backup ~]# yum install mailx -y
[root@backup ~]# vim /etc/mail.rc
set from=1426115933@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=1426115933@qq.com
set smtp-auth-password=pdaoywghqhxuggcg
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

#2.测试发送邮件
[root@backup backup]# mail -s "校验结果" 1426115933@qq.com < 1.txt

5)服务端脚本

[root@backup ~]# vim rsync_server.sh
#!/bin/bash
#1.定义变量
DIR=/backup
HOSTNAME=$(hostname)
IP=$(hostname -I | awk '{print $2}')
DATE=$(date +%F)
SRC=${DIR}/${HOSTNAME}_${IP}_${DATE}

#2.校验文件
md5sum -c $DIR/*_$DATE/flag_$DATE > $DIR/result.txt

#3.将校验结果发送给管理员邮箱
mail -s "$DATE备份文件 校验结果" 1426115933@qq.com < $DIR/result.txt &> /dev/null

#4.删除6个月之前的数据
find $DIR/ -type d -mtime +180 | xargs rm -rf

6)将服务脚本加入定时任务

[root@backup ~]# crontab -e
#服务端每天7点将校验备份结果发给管理员
0 7 * * * /bin/bash /root/rsync_server.sh

 

四、Rsync + inotify

inotify就是实时监控目录中文件中的变化

1、安装inotify(客服端)

[root@db01 ~]# yum install inotify -y

2、测试inotify监控目录命令

[root@db01 ~]# /usr/bin/inotifywait  -mrq  --format '%Xe  %w  %f' -e create,modify,delete,attrib,close_write  /tmp

另起一个db01服务器,在/tmp里执行操作,同时查看监控目录的变化

3、实时同步/tmp目录

[root@db01 ~]# inotifywait -mr --format "%Xe %w %f" -e modify,close_write,create,delete /tmp/ | while read line ;do  rsync -avzP /tmp/  rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd ; done

4、实时备份脚本编写

1)粗略版

[root@db01 ~]# vim rsyn-inotify.sh

DIR=/opt/
USERNAME=rsync_backup
IP="172.16.1.41"
MODULE=backup

inotifywait -mr --format "%Xe %w %f" -e modify,close_write,create,delete ${DIR} | while read line ;do rsync -avzP ${DIR} ${USERNAME}@${IP}::${MODULE} --password-file=/etc/rsync.passwd &>/dev/null; done

2)精油版

#!/bin/bash
src=/data
des=backup
rsync_passwd_file=/etc/rsync.passwd
ip1=172.16.1.41
user=rsync_backup
cd ${src}
/usr/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file
do
CREATE /backup/ 1.txt
INO_EVENT=$(echo $file | awk '{print $1}')
INO_FILE=$(echo $file | awk '{print $2}')        
if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]
then              
rsync -azcR --password-file=${rsync_passwd_file} ${INO_FILE} ${user}@${ip1}::${des}
fi
if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]        
then
rsync -azR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} >/dev/null 2>&1        
fi
if [[ $INO_EVENT =~ 'ATTRIB' ]]
then
if [ ! -d "$INO_FILE" ]
then
rsync -azcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip1}::${des} >/dev/null 2>&1
fi
fi
done &

5、常用参数

-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 事件
%w 目录
%f 文件
-e 指定监控的事件
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载

 

 

标签:rsync,root,备份,01rsync,web01,172.16,backup
来源: https://www.cnblogs.com/fengmo19970216/p/15518272.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有