Rsync文件同步及备份

Rsync基本概述

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

全量备份:将所有数据都进行一次备份

增量备份:基于全量备份来说,只给增加的部分做备份

远程文件传输

scp命令

语法及使用方式

scp [选项] [源文件] [用户名@主机]:[位置]
scp -r /etc root@172.16.1.31:/tmp

scp只能全量备份,所以效率较低

服务端口

ssh 		22
telnet 23
ftp 21
http 80
DNS 53
https 443
rdp 3389
rsync 873
mysql 3306
redis 6379

rsync官方地址:TP

rsync运行模式:C/S

C/S架构:需要一个客户端和服务端

Rsync的三种传输模式

源文件路径的后面如果加/,就会拷贝源文件路径下面的所有文件

如果不加/,就会拷贝源文件和源文件路径下面所有的文件

Rync的数据同步模式

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

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

rsync命令的选项

-a:archive 归档拷贝,包含-tropglD
-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 #使用密码文件

本地方式(类似cp)

单个主机本地之间的数据传输

Local:  rsync [OPTION...] SRC... [DEST]
选项 源文件 目标文件
## 拷贝/etc目录到/tmp下
[root@backup ~]# rsync -av /etc /tmp/ ## 拷贝/etc/目录下的所有文件到/tmp
[root@backup ~]# rsync -av /etc/ /tmp/

远程方式(类似scp)

通过ssh通道传输数据

Rsync借助SSH协议同步数据存在的缺陷

1.使用系统用户(不安全)

2.使用普通用户(会导致权限不足情况)

Pull:拉
Push:推
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
选项 用户名@主机ip:源文件 目标
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
选项 源文件 用户名@主机ip:目标
#缺点:必须使用系统用户,用root用户还得知道root用户的密码,普通用户又有可能没有权限
## 将172.16.1.31服务器上的/opt目录及下面的所有文件拉到本地的/etc/目录下
rsync -avz root@172.16.1.31:/opt /etc/ ## 将本地/etc目录及下面的所有文件远程传输给172.16.1.31服务器的/opt目录下
rsync -avz /etc root@172.16.1.31:/opt

守护进程(C/S结构)

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

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
选项 用户名@主机ip::模块名 源文件
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST] Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
选项 源文件 用户名@主机ip::模块名(目标路径)
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST #选项
-a:归档同步
-v:显示同步的过程
-z:压缩同步(降低同步时占用的网络带宽)
--delete:无差异同步
--password-file=密码文件:指定用户密码文件,免交互

Rsync服务实践

环境准备

主机角色 外网IP(WAN) 内网IP(LAN) 主机名称
Rsync服务端 10.0.0.41 172.16.1.41 backup
Rsync客户端 10.0.0.31 172.16.1.31 nfs

安装rsync

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

配置rsync

## 查找rsync的配置文件路径,只能查找rpm安装包的信息
[root@backup ~]# rpm -qc rsync
[root@backup ~]$ vim /etc/rsyncd.conf
uid = rsync
#服务启动的用户
gid = rsync
#服务启动的用户组
port = 873
#服务监听的端口
fake super = yes
#假的超级用户,以普通用户身份执行rooy用户能执行的操作
use chroot = no
#禁锢指定的目录,不允许用户跳出到其他目录
max connections = 200
#最大连接数
timeout = 600
#超时时间
ignore errors
#忽略错误提示
read only = false
#只读为false,就是可读可写
list = false
#不允许其他用户查询模块名
auth users = rsync_backup
#虚拟用户,rcync同步需要使用的用户,可随意指定用户
secrets file = /etc/rsync.passwd
#指定存放虚拟用户密码的文件为/etc/rsync.passwd,可随意定义
log file = /var/log/rsyncd.log
#指定srync服务的日志文件存放路径为var/log/rsyncd.log,可随意定义
#--------------------------------------------------------------分割线
[backup]
#模块名,可随意定义
comment = welcome to oldboyedu backup!
#注释,同步的描述信息,随便写
path = /backup
#同步的路径,也就是用户被禁锢的路径

创建启动服务的用户

[root@backup ~]$ useradd rsync -s /sbin/nologin -M
[root@backup ~]$ id rsync
uid=1000(rsync) gid=1000(rsync) groups=1000(rsync)

创建虚拟用户的密码文件

[root@backup ~]$ echo 'rsync_backup:123' > /etc/rsync.passwd
#我们创建的是虚拟用户的密码
#密码文件的格式:用户名:密码
[root@backup ~]$ cat /etc/rsync.passwd
rsync_backup:123

rsync要求密码文件的权限必须是600

chmod 600 /etc/rsync.passwd

创建一个同步的路径

mkdir /backup

修改同步路径的属主属主

chown rsync:rsync /backup/
[root@backup ~]$ ll /backup/ -d
drwxr-xr-x. 2 rsync rsync 6 Jul 6 19:23 /backup/

启动rsync服务

[root@backup ~]# systemctl start rsyncd

加入开机自启

[root@backup ~]# systemctl enable rsyncd

验证服务启动(进程,端口)

[root@backup ~]$ ps -ef|grep [r]sync
root 7444 1 0 Jul06 ? 00:00:00 /usr/bin/rsync --daemon --no-detach [root@backup ~]$ netstat -lntup|grep 873
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 7444/rsync
tcp6 0 0 :::873 :::* LISTEN 7444/rsync

客户端操作

需要交互

[root@nfs ~]$ rsync -avz /etc rsync_backup@172.16.1.41::backup
Password:
#需要输入密码

报错信息排查

报错1.

[root@nfs ~]$ rsync -avz /etc rsync_backup@172.16.1.41::backup
Password:
@ERROR: auth failed on module bak
rsync error: error starting client-server protocol (code 5) at main.c(1649)
[sender=3.1.2] 排查思路:
1.密码文件的权限不是600
2.密码文件里的密码和手动输入的密码不一致
3.密码文件名字和配置文件中的名字不一致

报错2.

[root@nfs ~]$ rsync -avz /backup/123.txt rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
123.txt
rsync: mkstemp ".123.txt.P2Kfee" (in bak) failed: Permission denied (13)
sent 89 bytes received 120 bytes 139.33 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at
main.c(1179) [sender=3.1.2] 排查思路:
1.没有关闭selinux
2.备份路径的权限不是配置文件中指定的uid权限

报错3.

[root@nfs ~]# rsync -avz /var 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

免交互操作

# 1.创建密码文件(客户端的密码文件只写密码不写用户)
[root@nfs ~]$ echo '123' > /etc/rsync.passwd
[root@nfs ~]$ chmod 600 /etc/rsync.passwd
[root@nfs ~]$ rsync -avz /var rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd # 2.使用rsync的环境变量
[root@nfs ~]$ export RSYNC_PASSWORD=123
[root@nfs ~]$ rsync -avz /var rsync_backup@172.16.1.41::backup

无差异同步

#为了保持数据的一致性
[root@nfs ~]$ mkdir /opt/date
[root@nfs ~]$ rsync -avz --delete /opt/date rsync_backup@172.16.1.41::backup

企业中rsync实战案例

环境准备

角色 外网IP(WAN) 内网IP(LAN) 主机名
rsync客户端 10.0.0.7 172.16.1.7 web01
rsync客户端 10.0.0.31 172.16.1.31 nfs
rsync服务端 10.0.0.41 172.16.1.41 backup

客户端需求

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

# 在web01和nfs服务器上创建备份目录
[root@nfs ~]$ mkdir /backup
[root@web01 ~]$ mkdir /backup

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

#打包备份/etc/passwd
mkdir /backup/$(hostname)_$(ifconfig eth0|awk 'NR==2 {print $2}')_$(date +%F) tar zcf /backup/$(hostname)_$(ifconfig eth0|awk 'NR==2 {print $2}')_$(date +%F)/pass.tgz /etc/passwd

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

rsync -az /backup/$(hostname)_$(ifconfig eth0|awk 'NR==2 {print $2}')_$(date +%F)/pass.tgz rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.passwd

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

[root@web01 ~]$ crontab -l
00 01 * * * /usr/bin/sh /root/backup.sh &>/dev/null

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

find /backup ! -mtime -7|xargs rm -f

客户端脚本

#!/bin/bash
#if [ -d /backup ];then
# echo '存在'
#else
# echo '不存在'
#fi
#将/backup目录设置为变量bak_dir
bak_dir=/backup
#将命令$(hostname)设置为变量HOSTNAME
HOSTNAME=$(hostname)
#将主机IP设置为变量IP
IP=$(/usr/sbin/ifconfig eth1|awk 'NR==2{print $2}')
#将时间命令$(date +%F)设置为变量DATE
DATE=$(date +%F)
#将/backup/主机名_IP_时间 这个格式的目录设置为变量tar_dir
tar_dir=$bak_dir/${HOSTNAME}_${IP}_${DATE}
#设置临时变量:指定虚拟用户密码为123
export RSYNC_PASSWORD=123
#创建/backup目录
mkdir -p $bak_dir
#递归创建/backup/主机名_IP_时间,这个目录
mkdir -p $tar_dir
#到/etc目录下:为防止tar命令的/报错
cd /etc
#等于tar zcf /backup/主机名_IP_时间/passwd.tgz passwd
tar zcf $tar_dir/passwd.tgz passwd
#等于md5sum /backup/主机名_IP_时间/passwd.tgz > /backup/主机名_IP_时间/md5.check 表示利用md5sum工具给压缩包对应的随机数后,将随机数存放至/backup/主机名_IP_时间目录下的md5.check文件中
md5sum $tar_dir/passwd.tgz > $tar_dir/md5.check
#将/backup目录中的内容备份至服务端,注意$bak_dir/带根了,只复制目录下面的所有内容,不包括目录本身
rsync -az $bak_dir/ rsync_backup@172.16.1.41::backup
#删除/backup目录中7天以前的信息
find /backup ! -mtime -7|xargs rm -f

服务端需求

1.服务端部署rsync,用于接收客户端推送过来的备份数据

[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
然后配置好用户及文件,同上配置rsync服务

2.服务端需要每天校验客户端推送过来的数据是否完整

1.在客户端打包完成之后,先要生成一个md5值保存到文件里
md5sum /backup/主机名_IP_时间/passwd.tgz > /backup/主机名_IP_时间/md5.check
2.在服务端使用md5sum -c来校验数据的完整性
md5sum -c /backup/主机名_IP_时间/md5.check

3.服务端需要每天校验的结果通知给管理员

1.配置邮件
2.将校验的结果通过邮件发送到管理员的邮箱
md5sum -c md5.check |mail md5校验数据 1946354906@qq.com
3.编写定时任务
[root@backup ~]$ crontab -e
#每天执行一次校验脚本
00 00 * * * /usr/bin/sh /root/backup.sh &> /dev/null

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

find /backup ! -mtime -180|xargs rm -f

服务端脚本

#!/bin/bash
#将/backup设置为变量bak_dir
bak_dir=/backup
#将执行hostname命令后的结果设置为变量HOSTNAME
HOSTNAME=$(hostname)
#将主机内网IP设置为变量IP
IP=$(/usr/sbin/ifconfig eth1|awk 'NR==2{print $2}')
#将执行hostname命令后的结果设置为变量HOSTNAME
HOSTNAME=$(hostname)
#将主机内网IP设置为变量IP
IP=$(/usr/sbin/ifconfig eth1|awk 'NR==2{print $2}')
#将date +%F命令执行后的日期信息设置为变量DATE
DATE=$(date +%F)
#将/backup/主机名_主机IP_时间信息 这个格式的目录设置为变量tar_dir
tar_dir=$bak_dir/${HOSTNAME}_${IP}_${DATE}
#利用md5sum -c命令校验/backup/主机名_主机IP_时间信息/ 下面的所有存放随机数的文件,并用邮件将校验结果发给指定用户
md5sum -c $bak_dir/*/*.check|mail -s "备份数据校验结果${DATE}" 1946354906@qq.com
#其他信息放进黑洞文件
&>/dev/null
#服务端删除6个月之前的备份文件
find $bak_dir ! -mtime -180|xargs rm -f
配置邮件
vim /etc/mail.rc
set from=#发邮件的qq邮箱
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=#发邮件的qq邮箱
set smtp-auth-password=#客户端授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

如何配置rsync服务多备份目录

[root@backup ~]# vim /etc/rsyncd.conf
#-------------------------------
#模块名
[backup]
#同步的描述信息
comment = xxx
#同步的路径
path = /backup
#------------------------------
[backup2]
comment = aaa
path = /backup2
#根据配置文件创建出对应的目录
[root@backup ~]$ mkdir /backup2
#再更改新目录属主属组信息
[root@backup ~]$ chown rsync.rsync /backup2/
#只要改完配置文件一定要重启服务
[root@backup ~]$ systemctl restart rsyncd
#客户端同步
[root@nfs ~]$ rsync -avz /etc rsync_backup@172.16.1.41::backup2

Rsync文件同步及备份的更多相关文章

  1. rsync 文件同步和备份

    rsync 是同步文件的利器,一般用于多个机器之间的文件同步与备份,同时也支持在本地的不同目录之间互相同步文件.在这种场景下,rsync 远比 cp 命令和 ftp 命令更加合适,它只会同步需要更新的 ...

  2. [rsync]——rsync文件同步和备份

    实验环境 (1) Rsync服务器:10.0.10.158 (2) Rsync客户端:10.0.10.173 Rsync服务器端的配置 1. 安装xinetd和rsync # yum install ...

  3. Rsync文件同步

    Rsync文件同步 本章结构 关于rsync 1.一款增量备份工具,remote sync,远程同步,支持本地复制或者与其他SSH.rsync主机同步,官方网站:http://rsync.samba. ...

  4. CentOS系统rsync文件同步 安装配置

    rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync 它的特性如下: 可以镜像保存整个目录树和文件系统. 可以很容易做到保持原来文件的权限.时间.软硬 ...

  5. Centos6.5下rsync文件同步安装配置及遇到的问题解决方法

    实验节点如下: 源节点:192.168.0.111 备份节点:192.168.0.112 ------------------------------以下部分在两个节点上执行1.防火墙开放873端口( ...

  6. Rsync文件同步工具

    前段时间因公司需求,需要把备份的文件进行同步保存,后面就想到了我们大家都最熟悉的文件同步工作Rsync,于是就捣鼓了一下午时间,然后总结了下大概过程和参数详情. 首先了解了下rsync同步的大致原理: ...

  7. linux 下的 rsync 文件同步

    rsync是linux下的一款快速增量备份工具Remote Sync,是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限.时间.软硬链接等附加信息.rsync是用 “rsync ...

  8. inotify 与 rsync文件同步实现与问题

    首先分别介绍inotify 与 rsync的使用,然后用两者实现实时文件同步,最后说一下这样的系统存在什么样的问题. 1. inotify 这个具体使用网上很多,参考 inotify-tools 命令 ...

  9. rsync文件同步、Inotify-tools参数详解

    inotifywait用于等待文件或文件集上的一个待定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树: inotifywatch用于收集被监控的文件系统计数据,包括每个inotify事 ...

  10. Rsync文件同步服务器配置

    rsync 是一个Unix/Linux系统下的文件同步和传输工具.rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法.可以用来做备份或镜像.一.配置文件rsync ...

随机推荐

  1. 网站下/.git/index查看

    遇见有些网站目录中存在 http://target.com/.git/index 由于index是二进制文件 下载回来本地查看 初始化 下载到.git目录 git checkout-index -a

  2. MQ(为什么要使用MQ)

    为什么使用MQ? 个人认为主要由几下几点: 1.在高并发环境下,由于来不及同步处理,请求往往会发生堵塞,比如说,大量的insert,update之类的请求同时到达数据库,直接导致无数的行锁表锁,甚至最 ...

  3. nginx学习之路

    nginx反向代理服务器 1.技术选型 nginx主要能实现的功能有负载均衡,反向代理,动静分离.选择nginx主要为了实现反向代理以及负载均衡功能, *为什么要实现反向代理 传统项目直接暴露在外网入 ...

  4. tomcat的SSL配置

    Table of Contents 1. 删除别名为tomcat的密钥 2. 生成别名为tomcat的密钥 3. tomcat配置密钥存储路径 4. 生成证书并通过浏览器导入 5. 80,443端口重 ...

  5. 爬快手,graphql查询语言

    graphql查询语言:https://blog.csdn.net/qq_41882147/article/details/82966783 即:前端调用同一个接口传入不同的操作,得到不同的返回值 一 ...

  6. 整合Swagger2

    整合Swagger2 1.Swagger介绍 前后端分离开发模式中,api文档是最好的沟通方式. Swagger 是一个规范和完整的框架,用于生成.描述.调用和可视化 RESTful 风格的 Web ...

  7. 微软NewBing真是Niubility

    这是本人2012年的拙作:           晨兮,闻风雨,后而雷鸣电闪.迟不可再三,若故无食.然何如耶?雨大风狂,单车奈何?公交卡空,恐时不予我也.不免叹也,天亦不予我!         而后出, ...

  8. VsCode里面运行mvn命令显示The JAVA_HOME environment variable is not defined correctly

    问题描述 关于这个问题,就是环境配置出了问题!!! 问题解决 在settings.json里面,配置的环境的路径不能出错,我就是在配置的时候,名为Environments的文件夹写成Environme ...

  9. Redis - 基础数据类型

    简介 根据 官网文档 的解释,可以了解 Redis 基础数据类型的一些基本信息: 对于 Redis 来说,存储的 key 值都是字符串类型,讨论数据类型的时候,指的都是存储的 value 值.这里主要 ...

  10. Linux下学习FPGA

    声明(叠甲):鄙人水平有限,本文章仅供参考. 1.环境 推荐使用 Ubuntu20.04这是我使用多个版本中最好用的一个,相关安装教程可以自行上网搜索这不再赘述,但要补充的一点的是源推荐使用中科大的源 ...