利用rsync备份生产应用(一)

rsync简单介绍

Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。Rsync使用所谓的“Rsync算法”来使本地和远 程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。

Rsync本来是用于替代rcp的一个工具,目前由rsync.samba.org维护,所以rsync.conf文件的格式类似于samba的主配 置文件。Rsync可以通过rsh或ssh使用,也能以daemon模式去运行,在以daemon方式运行时Rsync server会打开一个873端口,等待客户端去连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,以后则就只需进行增量备份。

rsync基本特点

1.可以镜像保存整个目录树和文件系统;
2.可以很容易做到保持原来文件的权限、时间、软硬链接等;
3.无须特殊权限即可安装;
4.优化的流程,文件传输效率高;
5.可以使用rsh、ssh等方式来传输文件,当然也可以通过直接的socket连接;
6.支持匿名传输。

rsync同步算法

1、Rsync同步算法
Rsync只所以同步文件的速度相当快,是因为“Rsync同步算法”能在很短的时间内计算出需要备份的数据,关于Rsync的同步算法描述如下:

假定在1号和2号两台计算机之间同步相似的文件A与B,其中1号对文件A拥有访问权,2号对文件B拥有访问权。并且假定主机1号与2号之间的网络带宽很小。那么rsync算法将通过下面的五个步骤来完成:

1、2号将文件B分割成一组不重叠的固定大小为S字节的数据块,最后一块可能会比S 小。

2、2号对每一个分割好的数据块执行两种校验:一种是32位的滚动弱校验,另一种是128位的MD4强校验

3、2号将这些校验结果发给1号。

4、1号通过搜索文件A的所有大小为S的数据块(偏移量可以任选,不一定非要是S的倍数),来寻找与文件B的某一块有着相同的弱校验码和强校验码的数据块。这项工作可以借助滚动校验的特性很快完成。

5、1号发给2号一串指令来生成文件A在2号上的备份。这里的每一条指令要么是对文件B经拥有某一个数据块而不须重传的证明,要么是一个数据块,这个数据块肯定是没有与文件B的任何一个数据块匹配上的。

rsync源码安装

[[email protected] rsync-3.1.2]# ./configure --prefix=/usr/loca/rsync-3.1.2
[[email protected] rsync-3.1.2]# make
[[email protected] rsync-3.1.2]# make install

安装后信息(其中conf目录及其文件需要手动添加)

[[email protected] rsync-3.1.2]# tree /usr/local/rsync-3.1.2/usr/local/rsync-3.1.2├── bin
│   └── rsync
├── conf
│   ├── rsyncd.conf
│   ├── rsyncd.motd
│   └── rsyncd.secrets    -->这里权限须为600
└── share
    └── man
        ├── man1
        │   └── rsync.1
        └── man5
            └── rsyncd.conf.56 directories, 6 files

rsyncd.conf配置文件详解

rsyncd.conf:rsync以daemon模式运行时的配置文件名称

rsync服务器配置(Daemon模式)

说明: 
1. rsync的配置文件为rsyncd.conf,可以使用–config选项指定要使用的配置文件。默认情况下,并没有提供该配置文件,需要手动创建。 
2. 该配置文件由两部分组成,模块和参数。 
3. 模块的格式:[Module] 
4. 参数的格式:属性 = 值 
5. 以#开头的表示注释。值的部分可以是yes、no、0、1、true或false。

全局参数

motd file:指定motd(message of the day)的位置。当客户端每一次连接时都会显示该文件中的内容,没有默认值。 
pid file:指定rsync的pid文件存储位置。 
lock file:指定lock文件的位置,确保不会达到最大连接数。默认为/var/run/rsyncd.lock
log file:指定rsync的log文件存储位置。这个文件会在chroot函数被调用前打开
port:指定rsync监听的端口。默认为873
address:指定rsync监听的地址。address = 0.0.0.0表示监听在本机上的所有地址。 
syslog facility:指定rsync将log发送到syslog时的log级别。

模块选项如下

comment:指定模块的描述信息
path:指定模块所映射的目录路径 
max connections:模块所允许的最大连接数。如果是0则表示没有限制,如果是负值则表示关闭该模块。如果用于全局,则表示所有模块的最大连接数。 
read only:是否允许客户端上传。yes表示不允许上传,no表示允许上传。默认为yes。如果设置为yes,则表示只能下载。 
write only:是否允许客户端下载。yes表示不允许客户端下载,no允许客户端下载。默认为no。如果设置为yes,表示只能上传。 
list:是否允许客户端列出该模块下的内容。yes允许,no不允许。 
uid:username或user ID。指定该模块传输文件时(上传或下载),守护进程应该具有的UID权限,默认为nobody。当以root权限启动服务时,uid和gid则表示修改上传的文件的uid和gid。 
gid:groupname或group ID。指定该模块传输文件时(上传或下载),守护进程应该具有的GID权限,默认为nobody。 
exclude:指定多个文件或目录(相对路径)不被同步,并将其添加到 exclude 列表中.多个文件(目录)用空格分隔.作用等同于在客户端命令中使用–exclude来指定模式. 
include:该选项针对于exclude,即同步exclude中的哪个文件(目录),并将其添加到include列表中,覆盖了exclude指定的文件或目录。多个文件(目录)用空格分隔.作用等同于在客户端命令中使用–include来指定模式. 
exclude from:和exclude的作用一样,只不过是exclude是将排除的文件或目录作为value的,而exclude from则是将排除的文件和目录写在文件中的,一行一个文件或目录。 
include from:和include的作用一样,将包括的文件写在文件中。

incoming chmod:修改服务器收到的文件的权限。如:incoming chmod = D2775,F664。(D表示目录,F表示文件) 
outcoming chmod:修改服务器发送的文件的权限。 
auth users与secrets file:这两个选项只能组合使用 
auth users指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块,这里的用户和系统用户没有任何关系,用户名和口令以明文方式存放在 secrets file 参数指定的文件中,格式为username:password,常用的文件名为:/etc/rsyncd.secrets,password不能超过8个字符。 
注意:secrets file文件的权限只能是启动rsyncd服务的用户具有rw权限,其他用户不能具有任何权限,即600. 
示例: 
auth users = joe:deny @guest:deny admin:rw @rsync:ro susan joe sam 
说明:用户joe以及在guest组中的任何用户将不能访问指定的模块。admin用户将具有rw的权限(会忽略read only和write only的设置),rsync组中的用户将具有ro的权限,以及susan、joe和sam将会获取read only和write only的设置的权限。 
timeout:通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户端。超时单位为秒,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。 
strict modes:指定是否检测口令文件的权限.若为 yes 则口令文件只能被 rsync 服务器运行身份的用户访问,其他任何用户不可以访问该文件,默认为yes。也就是该文件的权限为600或400。 
hosts allow:用一个主机列表指定哪些主机客户允许连接该模块.不匹配主机列表的主机将被拒绝.也就是说如果指定hosts allow那么不在hosts allow指定中的主机都将都拒绝. 
hosts deny:用一个主机列表指定哪些主机不能连接rsync模块.如果hosts allow和hosts deny同时指定一台主机,则以hosts allow为准.hosts allow和hosts deny的格式可以是x.x.x.x或x.x.x.x/n 或x.x.x.x/x.x.x.x或*的形式,也可以是主机名,要求能够被解析。 
ignore errors :可以忽略一些无关的IO错误 
use chroot:若为 true,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下.这样做的原因是实现额外的安全防护,但是缺点是需要 root 权限,并且不能备份指向 path 外部的符号连接所指向的目录文件。 
transfer logging:该选项开启则记录下载和上传操作。如果不配置该选项,则即使配置了log format时,也不会生效。 
log format通过该选项用户在使用transfer logging可以自己定制日志文件的字段. 
其格式是一个包含格式定义符的字符串,但要注意log format使用要在transfer logging选项开启的时候才可以. 
常用的如下: 
%o表示服务端提供什么操作,比如是接收send还是发送recv 
%a表示客户端的IP地址. 
%m表示服务端的模块名称 
%P表示服务端模块指定的路径. 
%t 当前时间 
%u 认证的用户名(匿名时是null) 
%b 实际传输的字节数 
%f表示同步的文件. 
%l表示同步文件的大小. 
如:log format = [op]:%o [ip]:%a [module]:%m [path]:%P [file]:%f [size]:%l

生产应用rsyncd.conf配置文件

我是按照自己的需求来编写rsyncd.conf文件的,首先我希望只有特定的网段可以连接到我的rsync备份服务器进行备份,我两个业务系统的文件要分两个目录进行存储这样方便管理,客户端传送过来的文件中排除特定文件后缀的文件,上传到服务器的文件只有root用户才能进行编辑修改其配置文件如下:

[[email protected] conf]# cat rsyncd.conf 
# Minimal configuration file for rsync daemon
# See rsync(1) and rsyncd.conf(5) man pages for help

# This line is required by the /etc/init.d/rsyncd script
#
#################### GLOBAL OPTIONS #######################################################
#
uid = root
gid = root

use chroot = no 

max connections = 200

# limit access to private LANs
hosts allow = 192.168.100.0/255.255.255.0
hosts deny = * 

# The default is for all modules to be read only
read only = no  
write only = no

incoming chmod = Du=rwx,Dgo=rx,Fu=rwx,Fgo=rx

pid file = /var/run/rsyncd.pid             

lock file = /var/run/rsyncd.lock

# This  parameter determines whether or not the permissions on the secrets file will be checked.  If “strict modes”
# is true, then the secrets file must not be readable by any user ID other than the one that the  rsync  daemon  is running under.
strict modes = yes
secrets file = /usr/local/rsync-3.1.2/conf/rsyncd.secrets  

motd file = /usr/local/rsync-3.1.2/conf/rsyncd.motd 

log file = /var/log/rsyncd.log

transfer logging = yes 

log format = [time]:%t [op]:%o [ip]:%a [module]:%m [path]:%P [file]:%f [size]:%l 
syslog facility = local3
timeout = 300

###################################### MODULE OPTIONS ###############################################
[xn_backup]               
path = /home/fbackup/xn_backup                 
list=yes                                 
ignore errors                              
auth users = xn                          
comment = xn_backup home                  
exclude = upload/ log/ logs/ data/ temp/ tmp/ bak/ *.log *.out *.csv *.txt *.dat *.tar *.zip *.tar.gz *.CSV *.rpm *.tgz *.cap *.bin *.iso *.pcap *.gz *.csv.gz *.CSV.gz

[ot_backup]
path = /home/fbackup/ot_backup
list=yes
ignore errors
auth users = ot
comment = ot_backup home
exclude = upload/ log/ logs/ data/ temp/ tmp/ bak/ *.log *.out *.csv *.txt *.dat *.tar *.zip *.tar.gz *.CSV *.rpm *.tgz *.cap *.bin *.iso *.pcap

rsyncd.motd文件

[[email protected] conf]# cat rsyncd.motd 
+++++++++++++++++++++++++++
+      rsync backup       +
+++++++++++++++++++++++++++

rsyncd.secrets文件

[[email protected] conf]# ls -l rsyncd.secrets 
-rw-------. 1 root root 26 7月  19 11:55 rsyncd.secrets
[[email protected] conf]# cat rsyncd.secrets 
xn:redhat123
ot:redhat123

全部配置好了后,就可以启动rsync daemon服务了

[[email protected] conf]# /usr/local/rsync-3.1.2/bin/rsync --daemon --config=/usr/local/rsync-3.1.2/conf/rsyncd.conf
[[email protected] conf]# ps -ef|grep rsync
root     115113      1  0 12:10 ?        00:00:00 /usr/local/rsync-3.1.2/bin/rsync --daemon --config=/usr/local/rsync-3.1.2/conf/rsyncd.conf
root     123185  97353  0 12:55 pts/1    00:00:00 grep rsync
[[email protected] conf]#

从客户端上小试牛刀一把(具体详见续章利用rsync备份生产应用(二))

备份cdh-datanode1(192.168.100.101)上的/home目录下的所有内容到rsync服务器(192.168.100.100)上

首先登录到cdh-datandoe1上,切换到root用户下在/etc/目录下新建rsync.passwd文件,里面填写认证密码,认证密码先需要在服务端rsyncd.secrets上配置好,其文件权限需要设置为600.

[[email protected] home]# ls -l /etc/rsync.passwd -rw-------. 1 root root 10 7月  19 12:00 /etc/rsync.passwd
[[email protected] home]# cat /etc/rsync.passwd 
 redhat123
[[email protected] home]#

备份文件到备份服务器(push)

常用需求:备份应用数据到统一备份服务器

[[email protected] home]# /usr/bin/rsync -azvP --password-file="/etc/rsync.passwd" /home/ [email protected]::xn_backup/cdh-datanode1
+++++++++++++++++++++++++++
+      rsync backup       +
+++++++++++++++++++++++++++

sending incremental file list
created directory cdh-datanode1
./
kl/
kl/.bash_logout
100%    0.00kB/s    0:00:00 (xfer#1, to-check=73/76)
kl/.bash_profile
100%  171.88kB/s    0:00:00 (xfer#2, to-check=72/76)
kl/.bashrc
100%  121.09kB/s    0:00:00 (xfer#3, to-check=71/76)
kl/.gnome2/
kl/ss/
kl/ss/auditd
100%    3.41MB/s    0:00:00 (xfer#4, to-check=68/76)
kl/ss/blk-availability
100%    1.28MB/s    0:00:00 (xfer#5, to-check=67/76)
kl/ss/crond
100%    1.35MB/s    0:00:00 (xfer#6, to-check=66/76)
kl/ss/functions
100%    3.46MB/s    0:00:00 (xfer#7, to-check=65/76)
kl/ss/halt

从备份服务器下载文件(pull)

常用需求:某个应用服务器上的文件被误删了,现在需要恢复这个文件

客户端模拟重要文件被误删

[[email protected] kl]# cd ss/
[[email protected] ss]# ls
auditd            functions  iptables  killall       mdmonitor   netfs    nfs-rdma  postfix  restorecond  rsyslog      saslauth
blk-availability  halt       jexec     lvm2-lvmetad  messagebus  network  ntpd      rdisc    rhnsd        salt-minion  single  
crond             ip6tables  kdump     lvm2-monitor  netconsole  newss    ntpdate   rdma     rhsmcertd    sandbox      ss
[[email protected] ss]# rm functions 
rm:是否删除普通文件 "functions"?y
[[email protected] ss]# ls
auditd            ip6tables  killall       messagebus  newss     postfix      rhnsd        sandbox    sshd
blk-availability  iptables   lvm2-lvmetad  netconsole  nfs-rdma  rdisc        rhsmcertd    saslauthd  udev-post
crond             jexec      lvm2-monitor  netfs       ntpd      rdma         rsyslog      single
halt              kdump      mdmonitor     network     ntpdate   restorecond  salt-minion  ss
[[email protected] ss]# pwd
/home/kl/ss
[[email protected] ss]#

到备份服务器端查看备份的文件,查询到后,直接在客户端利用rsync进行备份还原

[[email protected] ss]# pwd
/home/fbackup/xn_backup/cdh-datanode1/kl/ss
[[email protected] ss]# ls
auditd            functions  iptables  killall       mdmonitor   netfs    nfs-rdma  postfix  restorecond  rsyslog      saslauthd  sshd
blk-availability  halt       jexec     lvm2-lvmetad  messagebus  network  ntpd      rdisc    rhnsd        salt-minion  single     udev-post
crond             ip6tables  kdump     lvm2-monitor  netconsole  newss    ntpdate   rdma     rhsmcertd    sandbox      ss
[[email protected] ss]#

在客户端利用rsync进行备份还原,这里有一点要非常注意的就是源路径地址最后的/,加/表示同步数据的时候不包含ss目录只同步ss目录下面的文件,不加/表示包含ss目录

[[email protected] ss]# /usr/bin/rsync -azvP --password-file="/etc/rsync.passwd" [email protected]::xn_backup/cdh-datanode1/kl/ss/ /home/kl/ss/
+++++++++++++++++++++++++++
+      rsync backup       +
+++++++++++++++++++++++++++

receiving incremental file list
./
functions
100%   24.24MB/s    0:00:00 (xfer#1, to-check=65/70)

sent 64 bytes  received 8777 bytes  17682.00 bytes/sec
total size is 332288  speedup is 37.58
[[email protected] ss]# ls
auditd            halt       kdump         mdmonitor   network   ntpdate  restorecond  salt-minion  ss
blk-availability  ip6tables  killall       messagebus  newss     postfix  rhnsd        sandbox      sshd
crond             iptables   lvm2-lvmetad  netconsole  nfs-rdma  rdisc    rhsmcertd    saslauthd    udev-post
functions         jexec      lvm2-monitor  netfs       ntpd      rdma     rsyslog      single
[[email protected] ss]#
时间: 2024-08-30 01:02:34

利用rsync备份生产应用(一)的相关文章

利用rsync备份生产应用(二)

概述 上节主要是针对rsync服务端进行的配置和详解,本节主要针对在客户端上的rsync配置进行讲解. rsync用法 本地到本地 语法:rsync [OPTION...] SRC... [DEST] 用法示例一:将/home/kl/ss目录里的内容同步到/home/kl/ss_new目录中 [[email protected] ~]$ ls -l 总用量 16 drwxr-xr-x. 4 root root 4096 7月 19 12:23 newss drwxr-xr-x. 4 kl kl

LinuxShell脚本之利用rsync+ssh实现Linux文件系统远程备份

功能介绍: 该脚本用于定期(结合crontab一起使用)将本地目录通过rsync+ssh传输到远程服务器,每次执行都生成一个带有以时间命名的目录,并且当前最新版本的数据链接到一个名字叫current的符号链接上,便于查找和恢复.在数据传输完成前,会传输到临时目录下,这个临时目录被命名为"时间-incomplete".超过10天的备份将被删除,超过10天的日志文件也将被删除. 运行原理: 脚本运行的核心就在于ssh的互信和rsync命令.利用rsync能实现压缩传输,节省传输时间. 感谢

利用rsync+inotify实现数据同步

利用rsync+inotify实现数据同步 一.rsync概念: rsync是Linux系统下文件同步可数据传输的工具,采用rsync算法使客户机与服务器,主服务器与 备份服务器数据同步.rsync也能实现中断后恢复传输.rsync支持增量备份. 二.rsync的模式: 1.本地模式. 2.远程shell模式 3.查询模式 4.C/S模式 安装rsync: tar xvf rsync-3.0.9.tar.gz cd rsync-3.0.9 ./configure make && make

利用Rsync进行文件同步

1 需求 先描述下需求,有时候后台经常要同步一些数据,然而又不想每次都全量同步.举个例子,有一个单点物理机,在上面部署了很多脚本和数据的目录,这些脚本又提供给外部来使用,这样的话,如果这台物理机器挂了,部署在上面的脚本都丢失了,这样导致外部调用都失败了,而且你不好恢复这些脚本,这些脚本都可能和目录结构有很强的关联性. 2 原始办法 每天定时打包脚本和数据目录,通过scp传到备份的机器上,来实现数据同步,这样有个缺点是,每次的数据同步都需要全量同步,如果数据文件目录很大的话,同步时间就会非常长,而

Windows下利用rsync实现邮件服务器数据的同步

Windows下利用rsync实现邮件服务器数据的同步 背景环境 对系统管理员来说,平时的工作重心应该集中在维护 系统正常运转,能够正常提供服务上,这里往往牵涉到 一个数据备份的问题,在我所了解的情况中,有80%的系统管理员不是太关心自己服务器的安全性,但往往对 备份镜像的技术相当感兴趣,但由于商业产品的软硬件价格都相当高昂,因此往往会选择自由软件.rsync就 是这样的软件,它可以满足绝大多数要求不是特 别高的备份需求.适用于数据不是很大,海量小的文件的存储备份,结合服务器本身的磁盘阵列技术,

使用rsync备份系统快照

1.将源目录复制到目的端: rsync -av /home/file/data /backup/file/data 2.将数据备份到远程服务器或主机 rsync -av /home/file/data [email protected]:/home/file/data 3.将远程服务器上的数据恢复到本地主机: rsync -av [email protected]:/home/file/data /home/file/data 4.通过网络进行传输时,压缩数据能够显示传输效率,使用-z指定在网络

利用rsync+inotify实现主从服务器数据同步的简单案例

写在前面:如果此文有幸被某位朋友看见并发现有错的地方,希望批评指正.如有不明白的地方,愿可一起探讨. rsync是Linux下一款非常强大的同步工具,其最大的劣势在于每次执行rsync命令都会遍历目标目录.想象一下这样一种情况:当目录下改动的文件数量并不多且目录下本身文件数量达到一定规模时,每次遍历都会消耗很多资源.那么有没有这样一种工具,当某文件改动后,主动触发rsync命令去同步修改过的文件呢?答案是肯定的,要不然就没有这篇文章了,这个工具就是:inotify. 接下来,本文就利用rsync

利用增量备份恢复因归档丢失造成的DG gap

故障现象:data guard归档出现gap,悲剧的是丢失的归档在主库上被rman备份时删除了,丢失的归档大约有20几个,数据库大小约2T,如果重建DG将非常耗时间,因此决定利用增量备份的方式恢复DG,主要步骤如下:1.备份备库spfile文件SQL> create pfile='/home/ora/pfileRdg.ora' from spfile; 2.查看当前备库scnSQL> select to_char(current_scn) from v$database; TO_CHAR(CU

windows下通过rsync备份AD域控文件到linux服务器

需要用到的工具cwrsync:http://down.51cto.com/data/2103716 windows上用到的bat脚本: @echo off set fdate=%date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%     echo %fdate% ldifde -f %fdate%.ldf move %fdate%.ldf D:\adbackup\addata D:\adbackup\command\cwRsync