今天在两台服务器同步备份在用户权限上纠结了很多,主要关于这个问题网上的配置方法不一,源自rsync版本不一致。
[root@mail video]# rsync –version
rsync version 3.0.6 protocol version 30
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.
Web site: rsync.samba.org
Capabilities:
64-bit files, 64-bit inums, 64-bit timestamps, 64-bit long ints,
socketpairs, hardlinks, symlinks, IPv6, batchfiles, inplace,
append, ACLs, xattrs, iconv, no symtimes
rsync comes with ABSOLUTELY NO WARRANTY. This is free software, and you
are welcome to redistribute it under certain conditions. See the GNU
General Public Licence for details.
错误发生在rsync 3.0.6版本,64位 CentOS5.5 系统。
首页这篇文章主要解决的错误是以下:
- @ERROR: auth failed on module ***
- rsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]
- *** 是你/etc/rsyncd.conf 中配置
*** 是你/etc/rsyncd.conf 中配置的模块,我这里用
- password file must not be other-accessible
- continuing without password file
- Password:
- @ERROR: auth failed on module ***
- rsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]
#vi /etc/rsyncd.conf
- uid = nobody
- gid = nobody
- max connections = 4
- read only = true
- #hosts allow = 202.207.177.180
- hosts allow = *
- transfer logging = true
- log format = %h %o %f %l %b
- log file = /var/log/rsyncd.log
- slp refresh = 300
- log file = /var/log/rsyncd.log
- pid file = /var/run/rsyncd.pid
- lock file = /var/run/rsyncd.lock
- [web]
- path = /home/admin/public_html
- comment = Mirror to Hk server
- read only = true
- list = false
- auth users = lixiphp
- [test]
- path = /home/admin/domains/test
- read only = false
- auth users = lixiphp
- secrets file = /etc/rsyncd.secrets
- [root@mail video]# vi /etc/rsyncd.secrets
格式为: username:password
- rsync_user:rsyncofpass
设置权限为只读:
- chmod 600 /etc/rsyncd.secrets
- rsync –daemon –config=/etc/rsyncd.conf
如果提示
- failed to create pid file /var/run/rsyncd.pid: File exists
使用指令
- rm -rf /var/run/rsyncd.pid
- [root@mail video]# ps -ef | grep rsync
- root 27284 1 0 10:26 ? 00:00:00 rsync –daemon –config=/etc/rsyncd.conf
- root 30516 29986 0 18:35 pts/3 00:00:00 grep rsync
- [root@mail video]# kill -9 27284
- [root@mail video]# rsync –daemon –config=/etc/rsyncd.conf
这样服务器A配置成功!
一般错误都会发生在服务器B,注意这部分的讲解!
通过CentOS yum install rsync,安装rsync服务。
在rsync安装之后,运行以下指令同步备份:
- rsync -vzrtopg –progress –delete –password-file=/home/admin/admin_backups/password.rsync rsync://[email protected]/test /home/admin/admin_backups/test
地址rsync://[email protected]/test,lixiphp为服务器A用户,203.171.237.245服务器A IP地址或者域名 test为服务器A配置模块
密码存放在/home/admin/admin_backups/password.rsync,这里存放位置,可自由安排。
password.rsync内容格式为: password
- rsyncofpass
设置权限为只读:
- chmod 600 /home/admin/admin_backups/password.rsync
用户密码错误
- @ERROR: auth failed on module test
- rsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]
检查服务器A存储密码文件和服务器B密码文件。
文件权限错误
- password file must not be other-accessible
- continuing without password file
- Password:
- @ERROR: auth failed on module ***
- rsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]
检查服务器A存储密码文件和服务器B密码文件。
- [root@hk admin_backups]# vi backup.sh
内容如下:
- #/bin/sh
- rsync -vzrtopg –progress –delete –password-rsyncfile=/home/admin/admin_backups/password.rsync ://[email protected]
添加定时任务:
- [root@hk admin_backups]# crontab –e
添加以下内容:
- */1 * * * * /home/admin/admin_backups/backup.sh > /dev/null 2>&1
每个一分钟从服务器A同步到服务器B!
- rsync -vzrtopg –progress –delete –password-file=/home/admin/admin_backups/password.rsync /home/admin/admin_backups/test rsync://[email protected]/test
请确保服务器A同步用户lixiphp,对模块test所在目录有读、写、执行的权限
补充:rsync+inotify 实时同步
A服务器实时同步到B服务器做法:
B服务器部署rsync服务端,B服务器配置rsync客户端和编译安装inotify
实时同步原理:
inotify监测和同步脚本:
- #!/bin/bash
- host=192.168.1.1
- src=/wwwroot/www/jythonscript/
- dst=jythonscript
- user=rsync
- /usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src \
- | while read files
- do
- /usr/local/bin/rsync -vzrtopg --delete --progress $src $user@$host::$dst --password-file=/etc/rsyncd.password
- echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
- done
inotifywait监测文件是否发生变化,如果有变化就执行rsync,同步相应的文件!