Rsync原理详解及部署(4)

1)在同样的密码文件下添加用户的密码 600权限(文件不一定要和服务端的一样,但为了方便管理,建议一样的)

推送#rsync –avz –P /tmp/atong rsync_back@192.168.1.1::atong

最后面的::表示是以daemon模式,并且是oldboy模块。此模块的名称必须和配置文件中的一样。

#rsync–avz –P /tmp/atong rsync://rsync_back@192.168.1.1:/atong/ hosts

--password-file=/etc/rsync.password

此方式的推送,最后面的/atong/跟的并不是模块名称,而是直接接上目录路径。[此目录是不是只能够接上,服务器上配置的同步目录]

实例:

[root@CT5_6-32-220-NFS01 data]# cat/etc/rsyncd.conf

uid = root

gid = root

user chroot = no

max connections =200

timeout = 300

pid file =/var/run/rsyncd.pid

locake file =/var/run/rsync.lock

log file = /var/log/rsyncd.log

[tmp]

path=/tmp/

ignore errors

read only = false

list = false

hosts allow = 192.168.40.0/22

hsots deny=0.0.0.0/32

authusers = rsync_back

secretsfile= /etc/rsync.password

[/data/rsync/]

path=/data/rsync/

read only = false

auth users = rsync_back

secrets file = /etc/rsync.password

###

root@CT5_6-32-220-NFS01 tmp]# mkdir /data ##创建模块中使用到的目录

mkdir: cannot create directory `/data': File exists

[root@CT5_6-32-220-NFS01 tmp]# cd /data

[root@CT5_6-32-220-NFS01 data]# echo"rsync_back:123456" >> /etc/rsync.password

[root@CT5_6-32-220-NFS01 data]# chmod 600 /etc/rsync.password##注意密码文件的权限为600权限。

[root@CT5_6-32-220-NFS01 data]# rsync –daemon 启动

[root@CT5_6-32-220-NFS01 data]# netstat -lnt | grep873 ##查看系统中是否已经启动rsync

tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN

###配置客户端:客户端中只需要存放用户的密码,并且权限为600即可###

[root@CT56-32-221-NFS02 dir01]# echo "123456" >>/etc/rsync.password

[root@CT56-32-221-NFS02 dir01]# chmod 600/etc/rsync.password

第一种拉取方式:

[root@CT56-32-221-NFS02 tmp]# rsync -avz rsync_back@192.168.41.220::tmp /tmp/ ##其中

[root@CT56-32-221-NFS02 tmp]# ll

total 20

drwxr-xr-x 84 root root 4096 Jun 20 10:28 2

drwxr-xr-x 3root root 4096 Jun 20 10:19 dir01

drwxr-xr-x 3root root 4096 Jun 20 09:43 dir02

drwxr-xr-x 84 root root 4096 Jun 19 05:25 etc

drwx------ 2root root 4096 Jun 20 07:40 ssh-ZQBmZ29557

说明:如果是加上-delete进行推送,那么我指定的本地目录的内容有哪些,远端目录的内容也就只有哪些。如我原本指定/tmp/atong/ 和远端/atong/一样。后来又再创建了一个/delete目录且为空,那么我再推送/tmp/delete/和远端/atong/目录,那么远端原来有的所有内容都会被删除掉,因为此时的/delete/目录有啥,远端也就有啥。

一些示例脚本
这里这些脚本都是rsync网站上的例子:


1、每隔七天将数据往中心服务器做增量备份

#!/bin/sh
# This script does personal backups to a rsyncbackup server. You will end up
# with a 7 day rotating incremental backup. Theincrementals will go
# into subdirectories named after the day of theweek, and the current
# full backup goes into a directory called"current"
# tridge@linuxcare.com

# directory to backup
BDIR=/home/$USER

# excludes file - this contains a wildcard patternper line of files to exclude
EXCLUDES=$HOME/cron/excludes

# the name of the backup machine
BSERVER=owl

# your password on the backup server
export RSYNC_PASSWORD=XXXXXX


########################################################################
BACKUPDIR=`date +%A`
OPTS="--force --ignore-errors--delete-excluded --exclude-from=$EXCLUDES
--delete --backup --backup-dir=/$BACKUPDIR -a"
export PATH=$PATH:/bin:/usr/bin:/usr/local/bin
# the following line clears the last weeks incrementaldirectory
[ -d $HOME/emptydir ] || mkdir $HOME/emptydir
rsync --delete -a $HOME/emptydir/$BSERVER::$USER/$BACKUPDIR/
rmdir $HOME/emptydir
# now the actual transfer
rsync $OPTS $BDIR $BSERVER::$USER/current
2、备份至一个空闲的硬盘
#!/bin/sh
export PATH=/usr/local/bin:/usr/bin:/bin
LIST="rootfs usr data data2"
for d in $LIST; do
mount /backup/$d
rsync -ax --exclude fstab --delete /$d/ /backup/$d/
umount /backup/$d
done
DAY=`date "+%A"`
rsync -a --delete /usr/local/apache/data2/backups/$DAY
rsync -a --delete /data/solid /data2/backups/$DAY
3、对vger.rutgers.educvs树进行镜像
#!/bin/bash
cd /var/www/cvs/vger/
PATH=/usr/local/bin:/usr/freeware/bin:/usr/bin:/bin
RUN=`lps x | grep rsync | grep -v grep | wc -l`
if [ "$RUN" -gt 0 ]; then
echo already running
exit 1
fi
rsync -az vger.rutgers.edu::cvs/CVSROOT/ChangeLog$HOME/ChangeLog
sum1=`sum $HOME/ChangeLog`
sum2=`sum /var/www/cvs/vger/CVSROOT/ChangeLog`
if [ "$sum1" = "$sum2" ]; then
echo nothing to do
exit 0
fi
rsync -az --delete --force vger.rutgers.edu::cvs//var/www/cvs/vger/
exit 0
FAQ
Q:如何通过ssh进行rsync,而且无须输入密码?
A:可以通过以下几个步骤
1. 通过ssh-keygenserver A上建立SSH keys,不要指定密码,你会在~/.ssh下看到identityidentity.pub文件
2. server B上的home目录建立子目录.ssh
3. Aidentity.pub拷贝到server B
4. identity.pub加到~[user b]/.ssh/authorized_keys
5. 于是server A上的A用户,可通过下面命令以用户B sshserver B上了
e.g. ssh -l userB serverB
这样就使server A上的用户A就可以ssh以用户B的身份无需密码登陆到serverB上了。
Q:如何通过在不危害安全的情况下通过防火墙使用rsync?
A:解答如下:
这通常有两种情况,一种是服务器在防火墙内,一种是服务器在防火墙外。无论哪种情况,通常还是使用ssh,这时最好新建一个备份用户,并且配置 sshd仅允许这个用户通过RSA认证方式进入。如果服务器在防火墙内,则最好限定客户端的IP地址,拒绝其它所有连接。如果客户机在防火墙内,则可以简单允许防火墙打开TCP端口22的ssh外发连接就ok了。
Q:我能将更改过或者删除的文件也备份上来吗?
A:当然可以:
你可以使用如:rsync -other -options-backupdir = ./backup-2000-2-13 ...这样的命令来实现。
这样如果源文件:/path/to/some/file.c改变了,那么旧的文件就会被移到./backup-2000-2-13/path/to/some/file.c,
这里这个目录需要自己手工建立起来
Q:我需要在防火墙上开放哪些端口以适应rsync
A:视情况而定
rsync可以直接通过873端口的tcp连接传文件,也可以通过22端口的ssh来进行文件传递,但你也可以通过下列命令改变它的端口:
rsync --port 8730 otherhost::
或者
rsync -e 'ssh -p 2002' otherhost:
Q:我如何通过rsync只复制目录结构,忽略掉文件呢?
Arsync -av --include '*/' --exclude '*' source-dir dest-dir
Q:为什么我总会出现"Read-only file system"的错误呢?
A:看看是否忘了设"read only = no"
Q:为什么我会出现'@ERROR: invalid gid'的错误呢?
Arsync使用时默认是用uid=nobody;gid=nobody来运行的,如果你的系统不存在nobody组的话,就会出现这样的错误,可以试试gid = nogroup或者其它
Q:绑定端口873失败是怎么回事?
A:如果你不是以root权限运行这一守护进程的话,因为1024端口以下是特权端口,会出现这样的错误。你可以用--port参数来改变。
Q:为什么我认证失败?
A:从你的命令行看来:
你用的是:
>; bash$ rsync -a 144.16.251.213::test test
>; Password:
>; @ERROR: auth failed on module test
>;
>; I dont understand this. Can somebody explainas to how to acomplish this.
>; All suggestions are welcome.
应该是没有以你的用户名登陆导致的问题,试试rsync -amax@144.16.251.213::test test

--------------------------------------自我小结-------------------------------------------

rsycn就是用于同步的工具,只要服务器端配置好,具体的配置参数依据自己的应用而定。而客户端的同步命令也是依据个人的环境而定。倒是之后的的客户端同步脚本我觉得很有用。这次文章好长啊,本来自己的笔记就比较乱,一时没整理好文章的结构出来。大家看看有什么不对的地方,给我提一提。

-----------------------------------------------------------------------------------------

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/bcbfef552aec6dea80bc5c852482e204.html