昨天终于拿到服务器权限,今天第一次登上线上的服务器协助开发人员做远程备份。由于是第一次,心里多少有点负担,生怕做不好(其实更怕做出什么×××的事...)

      开发人员要求将积分的目录备份到两台服务器上,用到的工具是rsync,本来挺简单的一件事,结果由于太久没用,还有不够细心,过程中出现了一些小问题,还好leader帮忙指导一二最终也算是顺利交付任务了,下面记录下今天的过程和遇到的问题。


任务具体要求如下:

   协助开发人员A将积分副本同步到目标主机下。

   源服务器:192.168.1.1

   目标服务器:192.168.1.2 192.168.1.3

   服务器平台Ubuntu


配置过程

==============目标服务器==============

目标服务器上,配置文件(默认不存在),需要手动添加

wuguihong1@ubuntu:~$ vim /etc/rsyncd.conf
uid = www
gid = www
pid file=/tmp/rsyncd.pid
log file = /var/log/rsyncd.log
[jifen]
path=/data/app-jifen/
auth users=jifen
read only = no
strict modes = yes
secrets file = /etc/rsyncd.pass
hosts allow= 192.168.1.1
hosts deny = *


创建密码文件
wuguihong1@ubuntu:~$ sudo vim /etc/rsyncd.pass
jifen:jifen@passwd


确保密码文件权限为600,否则会报错

wuguihong1@ubuntu:~$ sudo chmod 600 /etc/rsyncd.pass


确保同步的目标目录存在,否则会报错

wuguihong1@ubuntu:~$ sudo mkdir /data/app-jifen/


确保目录属主与 rsyncd.conf 中的配置一致

wuguihong1@ubuntu:~$ sudo chown www.www /data/app-jifen/


==============源服务器==============

root@ubuntu:/home/wuguihong1# echo "jifen@passwd" > /etc/rsync.pass
root@ubuntu:/home/wuguihong1# chmod 600 /etc/rsync.pass


测试

root@ubuntu:/etc# rsync -vzrtopg --delete /tmp/testrsync [email protected]::jifen --password-file=/etc/rsync.pass
sending incremental file list
testrsync
sent 70 bytes received 27 bytes 194.00 bytes/sec

total size is 0 speedup is 0.00


root@ubuntu:/etc# rsync -vzrtopg --delete /tmp/testrsync jifen@192.168.1.3::jifen --password-file=/etc/rsync.pass
sending incremental file list
testrsync
sent 70 bytes received 27 bytes 64.67 bytes/sec
total size is 0 speedup is 0.00


       到这里配置就完成了,实际上不是什么难事,只不过原本上面就跑了一个进程(/usr/local/rsync),我一上去就往这个目录上配,一直出错,后来问过才知道是要自己搞多一个进程...wtf,看来得事先多做做沟通才行。


    PS: 配置完成后,最好随手加上对进程的监控,一旦进程死掉,则自动拉起来;加上开机自启动;

#监控进程

root@ubuntu:/home/wuguihong1# /etc/default/rsync
RSYNC_ENABLE=false
修改为

RSYNC_ENABLE=true


root@ubuntu:/home/wuguihong1# vim /etc/crontab  //加上下面一行

*/1 * * * * root ps -C rsync || /etc/init.d/rsync start


#开机自启动

root@ubuntu:/home/wuguihong1# cd /etc/rc2.d

root@ubuntu:/home/wuguihong1# ln -s ../init.d/rsync S50rsync


由于后来需要配置好几台机器,干脆写了脚本来处理:

#!/bin/bash
ip_allow = "192.168.1.1"
backdir = "/data/webapps"
user = "jifen"
#配置rsyncd.conf
cat << EOF >> /etc/rsyncd.conf
uid = www-data
gid = www-data
pid file=/tmp/rsyncd.pid
log file = /var/log/rsyncd.log
[jifen]
path=$backdir
auth users=$user
read only = no
strict modes = yes
secrets file = /etc/rsyncd.pass
hosts allow= $ip_allow
hosts deny = *
EOF
#配置rsync密码文件
echo "jifen:jifen@rsync" > /etc/rsyncd.pass
chmod 600 /etc/rsyncd.pass
#监控进程存活
sed -i "s/RSYNC_ENABLE=false/RSYNC_ENABLE=true/" /etc/default/rsync
cd /etc/rc2.d
ln -s ../init.d/rsync S50rsync
cd
echo "*/1 * * * * root ps -C rsync || /etc/init.d/rsync start" >> /etc/crontab
/etc/init.d/rsync start



操作过程中遇到的问题:

问题一
root@ubuntu:/etc# rsync -vzrtopg --delete /tmp/testrsync [email protected]::jifen --password-file=/etc/rsync.pass
@ERROR: auth failed on module jifen

rsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]


解决办法:
(1) 检查服务、客户端密码文件是否正确:服务端密码文件(这里为/etc/rsync.pass) 的格式为 用户:密码; 客户端密码文件为:密码 (没有用户名)
(2)检查密码文件的权限是否正确

wuguihong1@ubuntu:~$ ps aux|grep rsync
root 3978 0.0 0.0 12576 752 ? Ss 16:44 0:00 rsync --daemon --config /etc/rsyncd.conf
wuguihong1@ubuntu:~$ ll /etc/rsyncd.*
-rw-r--r-- 1 root root 298 Apr 25 17:04 /etc/rsyncd.conf
-rw------- 1 root root 18 Apr 25 17:05 /etc/rsyncd.pass


问题二
root@ubuntu:/etc# rsync -vzrtopg --delete /tmp/testrsync [email protected]::jifen --password-file=/etc/rsync.pass
sending incremental file list
testrsync
rsync: mkstemp "/.testrsync.k4hMJP" (in jifen) failed: Permission denied (13)
sent 70 bytes received 27 bytes 64.67 bytes/sec
total size is 0 speedup is 0.00
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1058) [sender=3.0.5]
解决办法:
检查服务器端的目录(备份目录)是否存在,并检查其权限。创建目录并修正权限可解决问题。

问题三
root@ubuntu:/etc# rsync -vzrtopg --delete /tmp/testrsync [email protected]::jifen --password-file=/etc/rsync.pass
password file must not be other-accessible
continuing without password file
Password:
解决办法:
检查服务端和客户端上的密码配置文件权限是否为600(只能为600),若不是可以通过命令 chmod 600 rsync.pass 修改即可