同步备份工具之 rsync
1.常用同步方法
SCP、 NFS、 SFTP、 http、 samba、 rsync、 drbd(基于文件系统同步,效率高)
2.rsync 介绍
rsync,英文全称是 remote synchronize, 是一款实现远程同步功能的免费软件,它在同步文件的同时,可以
保持原来文件的权限、时间、软硬链接等附加信息。 rsync 是用 “rsync 算法”提供了一个客户机和远程文件服务器
的文件同步的快速方法,而且可以通过 ssh 方式来传输文件。 甚至还可以实现只同步一个文件里有变化的内容部分,
所以可以实现快速的同步备份数据。
同时, rsync 还可以实现同步本地数据、删除文件和目录的功能。一个 rsync 相当于 scp、 cp、 rm,并且还在性
能上优于它们每一个命令。
3.rsync 特性
能更新整个目录和树和文件系统;
有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
对于安装来说,无任何特殊权限要求;
对于多个文件来说,内部流水线减少文件等待的延时;
能用 rsh、 ssh 或直接端口做为传输入端口(rsync 本身不对数据加密);
支持匿名 rsync 同步文件,是理想的镜像工具;
4.rsync 在企业的工作场景
(1)服务器之间的数据同步(cron+rsync)
(2)把所有客户服务器数据同步到备份服务器(cron+rsync)
(3)与 inotify 或 sersync 配合,做实时的数据同步(rsync+inotify/sersync)
5.rsync命令行常用参数
()参数说明
-v:--verbose 详细模式输出
-z:--compress 对备份的文件在传输的过程中进行压缩处理
-a:--archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于参数:-vrztopg
-r:--recursive 对子目录以递归模式处理。
-t:--times 保持文件时间信息
-o:--owner 保持文件属主信息。
-p:--perms 保持文件权限。
-g:--group 保持文件属组信息
-D:--devices 保持设备文件信息
-l: --links 保留软链结。
-e:--rsh=command 指定使用 rsh、 ssh 方式进行数据同步
--exclude=PATTERN 指定排除不需要传输的文件模式。
--exclude-from=FILE 排除 FILE 中指定模式的文件。
--bwlimit=KBPS 限制 I/O 带宽, KBytes per second。 ()工作中常用参数组合:-avz
()参数使用演示
a.使用--bwlimit参数限制传输带宽
rsync -avz --bwlimit= -e 'ssh' /etc/hosts root@192.168.0.100:/tmp/
6.rsync的三种工作模式讲解及用法
SYNOPSIS
Local: rsync [OPTION...] SRC... [DEST] ##本地备份
示例:
[root@localhost ~]# rsync -avz /etc/hosts /tmp/
sending incremental file list
hosts sent bytes received bytes 366.00 bytes/sec
total size is speedup is 1.03
[root@localhost ~]# ll /tmp/hosts
-rw-r--r-- root root Sep : /tmp/hosts
[root@localhost ~]# ll /etc/hosts
-rw-r--r-- root root Sep : /etc/hosts Access via remote shell: ##ssh协议远程备份
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
示例:
[root@localhost ~]# rsync -avz -e 'ssh -p 22' /etc/hosts root@192.168.0.175:/tmp/
The authenticity of host '192.168.0.175 (192.168.0.175)' can't be established.
ECDSA key fingerprint is SHA256:46QEG3vm+DkznMyVjIiHxE9xGGRFtlocipE8eKGqzp0.
ECDSA key fingerprint is MD5::9e::4d:::be::de::f9::8a::9f:.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.175' (ECDSA) to the list of known hosts.
root@192.168.0.175's password:
sending incremental file list
hosts sent bytes received bytes 19.26 bytes/sec
total size is speedup is 1.03 Access via rsync daemon: ##以守护进程的方式进行备份
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST rsync daemon模式的配置过程
**=====Rsync服务端:
().查看rsync安装包
# rpm -qa rsync ().添加rsync服务的用户,管理本地目录的
# useradd -s /sbin/nologin -M rsync
# id rsync ().生成rsync.conf配置文件
# vim /etc/rsyncd.conf 配置文件
uid = rsync ##用户,远端命令使用rsync访问共享目录
gid = rsync ##用户组
use chroot = yes ##安全
max connections = ##最大连接数
pid file = /var/run/rsyncd.pid ##pid文件路径
log file = /var/log/rsyncd.log ##日志文件路径
timeout = ##超时时间
[long] ##模块名称
path=/backup ##服务器提供访问的目录
ignore errors ##忽略错误
read only = false ##可写
list = false ##禁止列表
hosts allow = 192.168.0.0/ ##允许网段
hosts deny = 0.0.0.0/ ##禁止网段
auth users = rsync_backup ##虚拟用户
secrets file = /etc/rsync.password ##密码文件 ().根据rsyncd.conf的auth users配置账户,远程连接使用,并根据secrets file参数生成密码文件
echo "rsync_backup:123456" > /etc/rsync.password
cat /etc/rsync.password ().为密码文件设置权限
chmod /etc/rsync.password
ls -l /etc/rsync.password ().创建共享的目录并授权rsync服务管理
mkdir /backup
chown -R rsync.rsync /backup ().启动rsync服务并检查
rsync --daemon
ps -ef |grep rsync|grep -v grep
lsof -i : ().加入开机启动
echo "/usr/bin/rsync --daemon" >> /etc/rc.local
tail - /etc/rc.local **======rsync客户端
().生成连接服务器需要的密码文件
echo "" > /etc/rsync.password
cat /etc/rsync.password ().为密码文件设置权限
chmod /etc/rsync.password
ls -l /etc/rsync.password ().同步文件
推送:
rsync -avz /tmp/ rsync_backup@192.168.0.175::long --password-file=/etc/rsync.password
rsync -avz /tmp/ rsync://rsync_backup@192.168.0.175/long --password-file=/etc/rsync.password
拉取:
rsync -avz rsync_backup@192.168.0.175::long /tmp/ --password-file=/etc/rsync.password
rsync -avz rsync://rsync_backup@192.168.0.175/long /tmp/ --password-file=/etc/rsync.password
7.服务故障模拟
(1)服务器备份目录不存在
(2)服务器备份目录权限不足
(3)服务器rsync服务用户被删除
(4)鉴权模块失败--查看日志(密码文件路径错误,密码错误等等)
(5)启动rsync服务问题(配置文件路径或文件名不正确,rsync配置文件的正确名称及路径为:/etc/rsyncd.conf)
(6)rsync服务ip段的控制问题(拒绝和允许二选一)
8.rsync优缺点
优点:
(1)增量备份,支持socket(daemon),集中备份(支持推拉,都是以客户端为参照物)
(2)远程shell通道模式还可以加密(ssh)传输,socket(daemon)需要加密传输,可以利用vpn服务或ipsec服务
缺点:
(1)大量小文件同步的时候,比对时间较长,有的时候,rsync进程可能会停止
(2)同步大文件,10G这样的大文件有时也会出现问题:中断。未完整同步前,是隐藏文件,可以通过续传等参数实现传输。一次性远程拷贝可以用scp
9.rsync守护进程服务传输数据排错思路
(1)查看rsync服务配置文件路径是否正确,正确的默认路径为:/etc/rsyncd.conf;
(2)查看配置文件host allow,host deny,允许的ip网段是否为允许客户端访问的ip网段;
(3)查看配置文件中path参数里的路径是否存在,权限是否正确(正常应为配置文件中的UID参数对应的属主和组);
(4)查看rsync服务是否启动。查看命令为:ps -ef |grep rsync。端口是否存在:netstat -lnp |grep 873;
(5)查看iptables防火墙和selinux是否开启允许rsync服务通过,也可以考虑关闭iptables和selinux;
(6)查看服务端rsync设置的密码未见是否为600权限,密码文件格式是否正确,正确格式为 用户名:密码,文件路径和配置文件里的secrect files 参数对应;
(7)如果是推送数据,要查看下,配置rsyncd.conf文件中用户是否对模块下目录有可读可写的权限。
10.rsync多模块使用
vim /etc/rsyncd.conf配置文件 ##设置全局参数共用,独立的模块只需要配置备份路径即可
uid = rsync
gid = rsync
use chroot = yes
max connections =
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
timeout =
ignore errors
read only = false
list = false
hosts allow = 192.168.0.0/
auth users = rsync_backup
secrets file = /etc/rsync.password
[long]
path=/root/rsync
[ying]
path=/root/ying
11.rsync daemon服务模式排除及无差异同步
rsync排除的相关参数:
--exclude=PATTERN (排除较少文件时使用)
--exclude=FILE (排除较多文件时使用,可以将文件名写入一个文件中,再指定排除)
客户端:
排除单个文件
rsync -avz --exclude=a.txt /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
排除多个目录文件
()排除多个不连续的文件
rsync -avz --exclude={a.txt,b.txt,c.txt} /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
rsync -avz --exclude={a,b} /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
()排除多个连续的文件
rsync -avz --exclude={a..g} /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
()通过指定文件来排除多个连续的文件
rsync -avz --exclude-from=/tmp/rsynctest/.log /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
##.log中需要写入排除的文件名,并且最好指定1.log的全路径是什么
()完全同步:无差异同步(客户端有,服务端就有;客户端没有,服务端就没有)---谨慎使用
rsync -avz --delete /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password 服务端:
在服务端排除文件--通过修改配置文件rsyncd.conf;增加:exclude=a.txt b.txt
12.案例
()某DBA做数据同步,带宽占满,导致用户无法访问网站
rsync scp ftp 都具备限速功能
# dd if=/dev/zero of=test1 bs=1M count=
# rsync -avz --bwlimit= /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
默认单位为kbyte
还有断点续传的功能 ()某视频网站,视频推到服务器上线发布,本地/backup只有当天发布的内容,服务器上却又以前的所有文件,执行命令
rsync -avz --delete /backup/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
惨案:服务器端删除以前的所有,只有当天的数据文件
13.总结
rsync有三种工作模式
()local:rsync
()通道模式:rsync -avzP -e 'ssh -p 22' /etc/hosts root@192.168.0.175:/tmp
一般配合ssh key免秘钥传输,结合定时任务
()daemon模式
内网不需要,加密性能会有损失
外网同步建议加密使用rsync+vpn(pptp,openvpn,ipsec)
14.备份全网服务器数据生产架构方案案例
某公司里有一台web服务器,里面的数据很重要,但是如果硬盘坏了,数据就会丢失,现在领导要求你把数据在其他机器上做一个周期性的定时备份。要求如下:
)web服务器A和备份服务器B的备份目录必须为/backup
)要本分的系统配置文件包括但不限于:
a.定时任务服务的配置文件(/var/spool/cron/root)
b.开启自动的配置文件(/etc/rc.local)
c.日常脚本的目录(server/scripts)
d.防火墙iptables的配置文件(/ets/sysconfig/iptables)
e.自我思考还需要备份哪些配置?
)web服务器站点目录假定为(var/html/www)
)web服务器A的访问日志路径假定为(/app/logs)
)备份服务器上,保留最近7天的备份数据,同时保留6个月内每周一的所有数据副本
)备份服务器上要按照备份数据服务器的内网ip为目录保存备份,备份的文件按照时间名字保存。
)需要确保备份的数据尽量完整正确,在备份服务器上对备份服务器的数据进行检查,把备份的成功及失败结果信息发给系统管理员邮箱中 .环境需求配置
web服务器 192.168.0.165 主机名称:web01
rsync备份服务器 192.168.0.165 主机名称:backup .备份方案思路
①搭建backup服务器
a.rsync服务
②搭建web01服务器
a.验证rsync服务器是否能推送成功
b.开发脚本实现打包、备份、推送、校验、删除
c.配置定时任务每天00点定时推送
③backup服务器
a.开发脚本实现数据校验、删除、报警
b.配置定时任务每天6点定时执行
④同理搭建存储服务器nfs01
backup服务器设置:
[root@backup ]# useradd rsync -s /sbin/nologin -M
[root@backup ]# mkdir /backup
[root@backup ]# chown -R rsync.rsync /backup
[root@backup ]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections =
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
timeout =
ignore errors
read only = false
list = false
hosts allow = 192.168.0.0/
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path=/backup
[root@backup ]# echo "rsync_backup:123456" > /etc/rsync.password
[root@backup ]# systemctl start rsyncd
[root@backup ]# systemctl enable rsyncd
[root@backup ]# ps -ef |grep rsync
[root@web01 ]# echo "" >/etc/rsync.password
[root@web01 ]# rsync -avz rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
sending incremental file list
hosts sent bytes received bytes 350.00 bytes/sec
total size is speedup is 1.07
[root@web01 ]# mkdir /var/html/www -p
[root@web01 ]# mkdir /app/logs -p
[root@web01 ]# mkdir /server/scripts -p
[root@web01 ]# mkdir /backup
[root@web01 ]# touch /var/html/www/{..}.html
[root@web01 ]# touch /app/logs/{..}.log
[root@web01 ]# vim /server/scripts/bak.sh
#/bin/bash
cd / &&\
IP=`ifconfig enp0s3 |awk -F "[ :]+" 'NR==2{print $3}'`
BakPath=/backup
mkdir $BakPath/$IP -p
######判断是否属于星期二,并对星期一的数据增加标记打包
if [ $(date +%w) -eq ];then
date="$(date +%F -d "-1day")_week1"
else
date="$(date +%F -d "-1day")"
fi cd / &&\
tar zcfh $BakPath/$IP/sys_config_${date}.tar.gz /var/spool/crond/ /etc/rc.local /server/scripts /etc/sysconfig/iptables && \
tar zcf $BakPath/$IP/web_data_${date}.tar.gz /var/html/www && \
tar zcf $BakPath/$IP/access_log_${date}.tar.gz /app/logs && \
find $BakPath -type f -name "*.tar.gz" |xargs md5sum > $BakPath/$IP/flag_${date}
########bak data to backupserver by long at
rsync -az $BakPath/ rsync_backup@192.168.0.175::backup/ --password-file=/etc/rsync.password
#######delete data days ago.
find $BakPath -type -f -mtime + |xargs rm -rf
[root@web01 ]# crontab -e
* * * * /bin/bash /server/scripts/bak.sh [root@backup ]# yum install -y mailx
[root@backup ]# vim /etc/mailrc
set from=wangjinlong@.com smtp=smtp..com smtp-auth-user=wangjinlong smtp-auth-password= smtp-auth=login
###from:发送的邮件地址
###smtp:发生的外部smtp服务器地址
###smtp-auth-user是外部smtp服务器认证的用户名
###smtp-auth-password:外部smtp服务器认证的用户密码(授权码)
###smtp-auth:邮件认证方式
[root@backup ]# mail -s "testing" @.com < /etc/hosts
[root@backup ]# mkdir -p /server/scripts
[root@backup ]# vim /server/scripts/check.sh
#!/bin/bash
#######对数据进行校验
find /backup/ -name "flag_$(date +%F)"|xargs md5sum -c > /tmp/mail_$(date +%F).log
if [ $(date +%w) -eq ];then
date="$(date +%F -d "-1day")_week1"
else
date="$(date +%F -d "-1day")"
fi
####对180天前的数据进行删除,并留下6个月内每星期一的数据
find /backup -type -f -name "*.tar.gz" -a ! -name "*week1*" -mtime - |xargs rm -rf
mail -s "backup `date`" @.com < /tmp/mail_$(date +%F).log
[root@backup ]# crontab -e
* * * /bin/bash /server/scripts/check.sh
同步备份工具之 rsync的更多相关文章
- centos下同步备份工具rsync的安装及配置
http://www.cnblogs.com/wander1129/archive/2013/03/27/2984922.html
- Window 下好用的同步备份工具(来自微软)SyncToy
SyncToy 简单好用,满足备份的基本需求.
- Rsync备份同步数据工具
Rsync is a fast and extraordinarily versatile file copying tool. Rsync是一款开源的,快速的,多功能的,可实现全量和增量的本地 ...
- rsync数据同步备份
一.rsync简介 (1)rsync是什么? rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具. (2)rsync作用比较 远程拷贝:有点类似ssh的scp ...
- Linux下同步工具inotify+rsync使用详解
1. rsync 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这 ...
- rsync 远程同步 实时同步备份 两种免交互的方式实现实时备份
rsync 远程同步: 一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH.rsync主机同步 作用:做数据备份 备份方式: 完全备份 增量备份 ...
- 搭建中小规模集群之rsync数据同步备份
NFS重要问题 1.有关NFS客户端普通用户写NFS的问题. 1)为什么要普通用户写NFS. 2)exports加all_squash. Rsync介绍 什么是Rsync? Rsync是一款开源的.快 ...
- centos7下rsync+crontab定期同步备份
最近需求想定期备份内部重要的服务器数据到存储里面,顺便做个笔记 以前整过一个win下的cwrsync(客户端)+rsync(服务端:存储)的bat脚本 这次整一个Linux下的脚本sh,执行定期自动备 ...
- CentOS 6.5 rsync+inotify实现数据实时同步备份
CentOS 6.5 rsync+inotify实现数据实时同步备份 rsync remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...
随机推荐
- How Flask Routing Works
@How Flask Routing Works The entire idea of Flask (and the underlying Werkzeug library) is to map UR ...
- BZOJ1880:[SDOI2009]Elaxia的路线(最短路,拓扑排序)
Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...
- 智慧监狱来了!SaCa EMM 助推现代监狱建设迈上新台阶
近几年来,移动化已经成为警务信息化建设的必然方向,为紧急和突发事件的处理提供了信息依据.为监狱民警提供移动警务所需的信息管理系统,司法系统从很早就开始推动警务通项目.为了落实移动警务的工作需求,很多监 ...
- Spring(十)之自定义事件
编写自定义事件的简单流程如下: (1)编写CustomEvent.java package com.tutorialspoint; import org.springframework.context ...
- 使用mongodb提供的dotnet core sdk进行地理位置运算
mongodb提供地理位置运算功能,比较常用的场景比如,先判断用户所在的街道,然后看看街道附近有啥餐厅,然后算算用户与餐厅的距离什么的,官网里提供了比较详细的demo介绍不同api的用法 此处记录下d ...
- jquery css选择器
1. $('node+next') == $('node').next() 2. $('node~siblings') == $('node').nextAll(); 3. :gt(index)大于i ...
- 截屏状态监听 - iOS
既接到电话状态监听的需求之后再次添加了截屏状态的监听,当使用 App 时若用户执行截屏操作需要对当前状态进行监听操作,下面有两种方法,其中可以替换截屏的图片内容(Plan A),也可以弹出提示框(Pl ...
- 偏前端-HTML5 sessionStorage-会话存储
sessionStorage 是HTML5新增的一个会话存储对象,用于临时保存同一窗口(或标签页)的数据,在关闭窗口或标签页之后将会删除这些数据.本篇主要介绍 sessionStorage(会话存储) ...
- koa中静态文件资源中间件实现
项目实践过程中,会使用非常多的静态资源,怎样可以直接在浏览器中访问到这些静态资源 const fs = require('fs'); const path = require('path'); mod ...
- 基于Vue实现可以拖拽的树形表格(原创)
因业务需求,需要一个树形表格,并且支持拖拽排序,任意未知插入,github搜了下,真不到合适的,大部分树形表格都没有拖拽功能,所以决定自己实现一个.这里分享一下实现过程,项目源代码请看github,插 ...