同步备份工具之 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 远程同步,同步是把数据从缓冲区同步到磁盘上去的.数据在内存缓存区完成之后还没有写入到磁盘 ...
随机推荐
- Xpath提取一个标签里的所有文本
content = etree.HTML(text) h = content.xpath('//h1') h1 = h[0].xpath('string(.)').strip()
- BZOJ4870:[SHOI2017]组合数问题(组合数学,矩阵乘法)
Description Input 第一行有四个整数 n, p, k, r,所有整数含义见问题描述. 1 ≤ n ≤ 10^9, 0 ≤ r < k ≤ 50, 2 ≤ p ≤ 2^30 − 1 ...
- Asp.net Web Api添加异常筛选器
一.定义一个异常筛选器 using System;using System.Collections.Generic;using System.Linq;using System.Web;using S ...
- 随手练——POJ - 2676 数独 (回溯法)
POJ - 2676 : http://poj.org/problem?id=2676: 解题思想 (大力出奇迹): 1. 依次在空格里面填上“1~9”,并检查这个数字是否合法(其所在的行.列,以及3 ...
- ethereumjs/ethereumjs-blockchain-1-简介和API
https://github.com/ethereumjs/ethereumjs-blockchain SYNOPSIS概要 A module to store and interact with b ...
- javaSE web开发 登录思路代码
准备工作: 1.在WebContent WEB-INF lib下添加c3p0-0.9.5.2.jar mchange-common-java-0.2.11.jar ojdbc6.ja ...
- staticmethod classmethod
1. 静态方法 @staticmethod 只是名义上归类管,实际上静态方法里访问不了类或者实例中的任何属性 2. 类方法 @classmethod 只能访问类变量,不能访问实例变量 3.属性方法 @ ...
- iOS:Masonry约束经验(19-03-21更)
1.label约束: 1).只需约束x.y 点相关就行.宽高 长度相关不用约束,就算用boundingRectWithSize计算出来的,也可能不准. 如:top.bottom二选一,trailing ...
- Java并发编程(二)创建线程的三种方法
进程与线程 1. 进程 进程和代码之间的关系就像音乐和乐谱之间的关系一样,演奏结束的时候音乐就不存在了但乐谱还在:程序执行结束的时候进程就消失了但代码还在,而计算机就是代码的演奏家. 2. 线程 线 ...
- 数据采集与分析的那些事——从数据埋点到AB测试
作者:网易有数郑栋. 一.为什么企业需要一套完善的用户行为埋点和分析平台 产品初创期间,需要分析天使用户的行为来改进产品,甚至从用户行为中得到新的思路或发现来调整产品方向:产品成长过程,通过对用户行为 ...