|
测试环境介绍
Server :192.168.1.147
Client :192.168.1.190
服务器和客户端的对应的同步目录都是 /data/test/
目标:在客户端上指定目录下操作,数据会及时同步到服务器上对应模块的指定目录下
版本1.0:单纯使用rsync实现主机间的数据同步
一:Rsync简介
rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。
二:服务器端和客户端都需要安装rsync
1:系统包安装(系统默认已经安装,推荐这种方式,本例采用系统包)
yum install rsync
2:源码安装
http://rsync.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz
tar zxvf rsync-3.0.7.tar.gz
cd rsync-3.0.7
./configure --prefix=/usr/local/rsync
&make &&make install
三:服务器端配置(客户端无需配置文件)
1:编写配置文件。/etc下没有rsyncd.conf这个文件,不过我们可以新建
Vim /etc/rsyncd.conf
[global] #全局配置
uid = nobody
gid = nobody
use chroot = no
timeout = 300
port = 873 #默认就是873端口,可不写
max connections = 30 #最大连接数
pid file = /var/log/rsyncd.pid #运行进程的ID写在那里,可不要
lock file = /var/run/rsyncd.lock #这个可以不要
log file = /var/log/rsyncd.log #日志文件写在那里,这个得要
log format = %t %a %m %f %b #日志的格式 %t 当前时间 %a 远程IP地址 %m 模块名 %f 文件名 %b 实际传输的字节数 %u用户名
[backup] # 要同步的模块名
path = /data/test #要同步的目录
comment =test #这个名名称无所谓
read only = no # no客户端可上传文件,yes只读
write only = no # no客户端可下载文件,yes不能下载
list = no #是否提供资源列表
ignore errors #忽略一些无关的IO错误
hosts allow = 192.168.1.0/24 #本模块允许通过的IP地址
hosts deny = * #禁止主机IP
auth users = www #登陆系统使用的用户名,没有默认为匿名。
secrets file=/etc//rsyncd.secret #密码文件存放的位置
2、设置rsync服务器端同步密钥和同步目录权限;
vi /etc//rsyncd.secret
www:123456 #用户名www:密码123456)
chmod 600 /etc/rsyncd.secret #更改权限,否则报错
chmod 777 /data/test -R #修改同步目录权限,否则报错
3:启动与关闭
A:daemon方式启动
/usr/bin/rsync --daemon --config=/etc/rsyncd.conf
关闭: kill pid 或者 pkill rsync
B:利用xinetd控制rsync启动
vim /etc/xinetd.d/rsync (将yes改为no)
/etc/init.d/xinetd start
四:linux客户端配置和测试
1:客户端环境配置
A:客户端只需要安装并启动rsync,无需配置文件
/usr/bin/rsync --daemon 或者 /etc/init.d/xinetd start
B:建一个密码文件,只需要些和服务器一样的密码
echo 123456 > /etc/rsyncd.secret
chmod 600 /etc/rsyncd.secret
2:客户端同步命令
rsync -vzrtopg --delete /data/test/ www@192.168.1.147::backup --password-file=/etc/rsyncd.secret
需要解释的参数:
-vzrtopg -v 详细模式输出 -z对文件在传输中压缩 -r 对子目录递归模式处理 -t保持文件时间 -p保留权限 -o保留属主 -g保留属组
--delete 删除服务器上以前存在客户端没有的数据
--exclude-from=文件名 排除文件中指定模式的文件,不传送
/data/test/ 客户端上需要同步的目录
www 服务器上backup模块定义的用户名
backup 指定服务器上要接受同步的模块名称
3:最后不妨编写个脚本,在后台执行
cat /root/rsync.sh
nohup sh /root/rsync.sh &
五:总结
1:遇到的问题
在配置rsync时,对客户端和服务器端的角色定位不清晰。到底是客户端把数据同步到服务器端,还是把服务器端的数据同步到客户端。按照我的理解是把客户端提交的内容同步到服务器上,但是我在客户端执行同步命令时却发现把服务器端的数据同步到了客户端。我执行的命令如下
rsync -vzrtopg --delete www@192.168.1.147::backup /data/test/ --password-file=/etc/rsyncd.secret
而我理想中的方式应该是:
rsync -vzrtopg --delete /data/test/ www@192.168.1.147::backup --password-file=/etc/rsyncd.secret
显而易见。rsync与scp的上传下载方式类似,无所谓客户端,服务器端,一台机器可以把本机数据同步到另一台,也可以把另一台指定目录下的数据同步到本地。为了方便就把配置复杂一点(需要编写配置文件)的哪台机器当做服务器端
2:思考
上面的两种方式,个人认为在不同的场景有不同的应用
A:服务器端作为备份使用
当服务器端做备份时,需要将多个客户端的数据同步到服务器的对应目录中,这时为了减少工作量,把备份服务器作为服务器端,客户端只需要在本地安装rsync,建立密码文件,写个同步脚本
把客户端的/data/test/ 同步到服务器端的backup模块下对应的目录
rsync -vzrtopg --delete /data/test/ www@192.168.1.147::backup --password-file=/etc/rsyncd.secret
B:服务器端做分发时使用
当有一台服务器(svn服务器)需要把数据分发到不同项目对应的服务器上。此时可以吧svn服务器作为服务器端。客户端从服务器端同步对应的数据。
rsync -vzrtopg --delete www@192.168.1.147::backup /data/test/ --password- file=/etc/rsyncd.secret
把服务器端backup模块定义的目录内容同步到客户端的 /data/test/目录下
3:rsync的优缺点(摘自抚琴煮酒《构建高可用linux服务器》)
rsync在Linux/Unix下是一个比较重要和实用的服务.rsync具有安全性高,备份迅速,支持增量备份等优点,通过rsync可以解决对实时性不高的数据备份需求。但是随着应用系统规模的不断扩大,对数据的安全性和可靠性提出了更好的要求。rsync在高端业务系统中逐渐暴露出很多不足。首先rsync同步数据时需要扫描所有文件后进行对比,然后差量传输,大于大数据这是非常低效的。其次,rsync不能时时的去检测,同步数据。基于以上原因。基于以上原因考虑采用rsync+inotify解决这些问题
|
|