Rsync数据备份工具

1、Rsync基本概述

rsync是一款开源的备份工具,可以在不同主机之间进行同步(windows和Linux之间 Mac和 Linux Linux和Linux),可实现全量备份与增量备份,因此非常适合用于架构集中式备份或异地等应用。

rsync官方地址https://rsync.samba.org/

rsync监听端口:873

rsync运行架构:

C/S Client/Server

B/S Browser/Server

rsync常见的两种备份方式

  • 完全备份

    • 将数据全部备份
  • 增量备份
    • 基于上一次备份,新增部分的数据备份

示例:

假设客户端上有file1 file2 file3文件,服务端上有file1文件,现要将客户端上的数据备份至服务端

完全备份,将客户端所有的数据内容file1、file2、file3全部备份至服务端 (效率低下, 占用空间)

增量备份,将客户端的file2、file3增量备份至服务端 (提高备份效率,节省空间, 适合异地备份 )

2、Rsync应用场景

2.1 数据推送(上传)

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

2.2 数据拉取(下载)

rsync备份服务端拉取所有主机上的数据,这样操作会导致备份服务器压力比较大(适合较少服务器场景)

2.3 大量服务器备份场景

2.4 异地备份实现思路

3、Rsync传输模式

Rsync大致使用三种主要的数据传输方式

本地方式

远程方式

守护进程

3.1 rsync命令选项

-a	//归档模式传输,等于-tropglD
-v //详细模式输出,显示速率,文件数量等
-z //传输时进行压缩,提高效率
-r //递归传输,传输目录,传输目录时目录名称后加"/"表示传输目录下的所有文件
-t //保持文件时间信息
-o //保持文件属主信息
-g //保持文件属组信息
-p //保持文件权限
-l //保留软链接
-D //保持设备文件信息
-P //显示同步的过程及传输时的进度等信息
-L //保留软连接指向的目标文件
--delete //让目标目录和源目录数据保持一致
--bwlimit //限速传输
--exclude=PATTERN //指定排除不需要传输的文件模式
--exclude-from=FILE //排除FILE中指定模式的文件

3.2 本地模式

适用单个主机之间的数据传输(类似于cp命令)

具体用法如下:

Local: rsync [OPTION...] SRC... [DEST]

rsync [选项] 源文件.. 目标路径

3.3 远程模式

基于ssh通道传输(类似scp命令)

注意:rsync借助ssh协议同步数据存在一些缺陷问题

  • 使用系统用户(不安全)
  • 使用普通用户(会导致权限不足的情况)

具体用法如下:

Access via remote shell:
Pull: 拉 rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: 推 rsync [OPTION...] SRC... [USER@]HOST:DEST 拉:rsync [选项] [用户@]主机IP:文件路径 本机目录
推:rsync [选项] 本机文件 [用户@]主机IP:目录

3.4 守护进程模式

Access via rsync daemon:
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST 拉:rsync [选项..] [用户名@]主机IP::配置文件中的模块名 本机目录
推:rsync [选项..] 本机文件 [用户名@]主机IP::配置文件中的模块名

4、Rsync服务实践

主机名 IP 角色
server 192.168.111.30 rsync服务端
client 192.168.111.40 rsync客户端

4.1 服务端配置

# 1.安装rsync
[root@server ~]# yum install -y rsync # 2.修改服务配置文件/etc/rsyncd.conf
[root@server ~]# vim /etc/rsyncd.conf
uid = rsync #运行服务的用户
gid = rsync #运行服务的组
port = 873 #服务监听端口
fake super = yes #服务无需使用root用户身份,即可接收文件的完整属性
use chroot = no #禁锢目录,不允许获取root权限
max connections = 4 #最大连接数,最多能有多少个客户端跟服务端的873端口建立连接
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 # 数据存放目录 # 3.创建用户以及数据存放目录
[root@server ~]# useradd -r -M -s /sbin/nologin rsync
[root@server ~]# mkdir /backup
[root@server ~]# chown -R rsync.rsync /backup # 4.创建虚拟用户密码文件并设置权限
[root@server ~]# vim /etc/rsync.passwd
rsync_backup:passwd123
[root@server ~]# chmod 600 /etc/rsync.passwd # 5.关闭防火墙、selinux
[root@server ~]#systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1) # 6.重启服务并设置服务开机自启
[root@server ~]# systemctl restart rsyncd
[root@server ~]# systemctl enable rsyncd # 7.检查服务端口是否开启
[root@server ~]# ss -anltup | grep "rsync"
tcp LISTEN 0 5 0.0.0.0:873 0.0.0.0:* users:(("rsync",pid=2320,fd=3))
tcp LISTEN 0 5 [::]:873 [::]:* users:(("rsync",pid=2320,fd=5))

4.2 客户端配置

# 1.安装rsync
[root@client ~]# yum -y install rsync # 2.配置传输密码
---方法1:将密码写入文件
[root@client ~]# echo 'passwd123' > /etc/rsync.pass
[root@client ~]# cat /etc/rsync.pass
passwd123
[root@client ~]# chmod 600 /etc/rsync.pass --测试收发数据:
[root@client ~]#rsync -avz --password-file=/etc/rsync.pass /root/file1 rsync_backup@192.168.111.30::backup
sending incremental file list
file1 sent 87 bytes received 43 bytes 260.00 bytes/sec
total size is 0 speedup is 0.00 [root@server ~]# ls /backup/
file1 ---方法2:使用密码环境变量RSYNC_PASSWORD
[root@client ~]# export RSYNC_PASSWORD='passwd123' --测试收发数据:
[root@client ~]# touch file2
[root@client ~]#rsync -avz /root/file2 rsync_backup@192.168.111.30::backup
sending incremental file list
file2 sent 88 bytes received 43 bytes 87.33 bytes/sec
total size is 0 speedup is 0.00 [root@server ~]# ls /backup/
file1 file2

4.3 设置systemctl 管理 rsync 服务

# 1.创建/etc/sysconfig/rsyncd 文件
[root@server ~]#vim /etc/sysconfig/rsyncd
OPTIONS="" # 2. 创建rsyncd.service 文件
[root@server ~]#vim /lib/systemd/system/rsyncd.service
[Unit]
Description=fast remote file copy program daemon [Service]
EnvironmentFile=/etc/sysconfig/rsyncd
ExecStart=/usr/bin/rsync --daemon --config=/etc/rsyncd.conf --no-detach
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=30s [Install]
WantedBy=multi-user.target

4.4 报错信息

# 用户密码认证失败
[root@client ~]#rsync -avz --password-file=/etc/rsync.pass /root/file1 rsync_hzz@192.168.111.30::backup
@ERROR: auth failed on module backup
rsync error: error starting client-server protocol (code 5) at main.c(1661) [sender=3.1.3]
## 原因:
1.用户输入错误
2.密码输入错误
3.密码文件的权限不是600
4.传输的文件不存在 [root@client ~]# rsync -avz /etc/passwd rsync_backup@192.168.111.30::backup
rsync: failed to connect to 192.168.111.30 (192.168.111.30): No route to host (113)
rsync error: error in socket IO (code 10) at clientserver.c(125) [sender=3.1.3]
无法和192.168.111.30rsync服务建立连接
## 原因:
1.防火墙
2.selinux
3.服务没启动
4.服务的端口改了

4.5 排错思路

## 服务端
# 1.检查配置文件
[root@server ~]# cat /etc/rsyncd.conf # 2.检查密码文件的权限
[root@server ~]#ll /etc/rsync.passwd
-rw-------. 1 root root 23 9月 2 16:30 /etc/rsync.passwd # 3.检查密码文件中的内容
检查用户名是否和配置文件中的用户名一致 # 4.检查模块目录的权限
模块目录的权限,必须是rsync配置文件中指定的uid和gid的权限 ## 客户端
# 1.检查命令用户名
命令中的用户名要跟服务端配置文件和密码文件中的用户名一致 rsync_backup # 2.检查命令模块名
命令中的模块名要跟服务端配置文件中的模块名一致 backup # 3.如果有密码文件,检查权限
600 root root # 4.检查密码文件内容
只需要写密码 # 5.检查环境变量中的密码
[root@server ~]# echo $RSYNC_PASSWORD
passwd123

5、Rsync企业级备份案例

环境准备

主机名 IP 角色
server 192.168.111.30 rsync服务端
client 192.168.111.40 rsync客户端

客户端需求

  • 客户端每天凌晨3点备份/etc目录至/backup下以"主机名_IP地址_当前时间命名"的目录中
  • 客户端推送/backup目录下数据备份目录至Rsync备份服务器
  • 客户端只保留最近七天的备份数据,避免浪费磁盘空间

服务端需求

  • 服务端部署rsync服务,用于接收用户的备份数据
  • 服务端每天校验客户端推送过来的数据是否完整,并将结果以邮件的方式发送给管理员
  • 服务端仅保留6个月的备份数据

注意:所有服务器的备份目录均为/backup,所有脚本存放目录均为/scripts。

服务端部署rsync服务

[root@server ~]# mkdir /scripts
[root@server ~]# vim /scripts/rsync_server.sh
#!/bin/bash
#安装rsync服务
yum -y install rsync
#修改服务配置文件
cat > /etc/rsyncd.conf << EOF
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 4
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
EOF
#创建服务用户,创建数据备份目录并设置权限
useradd -r -M -s /sbin/nologin rsync
mkdir /backup
chown -R rsync.rsync /backup
#生成数据传输用户密码文件并设置权限
echo "rsync_backup:passwd123" > /etc/rsync.passwd
chmod 600 /etc/rsync.passwd
#关闭防火墙和selinux
systemctl stop firewalld
setenforce 0
#设置服务开机自启,并重启服务
systemctl enable rsyncd
systemctl restart rsyncd [root@server ~]# chmod +x /scripts/rsync_server.sh [root@server ~]# /scripts/rsync_server.sh

客户端备份数据并推送至rsync服务器

[root@client ~]# mkdir /scripts
[root@client ~]# vim /scripts/etc_backup.sh
#!/bin/bash
#客户端安装rsync
yum -y install rsync
#配置rsync客户端虚拟用户密码
export RSYNC_PASSWORD='passwd123'
#创建备份目录
mkdir -p /backup/$(hostname)_$(ifconfig | awk 'NR==2{print $2}')_$(date "+%F")
#打包备份/etc目录下的数据至备份目录中
tar -zcf /backup/$(hostname)_$(ifconfig | awk 'NR==2{print $2}')_$(date "+%F")/etc_backup.tar.gz /etc/
#计算备份文件的校验值
md5sum /backup/$(hostname)_$(ifconfig | awk 'NR==2{print $2}')_$(date "+%F")/etc_backup.tar.gz > /backup/$(hostname)_$(ifconfig | awk 'NR==2{print $2}')_$(date "+%F")/checksum.txt
#将打包备份好的数据推送到rsync备份服务器
rsync -az /backup/$(hostname)_$(ifconfig | awk 'NR==2{print $2}')_$(date "+%F") rsync_backup@192.168.111.30::backup
#删除七天前的备份文件
find /backup/ -mtime +7 | xargs rm -rf [root@client ~]# chmod +x /scripts/etc_backup.sh [root@client ~]# crontab -e
0 3 * * * /scripts/etc_backup.sh

服务端校验数据并将结果以邮件发送给管理员:

#配置邮件服务
[root@server ~]# yum -y install mailx
[root@server ~]# cat > /etc/mail.rc << EOF
# 发送的邮件地址
set from=483607723@qq.com
# 发送邮件服务器
set smtp=smtps://smtp.qq.com:465
# 发件人账号,一般情况下为邮件地址
set smtp-auth-user=483607723@qq.com
# 发件邮箱的授权码
set smtp-auth-password=xxxxxxxxxx
# 认证方式
set smtp-auth=login
# 忽略证书警告
set ssl-verify=ignore
# 证书所在目录
set nss-config-dir=/etc/pki/nssdb/
EOF #配置脚本校验数据并将结果发送给管理员
[root@server ~]# vim /scripts/checksum.sh
#!/bin/bash
#校验备份数据并将结果发送给管理员
md5sum -c /backup/client_192.168.111.30_$(date "+%F")/checksum.txt | mail -s "/backup/client_192.168.111.30_$(date "+%F")" 483607723@qq.com
#删除6个月以前的备份数据
find /backup/ -mtime +180 | xargs rm -rf [root@server ~]# chmod +x /scripts/checksum.sh [root@server ~]# crontab -e
0 5 * * * /scripts/checksum.sh

QQ邮箱的授权码获取

进入邮箱后–>设置–>账户,开启下图中的SMTP,点击生成授权码

Rsync数据备份工具的更多相关文章

  1. Linux基础学习-数据备份工具Rsync

    数据备份工具rsync 作为一个系统管理员,数据备份是非常重要的,如果没有做好备份策略,磁盘损坏了,那么你的数据将全部丢失,所以在日常的维护工作中,一定要时刻牢记给数据做备份. rsync不仅可以可以 ...

  2. linux下的数据备份工具rsync讲解

    linux下的数据备份工具 rsync(remote sync 远程同步)   名词解释: sync(Synchronize,即“同步”)为UNIX操作系统的标准系统调用,功能为将内核文件系统缓冲区的 ...

  3. 开源服务专题之-------rsync数据备份

    RSYNC是Remote Sync 远程同步的简称,与SCP的比较,SCP= 无法备份大量数据,类似windows的复制,而rsync=边复制 ,边统计,边比较,可以备份大量数据.可以镜像保存整个目录 ...

  4. Linux实战教学笔记21:Rsync数据同步工具

    第二十一节 Rsync数据同步工具 标签(空格分隔): Linux实战教学笔记-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品,允许转载,转载 ...

  5. Rsync数据同步工具

                                        Rsync数据同步工具 什么是Rsync? Rsync是一款开源的.快速的.多功能的,可以实现全量及增量的本地或原程数据同步备份 ...

  6. rsync数据同步工具的配置

    rsync数据同步工具的配置 1. rsync介绍 1.1.什么是rsync rsync是一款开源的快速的,多功能的,可实现全量及增量的本地或远程数据同步备份的优秀工具.Rsync软件适用于 unix ...

  7. 【基础】:Rsync数据同步工具

    第二十一节 Rsync数据同步工具 1.1 Rsync介绍 1.1.1 什么是Rsync? 1.1.2 Rsync简介 1.3 Rsync的特性 1.1.4 Rsync的企业工作场景说明 1.2 Rs ...

  8. (转)rsync数据备份方案

    rsync数据备份方案 原文:http://blog.51cto.com/irow10/1826458 最近整理了下公司的数据备份情况.以下是部分操作的过程 1.rsync数据备份,具体备份过程就不详 ...

  9. Linux系统——Rsync数据同步工具

    Rsync的优点及缺点 优点:类似cp命令.scp命令,但rsync为增量复制工具 缺点:针对大文件,效率非常高(打包再比对),针对小文件,效率非常低. Rsync作用 (1)可使本地和远程两台主机之 ...

随机推荐

  1. 前端学习 linux —— shell 编程

    前端学习 linux - shell 编程 shell 原意是"外壳",与 kernel(内核)相对应,比喻内核外的一层,是用户和内核沟通的桥梁.shell 有很多种,国内通常使用 ...

  2. static关键字续、继承、重写、多态

    static关键字 1.对于实例变量,每个java对象都拥有自己的一份,存储在堆内存当中,在构造方法执行的时候初始化. 2.所有对象都拥有同一个属性时,并且值相同,建议声明为static变量. 3.静 ...

  3. idea 在创建maven时没有src的解决方法

    在创建maven时    加上archetypeCatalog=internal

  4. 013(oulipo)

    题目:http://ybt.ssoier.cn:8088/problem_show.php?pid=1455 题目描述:在母串里找子串出现的次数 题目思路:与字符串的搜索有关那就立刻找到哈希 从s[1 ...

  5. 抓到 Netty 一个隐藏很深的内存泄露 Bug | 详解 Recycler 对象池的精妙设计与实现

    欢迎关注公众号:bin的技术小屋,如果大家在看文章的时候发现图片加载不了,可以到公众号查看原文 本系列Netty源码解析文章基于 4.1.56.Final版本 最近在 Review Netty 代码的 ...

  6. shell脚本处理二进制数据

    正确处理二进制数据 正确处理二进制数据必须保证以下三个环节是二进制安全(Binary Safe)的: 从文件读取至内存: 处理数据过程中: 内存写入至文件. 那么二进制安全是什么?通俗来说就是不会特殊 ...

  7. 【CSP-J 2021】总结

    前言:程不在长,能过则行.码不在多,无虫则灵.斯是信竞,惟吾爆零.线段维护快,树状跳的勤.数论剩余系,图论前向星.无数竞之推理,无物竞之劳形.大佬楼教主,超奆姚期智,神犇云:您太强了. 早上5:00就 ...

  8. 基于ABP实现DDD--仓储实践

      由于软件系统中可能有着不同的数据库,不同的ORM,仓储思想的本质是解耦它们.在ABP中具体的实现仓储接口定义在领域层,实现在基础设施层.仓储接口被领域层(比如领域服务)和应用层用来访问数据库,操作 ...

  9. Netty源码解读(三)-NioEventLoop

    先看看EventLoop类图 我们在Netty第二篇文章中的代码中,看到有多次用到eventLoop.execute()方法,这个方法就是EventLoop开启线程执行任务的关键,跟踪进去看看 // ...

  10. 什么是 Base64 ?

    Base64 是什么? Base64是一种二进制到文本的编码方式.如果要更具体一点的话,可以认为它是一种将 byte数组编码为字符串的方法,而且编码出的字符串只包含ASCII基础字符,就是包括小写字母 ...