| 您的当前位置:首页 --> CentOS入门 |
| Centos 下rsync数据同步 |
| 浏览次数:2253 关键词 ( 数据同步 Centos rsync ) |
|
简介 通过网络进行远程数据备份或者网站镜象的最简单的方法就是使用wget,但是这种方式每次都需要将所有数据都重新在网络上传输一遍,而不考虑哪些文件是经过更新的,因此效率非常低下。尤其在需要备份的数据量很大的时候,往往需要花费数个小时来在网络上进行数据传输。 因此这里就介绍一种高效的网络远程备份和镜象工具-rsync,它可以满足绝大多数要求不是特别严格的备份需求。 rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了–remote sync。它的特性如下:
可以镜像保存整个目录树和文件系统。 img/20170809/fxuamjajt03 目前最新版本为2.4.6。可以选择从原始网站下载:img/20170809/fxuamjajt03ftp/rsync/。也可以选择从本站下载:rsync 2.4.6。
编译安装
[root@www rsync-2.4.6]# ./configure 但是需要注意的是必须在服务器A和B上都安装rsync,其中A服务器上是以服务器模式运行rsync,而B上则以客户端方式运行rsync。这样在web服务器A上运行rsync守护进程,在B上定时运行客户程序来备份web服务器A上需要备份的内容。
rsync服务器 在web服务器A上需要以守护进程方式来启动rsync服务器,只需要运行: [root@www rsync-2.4.6]# /usr/local/bin/rsync –daemon 即可启动。rsync默认服务端口为873,服务器在该端口接收客户的匿名或者认证方式的备份请求。 如果要在启动时把服务起来,有几种不同的方法,比如: a、加入inetd.conf 编辑/etc/services,加入rsync 873/tcp,指定rsync的服务端口是873。编加/etc/inetd.conf,加入rsync stream tcp nowait root /bin/rsync rsync –daemon 注:对于xinetd,设置方法类似。 b、加入rc.local 编辑/etc/rc.d/rc.local,在最后添加: /usr/local/bin/rsync –daemon 2、rsync的配置 对于rsync服务器来说,最重要和复杂的就是它的配置了。rsync服务器的配置文件为/etc/rsyncd.conf,其控制认证、访问、日志记录等等。 该文件是由一个或多个模块结构组成。一个模块定义以方括弧中的模块名开始,直到下一个模块定义开始或者文件结束,模块中包含格式为name = value的参数定义。每个模块其实就对应需要备份的一个目录树,比方说在我们的实例环境中,有三个目录树需要备份:/www/、/home/web_user1/和/home/web_user2/,那么就需要在配置文件中定义三个模块,分别对应三个目录树。 配置文件是行为单位的,也就是每个新行都表示一个新的注释、模块定义或者参数赋值。以#开始的行表示注释,以”"结束的行表示下面一行是该行的继续。参数赋值中等号后可能是一个大小写不敏感的字符串、一个以trure/false表示的布尔值。 全局参数 在文件中[modlue]之前的所有参数都是全局参数,当然也可以在全局参数部分定义模块参数,这时候该参数的值就是所有模块的默认值。 motd file “motd file”参数用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户,默认是没有motd文件的。 log file “log file”指定rsync的日志文件,而不将日志发送给syslog。 pid file 指定rsync的pid文件。 syslog facility 指定rsync发送日志消息给syslog时的消息级别,常见的消息级别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默认值是daemon。 模块参数 在全局参数之后就需要定义一个或多个模块了,模块中可以定义以下参数: comment 给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义。 path 指定该模块的供备份的目录树路径,该参数是必须指定的。 use chroot 如果”use chroot”指定为true,那么rsync在传输文件以前首先chroot到path参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文件。默认情况下chroot值为true。 max connections 指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。默认值是0,也就是没有限制。 lock file 指定支持max connections参数的锁文件,默认值是/var/run/rsyncd.lock。 read only 该选项设定是否允许客户上载文件。如果为true那么任何上载请求都会失败,如果为false并且服务器目录读写权限允许那么上载是允许的。默认值为true。 list 该选项设定当客户请求可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为false,可以创建隐藏的模块。默认值是true。 uid 该选项指定当该模块传输文件时守护进程应该具有的uid,配合gid选项使用可以确定哪些可以访问怎么样的文件权限,默认值是”nobody”。 gid 该选项指定当该模块传输文件时守护进程应该具有的gid。默认值为”nobody”。 exlude 用来指定多个由空格隔开的多个模式列表,并将其添加到exclude列表中。这等同于在客户端命令中使用–exclude来指定模式,不过配置文件中指定的exlude模式不会传递给客户端,而仅仅应用于服务器。一个模块只能指定一个exlude选项,但是可以在模式前面使用”-”和”+”来指定是exclude还是include。 但是需要注意的一点是该选项有一定的安全性问题,客户很有可能绕过exlude列表,如果希望确保特定的文件不能被访问,那就最好结合uid/gid选项一起使用。 exlude from 指定一个包含exclude模式的定义的文件名,服务器从该文件中读取exlude列表定义。 include 用来指定多个由空格隔开的多个rsync并应该exlude的模式列表。这等同于在客户端命令中使用–include来指定模式,结合include和exlude可以定义复杂的exlude/include规则 。一个模块只能指定一个include选项,但是可以在模式前面使用”-”和”+”来指定是exclude还是include。 include from 指定一个包含include模式的定义的文件名,服务器从该文件中读取include列表定义。 auth users 该选项指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。这里的用户和系统用户没有任何关系。如果”auth users”被设置,那么客户端发出对该模块的连接请求以后会被rsync请求challenged进行验证身份这里使用的challenge/response认证协议。用户的名和密码以明文方式存放在”secrets file”选项指定的文件中。默认情况下无需密码就可以连接模块(也就是匿名方式)。 secrets file 该选项指定一个包含定义用户名:密码对的文件。只有在”auth users”被定义时,该文件才有作用。文件每行包含一个username:passwd对。一般来说密码最好不要超过8个字符。没有默认的secures file名,需要限式指定一个。(例如:/etc/rsyncd.secrets) strict modes 该选项指定是否监测密码文件的权限,如果该选项值为true那么密码文件只能被rsync服务器运行身份的用户访问,其他任何用户不可以访问该文件。默认值为true。 hosts allow 该选项指定哪些IP的客户允许连接该模块。客户模式定义可以是以下形式: o xxx.xxx.xxx.xxx,客户主机只有完全匹配该IP才允许访问。例如:192.167.0.1 o a.b.c.d/n,属于该网络的客户都允许连接该模块。例如:192.168.0.0/24 o a.b.c.d/e.f.g.h,属于该网络的客户都允许连接该模块。例如:192.168.0.0/255.255.255.0 o 一个主机名,客户主机只有拥有该主机名才允许访问,例如:backup.linuxaid.com.cn。 o *.linuxaid.com.cn,所有属于该域的主机都允许。 默认是允许所有主机连接。 hosts deny 指定不允许连接rsync服务器的机器,可以使用hosts allow的定义方式来进行定义。默认是没有hosts deny定义。 ignore errors 指定rsyncd在判断是否运行传输时的删除操作时忽略server上的IP错误,一般来说rsync在出现IO错误时将将跳过–delete操作,以防止因为暂时的资源不足或其它IO错误导致的严重问题。 ignore nonreadable 指定rysnc服务器完全忽略那些用户没有访问权限的文件。这对于在需要备份的目录中有些文件是不应该被备份者得到的情况是有意义的。 transfer logging 使rsync服务器使用ftp格式的文件来记录下载和上载操作在自己单独的日志中。 log format 通过该选项用户在使用transfer logging可以自己定制日志文件的字段。其格式是一个包含格式定义符的字符串,可以使用的格式定义符如下所示: o %h 远程主机名 o %a 远程IP地址 o %l 文件长度字符数 o %p 该次rsync会话的进程id o %o 操作类型:”send”或”recv” o %f 文件名 o %P 模块路径 o %m 模块名 o %t 当前时间 o %u 认证的用户名(匿名时是null) o %b 实际传输的字节数 o %c 当发送文件时,该字段记录该文件的校验码 默认log格式为:”%o %h [%a] %m (%u) %f %l”,一般来说,在每行的头上会添加”%t [%p] “。在源代码中同时发布有一个叫rsyncstats的perl脚本程序来统计这种格式的日志文件。 timeout 通过该选项可以覆盖客户指定的IP超时时间。通过该选项可以确保rsync服务器不会永远等待一个崩溃的客户。超时单位为秒钟,0表示没有超时定义,这也是默认值。对于匿名rsync服务器来说,一个理想的数字是600。 refuse options 通过该选项可以定义一些不允许客户对该模块使用的命令参数列表。这里必须使用命令全名,而不能是简称。但发生拒绝某个命令的情况时服务器将报告错误信息然后退出。如果要防止使用压缩,应该是:”dont compress = *”。 dont compress 用来指定那些不进行压缩处理再传输的文件,默认值是 *.gz *.tgz *.zip *.z *.rpm *.deb *.iso *.bz2 *.tbz
rsync客户命令 首先,rsync的命令格式可以为: rsync [OPTION]… SRC [SRC]… [USER@]HOST:DEST rsync [OPTION]… [USER@]HOST:SRC DEST rsync [OPTION]… SRC [SRC]… DEST rsync [OPTION]… [USER@]HOST::SRC [DEST] rsync [OPTION]… SRC [SRC]… [USER@]HOST::DEST
rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST] 拷贝本地文件;当SRC和DES路径信息都不包含有单个冒号”:”分隔符时就启动这种工作模式。 使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:”分隔符时启动该模式。 使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:”分隔符时启动该模式。 从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::”分隔符时启动该模式。 从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::”分隔符时启动该模式。
列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。 在使用rsync传输文件时,需要指定一个源和一个目的,其中一个可能是远程机器的资源信息。例如: rsync *.c foo:src/ 表示将传输当前目录下所有以.c结尾的文件到机器foo的src目录下。如果任何文件已经存在于远程系统,则会调用远程更新协议来实现仅仅传输那些更新过的文件。 rsync -avz foo:src/bar /data/tmp 该命令则递归地传输机器foo上的src/bar目录下的所有内容到本地/data/tmp/bar目录中。文件以归档模式进行传输,以确保符号链结、属性、权限、属主等信息在传输中都被保存。此外,可以使用压缩技术来加快数据传输: rsync -avz foo:src/bar/ /data/tmp 路径信息以”/”结尾时表示拷贝该目录,而不以”/”结尾表示拷贝该目录。当配合使用–delete选项时这两种情况的区别将会表现出来。 也可以以本地模式来使用rsync,如果SRC和DST路径中都没有任何”:”符号则表示该命令运行在本地模式,等同于cp命令。 rsync somehost.mydomain.com:: 这种模式则将会列出somehost.mydomain.com.可以访问的所有模块信息。 选项说明
-v, –verbose 详细模式输出 rsync foo/bar/foo.c remote:/tmp/ 则在/tmp目录下创建foo.c文件,而如果使用-R参数: rsync -R foo/bar/foo.c remote:/tmp/ 则会创建文件/tmp/foo/bar/foo.c,也就是会保持完全路径信息。
-b, –backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用–suffix选项来指定不同的备份文件前缀。 实例分析 这里假设有两台服务器:A和B。其中A是主web服务器,具有域名xucg.me(172.16.1.5),B服务器是备份机,其域名为backup.xucg.me(172.16.1.6)。其中A的web内容存放在:/data/www/我们需要在备份机B上建立对这几个目录内容的备份。 服务器配置实例 那么在xucg.me上创建rsyncd的配置文件/etc/rsyncd.conf,内容如下:
uid = nobody
[www] 这里只允许172.16.1.0备份本机的数据,并且需要认证。三个模块授权的备份用户都为backup,并且用户信息保存在文件/etc/backserver.pas中,其内容如下: backup:back 并且该文件只能是root用户可读写的,否则rsyncd启动时会出错。这些文件配置完毕以后,就需要在A服务器上启动rsyncd服务器: rsync –daemon 客户命令示例 /usr/local/bin/rsync -vzrtopg –delete –progress backup@172.16.1.5::www /backup/www/ –password-file=/etc/rsync.pass 上面这个命令行中-vzrtopg里的v是verbose,z是压缩,r是recursive,topg都是保持文件原有属性如属主、时间的参数。–progress是指显示出详细的进度情况,–delete是指如果服务器端删除了这一文件,那么客户端也相应把文件删除,保持真正的一致。 backup@172.16.1.5::www 表示对该命令是对服务器172.16.1.5中的www模块进行备份,backup表示使用backup来对该模块进行备份。 –password-file=/etc/rsync.pass来指定密码文件,这样就可以在脚本中使用而无需交互式地输入验证密码了,这里需要注意的是这份密码文件权限属性要设得只有root可读。 这里将备份的内容存放在备份机的/backup/www/目录下。
[root@linuxaid /]# /usr/local/bin/rsync -vzrtopg –delete –progress backup@172.16.1.5::www /backup/www/ –password-file=/etc/rsync.pass 可以将客户命令通过crontab -e命令来实现自动备份,如crontab -e:
一些示例脚本 1、每隔七天将数据往中心服务器做增量备份 #!/bin/sh
# This script does personal backups to a rsync backup server. You will end up
# directory to backup
# excludes file – this contains a wildcard pattern per line of files to exclude
# the name of the backup machine
# your password on the backup server ########################################################################
BACKUPDIR=`date +%A` export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
# the following line clears the last weeks incremental directory
# now the actual transfer 2、备份至一个空闲的硬盘 #!/bin/sh export PATH=/usr/local/bin:/usr/bin:/bin LIST=”rootfs usr data data2″
for d in $LIST; do DAY=`date “+%A”`
rsync -a –delete /usr/local/apache /data2/backups/$DAY 3、对vger.rutgers.edu的cvs树进行镜像 #!/bin/bash
cd /var/www/cvs/vger/
RUN=`lps x | grep rsync | grep -v grep | wc -l` rsync -az vger.rutgers.edu::cvs/CVSROOT/ChangeLog $HOME/ChangeLog
sum1=`sum $HOME/ChangeLog`
if [ "$sum1" = "$sum2" ]; then
rsync -az –delete –force vger.rutgers.edu::cvs/ /var/www/cvs/vger/
FAQ
1. 通过ssh-keygen在server A上建立SSH keys,不要指定密码,你会在~/.ssh下看到identity和identity.pub文件
Q:如何通过在不危害安全的情况下通过防火墙使用rsync? 这通常有两种情况,一种是服务器在防火墙内,一种是服务器在防火墙外。无论哪种情况,通常还是使用ssh,这时最好新建一个备份用户,并且配置sshd仅允许这个用户通过RSA认证方式进入。 如果服务器在防火墙内,则最好限定客户端的IP地址,拒绝其它所有连接。如果客户机在防火墙内,则可以简单允许防火墙打开TCP端口22的ssh外发连接就ok了。
Q:我能将更改过或者删除的文件也备份上来吗?
你可以使用如:rsync -other -options -backupdir = ./backup-2000-2-13 …这样的命令来实现。
Q:我需要在防火墙上开放哪些端口以适应rsync? rsync可以直接通过873端口的tcp连接传文件,也可以通过22端口的ssh来进行文件传递,但你也可以通过下列命令改变它的端口:
rsync –port 8730 otherhost::
Q:我如何通过rsync只复制目录结构,忽略掉文件呢?
Q:为什么我总会出现”Read-only file system”的错误呢?
Q:为什么我会出现’@ERROR: invalid gid’的错误呢?
Q:绑定端口873失败是怎么回事?
Q:为什么我认证失败?
你用的是: 应该是没有以你的用户名登陆导致的问题,试试rsync -a max@144.16.251.213::test test |
| 下载次数:13 |
| 下载地址:点击下载 |
| 本资源为程序自动采集,如有侵权请联系我们移除 admin#80vps.com 来信请将#替换为@ |
| 下一条 centos系统中网络配置相关 上一条 CentOS系统时间修改 |