Chinaunix首页 | 论坛 | 博客
  • 博客访问: 289104
  • 博文数量: 78
  • 博客积分: 3018
  • 博客等级: 少校
  • 技术积分: 950
  • 用 户 组: 普通用户
  • 注册时间: 2006-04-07 02:33
文章分类

全部博文(78)

文章存档

2013年(1)

2012年(19)

2011年(45)

2008年(13)

分类: LINUX

2008-10-20 13:58:45

两个服务器(AB)分别放在电信和网通!笔者要解决的是将两个服务器,用户所上传的文件,能够同时存放在AB,实现数据的同步.

现采用LINUX下的RSYNC软件实现.

操作系统AB都为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(可设成BIP),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.shrsync命令后加入参数--delete即可!

我没有加,是因为我不但要保证A服务器文件变化要复制到B上去,同时我还要将服务器B上的文件变化转到A上去!所以不能加--delete参数,否则两个服务器文件的同步,无法实现!

同样的配置,反过来,B设成服务器,A设成客户端,两个服务器上的文件即可同步,唯一的一个问题是,采用这种方法,可以使文件完全相同,但任何一个服务器上删除文件,都将不成功,它会在另外一台复制回来!不知是否可以解决这个问题!如果我研究出来了,会及时发布出来!

 

PS:当在同步时候出现下面的情况:
rsync: link_stat "." (in upfiles) failed: Permission denied (13)

出现这个问题是因为权限不够,我们可以把模块配置的目录权限设置为755,这样我们就可以来同步

 

阅读(1961) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~