分类: LINUX
2008-10-20 13:58:45
两个服务器(A和B)分别放在电信和网通!笔者要解决的是将两个服务器,用户所上传的文件,能够同时存放在A和B上,实现数据的同步.
现采用LINUX下的RSYNC软件实现.
操作系统A和B都为AS4.先介绍一下A服务器RSYNC的安装
1.下载RSYNC软件:
wget
2.解压安装
tar -zxvf rsync-2.6.9.tar.gz
cd rsync-2.6.9
./configure --prefix=/usr/local/rsync
make ; make install
3.安装完成后,在rsync.2.6.9中,并无RSYNC的配置文件,故,我们要手工创建
vi /etc/rsyncd.conf
uid=nobody #用户ID
gid=nobody #组ID
max connections=4 #最大连接数
use chroot=no #不允许更改目录
log file=/var/log/rsyncd.log #日志文件
pid file=/var/run/rsyncd.pid #PID文件
lock file=/var/run/rsyncd.lock # LOCK文件
secrets file=/etc/rsyncd.pwd #客户端用来连接服务器的用户及密码文件(可随便起名)
hosts allow = 1.1.1.1(可设成B的IP),2.2.2.2 #允许连接本机的IP
hosts deny = 0.0.0.0/0 #拒绝连接本机的IP
[upfiles] #共享名
path=/var/www/test #真实的路径
comment = backup upfiles #解释
ignore errors #忽略错误
read only = no #对该目录只读
list = yes #不允许列出目录
auth users = upfiles #连接允许的用户,如果多个用户,可在逗句后填加
4.再来创建密码文件.
vi /etc/rsyncd.pwd
upfiles:111111
如果有多个用户,在第二行列出!
处于安全原因,要将该文件更改权限(如果不更改权限,后期复制时,会出现错误)
chmod 600 /etc/rsyncd.pwd
注:此用户和密码,非系统用户的密码,也就是说系统中无需创建upfiles用户!
5.运行服务:
/usr/local/rsync/bin/rsync --daemon
此时用ps -aux|grep rsync就能看到rsync --daemon进程!
6.测试:
/usr/local/rsync/bin/rsync upfiles://upfiles@192.168.1.245 /usr/local/1
B服务器上暂时我们只设置这的客户端的功能,也就是说,只从服务器A中同步数据!所以我们也要安装RSYNC软件,安装方法同上!
安装完成后,先进行手工同步测试
/usr/local/rsync/bin/rsync -vazu --progress upfiles@192.168.1.245::upfiles /usr/local/1
要求输入密码(服务器上设置的)后,有看到复制数据的信息.表明成功!因为我们想让数据同步的过程自动化,所以我们要创建个脚本:
vi /usr/local/rsync/test.sh
/usr/local/rsync/bin/rsync -vzrutogp --progress --password-file=/etc/rsyncclien
t.pwd upfiles@210.51.48.130::upfiles /var/www/test
说明:--password-file提明连接请求的密码文件,这个我们也要手工建立
vi /et/rsyncclient.pwd
只输入密码,不要输入用户名,在这里,我们只要输入111111,保存退出即可!
我们手工执行一次 sh /usr/local/rsync/test.sh,如果成功,直接写入crontab中即可!
crontab -e
*/5 * * * * sh /usr/local/rsync/test.sh
那么,当服务器A中填加一个文件,或某一个文件,有任何变化,B服务器都会跟前发生变化!但是,如果服务器A中的一个文件删除了,A是不能将其删除的!
如果你想真正的实现A,B服务器相同,可在test.sh的rsync命令后加入参数--delete即可!
我没有加,是因为我不但要保证A服务器文件变化要复制到B上去,同时我还要将服务器B上的文件变化转到A上去!所以不能加--delete参数,否则两个服务器文件的同步,无法实现!
同样的配置,反过来,将B设成服务器,将A设成客户端,两个服务器上的文件即可同步,唯一的一个问题是,采用这种方法,可以使文件完全相同,但任何一个服务器上删除文件,都将不成功,它会在另外一台复制回来!不知是否可以解决这个问题!如果我研究出来了,会及时发布出来!
PS:当在同步时候出现下面的情况:
rsync: link_stat "." (in upfiles) failed: Permission denied (13)
出现这个问题是因为权限不够,我们可以把模块配置的目录权限设置为755,这样我们就可以来同步