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

智能推荐

leetcode 172. 阶乘后的零-程序员宅基地

文章浏览阅读63次。题目给定一个整数 n,返回 n! 结果尾数中零的数量。解题思路每个0都是由2 * 5得来的,相当于要求n!分解成质因子后2 * 5的数目,由于n中2的数目肯定是要大于5的数目,所以我们只需要求出n!中5的数目。C++代码class Solution {public: int trailingZeroes(int n) { ...

Day15-【Java SE进阶】IO流(一):File、IO流概述、File文件对象的创建、字节输入输出流FileInputStream FileoutputStream、释放资源。_outputstream释放-程序员宅基地

文章浏览阅读992次,点赞27次,收藏15次。UTF-8是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节。文件字节输入流:每次读取多个字节到字节数组中去,返回读取的字节数量,读取完毕会返回-1。注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。UTF-8字符集:汉字占3个字节,英文、数字占1个字节。GBK字符集:汉字占2个字节,英文、数字占1个字节。GBK规定:汉字的第一个字节的第一位必须是1。_outputstream释放

jeecgboot重新登录_jeecg 登录自动退出-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏3次。解决jeecgboot每次登录进去都会弹出请重新登录问题,在utils文件下找到request.js文件注释这段代码即可_jeecg 登录自动退出

数据中心供配电系统负荷计算实例分析-程序员宅基地

文章浏览阅读3.4k次。我国目前普遍采用需要系数法和二项式系数法确定用电设备的负荷,其中需要系数法是国际上普遍采用的确定计算负荷的方法,最为简便;而二项式系数法在确定设备台数较少且各台设备容量差..._数据中心用电负荷统计变压器

HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板_网页设计成品百度网盘-程序员宅基地

文章浏览阅读7k次,点赞4次,收藏46次。HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业_网页设计成品百度网盘

【Jailhouse 文章】Look Mum, no VM Exits_jailhouse sr-iov-程序员宅基地

文章浏览阅读392次。jailhouse 文章翻译,Look Mum, no VM Exits!_jailhouse sr-iov

随便推点

chatgpt赋能python:Python怎么删除文件中的某一行_python 删除文件特定几行-程序员宅基地

文章浏览阅读751次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python 删除文件特定几行

Java过滤特殊字符的正则表达式_java正则表达式过滤特殊字符-程序员宅基地

文章浏览阅读2.1k次。【代码】Java过滤特殊字符的正则表达式。_java正则表达式过滤特殊字符

CSS中设置背景的7个属性及简写background注意点_background设置背景图片-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏17次。css中背景的设置至关重要,也是一个难点,因为属性众多,对应的属性值也比较多,这里详细的列举了背景相关的7个属性及对应的属性值,并附上演示代码,后期要用的话,可以随时查看,那我们坐稳开车了······1: background-color 设置背景颜色2:background-image来设置背景图片- 语法:background-image:url(相对路径);-可以同时为一个元素指定背景颜色和背景图片,这样背景颜色将会作为背景图片的底色,一般情况下设置背景..._background设置背景图片

Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏8次。Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程

PyCharm2021安装教程-程序员宅基地

文章浏览阅读10w+次,点赞653次,收藏3k次。Windows安装pycharm教程新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入下载安装PyCharm1、进入官网PyCharm的下载地址:http://www.jetbrains.com/pycharm/downl_pycharm2021

《跨境电商——速卖通搜索排名规则解析与SEO技术》一一1.1 初识速卖通的搜索引擎...-程序员宅基地

文章浏览阅读835次。本节书摘来自异步社区出版社《跨境电商——速卖通搜索排名规则解析与SEO技术》一书中的第1章,第1.1节,作者: 冯晓宁,更多章节内容可以访问云栖社区“异步社区”公众号查看。1.1 初识速卖通的搜索引擎1.1.1 初识速卖通搜索作为速卖通卖家都应该知道,速卖通经常被视为“国际版的淘宝”。那么请想一下,普通消费者在淘宝网上购买商品的时候,他的行为应该..._跨境电商 速卖通搜索排名规则解析与seo技术 pdf

推荐文章

热门文章

相关标签