Rsync备份服务实战-程序员宅基地

技术标签: shell  运维  开发工具  

Rsync备份服务实战

一、Rsync

rsync是一款开源、快速、多功能、可实现全量及增量的本地或远程数据同步备份的优秀工具。rsync软件适用于Unix/linux/Windows等多种操作系统平台。

1.rsync 简介

rsync英文称为remote synchronizetion,从软件的名称就可以看出来,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及曾量的复制数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。

在同步数据的时候,默认情况下,rsync通过其独特的“quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可根据权限、属主等属性的变化同步,但是需要制定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可是实现快速的同步备份数据。

rsync官方地址:TP

rsync监听端口:873

rsync运行模式:C/S

client/server

客户端/服务端

小提示:利用rsync还可以实现删除文件和目录的功能,这又相当于rm命令,一个rsync相当于scp、cp、rm,但是还优于他们的每一个命令。

2.Rsync的特性

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

3.生产场景架构集群备份方案

1.借助cron+rsync把所有客户服务器数据同步到备份服务器。
2.针对公司重要数据备份混乱状况和领导提出备份全网数据的解决方案。
3.通过本地打包备份,然后rsync结合inotify应用把全网数统一备份到一个固定存储服务器,然后在存储服务器上通过脚本检查并报警管理员备份结果。
4.定期将IDC机房的数据 备份公司的内部服务器,防止机房地震及火灾问题导致数据丢失。
5.实时同步,解决存储服务器等的单点问题。

4.备份的类型

  1. 完全备份 :将数据全部备份下来
  2. 增备 : 全备之后新增的数据,备份下来
  3. 差异备份

二、rsync的应用场景

1.Rync的数据同步模式

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

1689287-20190808204807299-609750031.png

  1. 拉: rsync备份服务端拉取所有主机上的数据,会导致备份服务器开销大
    1689287-20190808204826218-1374207788.png

  2. 大量数据备份场景
    1689287-20190808204842764-44355969.png

  3. 异地备份
    1689287-20190808204858507-1339955594.png

2.rsync的三种模式

1.本地方式

​ 单个主机本地之间的数据传输(类似于cp命令,但没有cp速度快)

​ [root@web01 ~]# rsync /etc/b.txt /tmp/

#本地拷贝数据命令
Local:  rsync [OPTION...] SRC... [DEST]
    
#本地拷贝数据示例
[root@backup ~]# rsync  -avz  /etc/passwd  /tmp/
rsync       #备份命令(cp)
[options]   #选项
SRC...      #本地源文件
[DEST]      #本地目标文件

2.远程传输方式

通过ssh通道传输数据,(类似于scp命令)

Access via remote shell:
#pull拉取数据命令,拉去的话,源放在后面,目标放到前面。
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]

#push推送数据命令
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
pull拉:
[root@web01 ~]# rsync -avz [email protected]:/tmp ./
push推:
[root@web01 ~]# rsync -avz /var [email protected]:/tmp/

注意: rsync不管是推还是拉,推送目录的时候带/和不带/

1.带/ :/etc/ 将etc目录下的所有内容,推过去(拉过来)

2.不带/:/etc 将etc目录整体推过去(拉过来)

3.守护进程传输方式(c/s结构)

rsync自身非常重要的功能(不使用系统用户,更加安全)

Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]

Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync -avz /data/ [email protected]::zls
主机名 外网IP 内网IP 角色
backup 10.0.0.41 172.16.1.41 服务端
web01 10.0.0.7 172.16.1.7 客户端

三、rsync配置服务端客户端

1.服务端配置backup

备份的服务器就是服务端,backup 就一定是服务端

备份的服务器就是服务端

1.服务端安装rsync

[root@backup ~]# yum -y install rsync

2.服务端,修改配置文件

[root@backup ~]# 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
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = welcome to oldboyedu backup!
path = /backup



#用户名
uid = rsync(推得时候)
#用户组
gid = rsync
#端口
port = 873
#无需让rsync以root身份运行
fake super = yes
#禁锢目录,不允许操作指定目录之外的目录
use chroot = no
#最大连接数200
max connections = 200
#超时时间600s 10分钟
timeout = 600
#忽略错误
ignore errors
#关闭只读
read only = false
#不允许查看模块信息
list = false
#认证用户
auth users = rsync_backup
#认证用户的密码文件
secrets file = /etc/rsync.passwd
#日志文件
log file = /var/log/rsyncd.log
#####################################
#模块(任意名字都可以)
[zls]
#注释信息(无关紧要)
comment = welcome to oldboyedu backup!
#路径
path = /backup

2.服务端(backup),创建用户,创建一个用来运行rsync服务的用户身份

#检查用户是否存在
[root@backup ~]# id rsync
id: rsync: no such user

#创建用户(不允许登录,不创建家目录)
[root@backup ~]# useradd rsync -s /sbin/nologin -M
-s:指定登录的shell
-M:不创建家目录

3.服务端,创建一个备份目录

[root@backup ~]# mkdir /backup
#授权rsync用户
[root@backup ~]# chown -R rsync.rsync /backup/

4.服务端,创建虚拟用户及密码文件

#创建用户名和密码文件
[root@backup ~]# vim /etc/rsync.passwd
rsync_backup:123456
#授权
[root@backup ~]# chmod 600 /etc/rsync.passwd

5.服务端,启动rsync添加开机自启

[root@backup ~]# ll /usr/lib/systemd/system/rsyncd.service 
-rw-r--r-- 1 root root 237 Apr 26 01:17 /usr/lib/systemd/system/rsyncd.service
#启动rsyncd守护进程
[root@backup ~]# systemctl start rsyncd
#允许开机自启
[root@backup ~]# systemctl enable rsyncd

2.客户端配置web01,nfs

1.安装rsync

[root@web01 ~]# yum install -y rsync

2.创建虚拟用户的密码文件

#创建用户密码文件,主要针对写脚本 ,两种方法:
1. [root@web01 ~]# vim /etc/rsync.pass
123456
或者
2. [root@web01 ~]# echo 123456 >  /etc/rsync.pass
#免交互模式
rsync -avz --password-file =/etc/rsync.txt /etc  [email protected]::backup
#脚本方式(推荐使用)
[root@web01 ~]# export RSYNC_PASSWORD=zls

#授权
[root@web01 ~]# chmod 600 /etc/rsync.pass

四、rsync实战

实战一

[root@web01 ~]# mkdir /data
[root@web01 ~]# cd /data
[root@web01 data]# touch file{1..100}
[root@web01 data]# ll

推:

[root@web01 ~]# rsync -avz /data/ [email protected]::zls

拉:

[root@web01 ~]# rsync -avz [email protected]::zls /root/

报错解决方法:

  1. auth failed on module [zls]
解决
1.客户端密码文件:600权限

2.服务端密码文件:600权限

3.客户端密码文件中,只写密码,不写用户

4.服务端密码文件中,用户:密码
  1. 服务端的/backup目录权限不是 rsync
chown -R rsync.rsync /backup

认证失败:

1.先检查配置文件:服务端:/etc/rsyncd.conf

[模块]

2.检查服务端,/etc/rsync.passwd文件的权限是不是600

3.再检查服务端,/etc/rsync.passwd文件的内容,是不是 用户名:密码

​ rsyncd.conf 里的 rsync_backup

4.再检查客户端,/etc/rsync.pass 权限600

5./etc/rsync.pass 内容只写密码

6.修改完配置文件要重启服务,[backup] [zls]

systemctl restart rsyncd

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                    #让目标目录和源目录数据保持一致
--password-file=xxx         #使用密码文件

rsync无差异同步

rsync -avz --delete  [email protected]::zls  /data

rsync限速

rsync -avz --bwlimit=1024 /etc [email protected]::zls

客户端需求

1.客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02

#实现第一部分内容,将备份的数据目录创建出来
[root@web01 ~]# vim rsync.sh 
#!/bin/bash
H=`hostname`
IP=`ifconfig eth1|awk 'NR==2{print $2}'`
DATE=`date +%F`
SRC=${H}_${IP}_${DATE}
mkdir -p /backup/$SRC


[root@web01 ~]# sh rsync.sh 
[root@web01 ~]# ll /backup/
total 0
drwxr-xr-x 2 root root 6 Aug  2 19:00 web01_172.16.1.7_2019-08-02

2.客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02

#!/bin/bash

H=`hostname`
IP=`ifconfig eth1|awk 'NR==2{print $2}'`
DATE=`date +%F`
SRC=${H}_${IP}_${DATE}
mkdir -p /backup/$SRC

tar zcf /backup/${SRC}/conf_${DATE}.tar.gz /var/log/messages /etc/passwd /etc/gshadow /etc/shadow /etc/group &>/dev/null

3.客户端最后将备份的数据进行推送至备份服务器

#!/bin/bash

H=`hostname`
IP=`ifconfig eth1|awk 'NR==2{print $2}'`
DATE=`date +%F`
SRC=${H}_${IP}_${DATE}
export RSYNC_PASSWORD=123456

mkdir -p /backup/$SRC

tar zcf /backup/${SRC}/conf_${DATE}.tar.gz /var/log/messages /etc/passwd /etc/gshadow /etc/shadow /etc/group &>/dev/null

rsync -avz /backup/$SRC [email protected]::zls

测试命令:

[root@web01 ~]# for n in `seq -w 30`;do date -s "201908$n";sh rsync.sh;done

4.客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

H=`hostname`
IP=`ifconfig eth1|awk 'NR==2{print $2}'`
DATE=`date +%F`
SRC=${H}_${IP}_${DATE}
export RSYNC_PASSWORD=123456

mkdir -p /backup/$SRC

tar zcf /backup/${SRC}/conf_${DATE}.tar.gz /var/log/messages /etc/passwd /etc/gshadow /etc/shadow /etc/group &>/dev/null

md5sum /backup/${SRC}/conf_${DATE}.tar.gz > /backup/res.txt

rsync -az /backup/ [email protected]::zls

find /backup/ -type d -mtime +7 |xargs rm -fr

5.客户端每天凌晨1点定时执行该脚本

[root@web01 ~]# crontab -e
#每天凌晨一点备份重要数据 By:gjy  At:2019-08-07
00 01 * * * /bin/sh /root/rsync.sh &>/dev/null

服务端需求

1.服务端部署rsync,用于接收客户端推送过来的备份数据
2.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员

#安装mailx
yum install -y mailx

#配置mail.rc
vim /etc/mail.rc

Shift + g

set [email protected]
set smtp=smtps://smtp.qq.com:465
set [email protected]
set smtp-auth-password=授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

4.服务端仅保留6个月的备份数据,其余的全部删除 check_md5.sh

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
H=`hostname`
IP=`ifconfig eth1|awk 'NR==2{print $2}'`
DATE=`date +%F`
SRC=${H}_${IP}_${DATE}

md5sum -c /backup/res.txt|mail -s "${DATE} check backup" [email protected]

find /backup -type d -mtime +180|xargs rm -fr

编写定时任务:crontab -e

#xxx by:zls at:xx
01 00 * * * /bin/sh /root/check_md5.sh &>/dev/null

转载于:https://www.cnblogs.com/gongjingyun123--/p/11323754.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/andy09_2014/article/details/101352292

智能推荐

使用 arm-linux-androideabi-addr2line 工具定位 libunity.so 崩溃问题-程序员宅基地

文章浏览阅读710次,点赞13次,收藏7次。它的名称有点不同 - aarch64-linux-android-addr2line。尽管该实用程序的名称不包含单词arm,但它成功地解密了arm64-v8下的堆栈跟踪,并通常感知arm64-v8的字符。是 NDK 自带的调试工具,可以用来分析 so 崩溃时输出的的内存地址。之后就是通过 cmd 进入到这个路径。找到了 64 位所需的实用程序。_arm-linux-androideabi

javaweb-邮件发送_javaweb发送邮件-程序员宅基地

javaweb-邮件发送 摘要: 本文介绍了邮件传输协议(SMTP和POP3)以及电子邮件的发送和接收过程。还讨论了纯文本文件、带图片和附件的邮件发送方法,以及通过servlet方式注册邮箱和使用springboot框架发送邮件的实现。

element-ui table 设置表格滚动条位置_element table 滚动条位置-程序员宅基地

文章浏览阅读4.3k次,点赞6次,收藏11次。在切换不同页面时(被 keep-alive 缓存的组件间切换),页面中的element-ui table的滚动条位置没有停留在原来的位置。目前需要切换不同的页面返回来后,滚动条保持在原来的位置。_element table 滚动条位置

前端开发经验总结_属性值[session.getattribute("strpath")]引用["],在值内使用时必须-程序员宅基地

文章浏览阅读2.6k次。 我设置nowrap和不设置nowrap效果都一样。就是表格随着文字自动伸展,为什么? →回答问题:TD元素noWrap属性的行为与TD元素的width属性有关。 ◆如果未设置TD宽度,则noWrap属性是起作用的。◆如果设置了TD宽度,则noWrap属性是不起作用的。 http://www.blueidea.com/tech/web/2003/943.as_属性值[session.getattribute("strpath")]引用["],在值内使用时必须被转义。

JS如何把Object对象的数据输出到控制台中_前端怎么通过控制台查看字段取值-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏3次。 前端时间在编写程序时遇到这样一个问题,即在前端页面通过一些js框架自带的异步请求返回的数据类型为Object数据类型,笔者根据网上查阅到的资料,找到以下这种简单的方式://把Object类型转为Json数据格式,再通过console命令在控制台中打印出来console.log("xhr的值为:"+JSON.st..._前端怎么通过控制台查看字段取值

8.cc.Button组件使用详解_cc button.start-程序员宅基地

文章浏览阅读556次。1. cc.Button添加按钮的方法 2种方式 (1)直接创建带Button组件的节点; (2) 先创建节点,再添加组件;按钮组件, 按钮是游戏中最常用的组件, 点击然后响应事件;按钮的过渡效果: 过渡: 普通状态, 鼠标滑动到物体上, 按下状态, 禁用状态 (1)没有过渡,只有响应事件; (2)颜色过渡, 过渡效果中使用颜色; (3)精灵..._cc button.start

随便推点

计算机专业游戏本推荐,2018高性价比游戏本推荐_游戏笔记本哪个好-太平洋电脑网...-程序员宅基地

文章浏览阅读245次。【PConline海选导购】晃眼间,秋风又起,让人振奋的开学季又要到来了!虽然说没有学习压力的暑假,在家着实悠哉,但想到回校后可以跟小伙伴们一起各种开黑吃鸡,是不是就感到很兴奋呢?说到“吃鸡”这种吃配置的游戏,就不得不说游戏本了,毕竟普通的笔记本电脑很难给我们带来畅快的游戏体验。而近年来游戏本市场俨然成为了各大厂商的必争之地,而随着开学季的到来,各大厂商更是推出了众多促销活动,下面就让我们一起来看..._计应专业游戏本

codePen按钮样式学习

看到codepen里面有的按钮搞得很炫酷,但其实也不是很难,就学习记录一下。

服务器维护中没法直播游戏,我的世界盒子显示维护中如何进入战堂服务器-程序员宅基地

文章浏览阅读408次。时间:2021-08-11编辑:hxh斗罗大陆魂师对决火雨队怎么搭配?火雨队是近期非常热门的一套阵容,不少玩家想了解该阵容,那么下面就让小编给大家带来斗罗大陆魂师对决火雨队阵容推荐,感兴趣的小伙伴们一起来看看吧。时间:2021-08-11编辑:hxh玩家在巅峰演武副本中不知道怎么打秦明,秦明的盾很厚不知道怎么破?那么下面就让小编给大家带来斗罗大陆魂师对决巅峰演武秦明破盾攻略,感兴趣的小伙伴们一起来...

GNU Radio之Schmidl & Cox OFDM synch.底层C++实现

在 GNU Radio OFDM 系统中,一个非常重要的环节是在接收端准确地同步和检测发送端发出的信号。这就是 Schmidl & Cox 同步算法发挥作用的地方。Schmidl & Cox 算法是一种用于 OFDM 信号的时间同步的技术。本文对其底层 C++ 源码进行学习记录。

项目开发规范

REST,表述性状态转换,他是一种软件架构风格使用URL定位资源,HTTP动词描述操作根据发出请求类型来区分操作此为风格,是约定方式,可以打破描述模块的功能通常使用复数,也就是加s的格式来描述,表示此类资源,而非单个资源。

3.8设计模式——State 状态模式(行为型)

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。