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备份服务器,会导致数据同步缓慢(适合少量数据备份)

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

  2. 大量数据备份场景

  3. 异地备份

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 root@172.16.1.41:/tmp ./
push推:
[root@web01 ~]# rsync -avz /var root@172.16.1.41:/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/ rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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/ rsync_backup@172.16.1.41::zls

拉:

[root@web01 ~]# rsync -avz rsync_backup@172.16.1.41::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  rsync_backup@172.16.1.41::zls  /data

rsync限速

rsync -avz --bwlimit=1024 /etc rsync_backup@172.16.1.41::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 rsync_backup@172.16.1.41::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/ rsync_backup@172.16.1.41::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 from=123@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=123@qq.com
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" 133411023@qq.com 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

Rsync备份服务实战的更多相关文章

  1. 3、Rsync备份服务实战

    1.Rsync基本概述 rsync是一款开源的备份工具,可以在不同主机之间进行同步,可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地备份等应用. rsync官方地址:传送门http:// ...

  2. day27 综合架构 rsync备份服务

    sync软件使用方法: rsync命令 1v4 a 本地备份数据 cp [root@nfs01 backup]# cp /etc/hosts /tmp [root@nfs01 backup]# ll ...

  3. 二.Rsync备份服务

    自己动手部署一遍 期中架构-第二章-备份服务笔记====================================================================== 01. 课 ...

  4. Rsync备份服务部署

    1 Rsync服务器架构规划 在搭建服务之前需要做以下规划设计,其中包括:主机规划表.主机IP地址规划表.主机架构图.主机hosts解析以及linux主机基础优化等 1.1 主机规划表 服务器说明 数 ...

  5. Linux Rsync备份服务介绍及部署守护进程模式

    rsync介绍 rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份工具 在常驻模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输 ...

  6. Linux中rsync备份服务部署

    rsync介绍 rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份工具 在常驻模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输 ...

  7. Rsync备份服务

    一.Rsync 原理图 二.Rsync 原理描述 2.1:什么是Rsync Rsync是备份的一款软件,它可以实现全量备份.增量备份,也可以在不改变内容.属性的情况下进行同步备份,端口默认是873 2 ...

  8. 综合架构之Rsync备份服务,服务端和客户端配置

    服务端配置(即备份服务器) ps:客户端配置见下方 配置一个新服务的步骤: 第一步:先将该服务下载 yum install -y rsync 第二步:编写服务配置文件 配置文件:/etc/rsyncd ...

  9. rsync 备份服务搭建(完成)

    rsync服务守护进程 服务器端配置过程: 1. 检查rsync是否安装: rpm -qa rsync 2.添加rsync服务的用户,管理本地目录 useradd-s /sbin/nologin -M ...

随机推荐

  1. Android listview子控件的的点击事件(转)

    1.先看图,是否是你想要的 2.布局文件<?xml version="1.0" encoding="utf-8"?><LinearLayout ...

  2. Vue-系统修饰键

    可以用如下修饰符来实现仅在按下相应按键时才触发鼠标或键盘事件的监听器. .ctrl .alt .shift .meta 例如: 例如: <!-- Alt + C --> <input ...

  3. 浅析HTTP代理原理

    代理服务器是HTTP协议中一个重要的组件,发挥着重要的作用. 关于HTTP代理的文章有很多,本文不再赘述,如果不清楚的可以看一下 HTTP代理的基础知识. 本文主要介绍代理的事例,分析一个真实的案例来 ...

  4. Web前端性能优化详解之CSS与JS加载

    浏览器加载页面和渲染过程 加载过程 浏览器根据DNS 服务器得到域名的IP地坛 向这个 IP 的机器发送 HTTP请求 服务器收到,处理并返回 HTTP请求 浏览器得到返回内容 渲染过程 根据 HTM ...

  5. 更好的在 Git 项目中保存大文件(Git LFS 的使用)

    珠玉在前, 大家可以参考 Git LFS的使用 - 简书 为什么要用 Git LFS 原有的 Git 是文本层面的版本控制, 为代码这种小文件设计的, 保存大文件会导致 repo 非常臃肿, push ...

  6. 【leetcode】1032. Stream of Characters

    题目如下: Implement the StreamChecker class as follows: StreamChecker(words): Constructor, init the data ...

  7. boost variant

    Boost Variant resembles union. You can store values of different types in a boost::variant. 1. #incl ...

  8. Angular JS - 1 - 环境准备

    1.webstorm 下载安装 webstorm 同 intellij IDEA  一样智能好用~ 智能的同时,比较费内存 2. chrome插件安装 按照下图,打开扩展程序,选择开发者模式: 下载n ...

  9. 牛客多校训练营第九场 J - Symmetrical Painting (排序)

    J - Symmetrical Painting 题意 给你\(n\)个矩形, 左下角\((i-1,\ L_i)\), 右上角\((i,\ R_i)\), 找一条线\(l\)平行于\(x\)轴, 让这 ...

  10. 原生 js 实现 vue 的某些功能

    1.数据双向绑定:https://www.cnblogs.com/yuqing-o605/p/6790709.html?utm_source=itdadao&utm_medium=referr ...