我们知道rsync可以做很多事情,例如同步数据,互传数据等,是个非常好用的命令
在公司里做网站,需要上传产品,这是件很头痛的事情,产品量大会对服务器网络有影响,所以有搞一个实时同步,这样数据量就会小很多,其实我们知道rsync自身也可以做到同步,要借助cron才行,这个有缺点就是不是实时的,如果产品要急着上还要等时间,太浪费时间了,所以今天搞了一下rsync+inotify来实现实时同步。
1.图形服务器(被同步端)
一般服务器都安装了rsync,如果没有就安装一下
- yum install rsync
注:安装好了,rsync不需要配置
然后来安装inotify-tools
默认系统是没有安装的,好像系统光盘里也没有,可以通过这样来安装
- wget http://download.fedora.redhat.com/pub/epel/6/i386/epel-release-6-5.noarch.rpm
- rpm -Uvh epel-release-6-5.noarch.rpm
不同的系统下载对应的版本epel-reslease-*.noarch.rpm
我下载的适应centos6 redhat6都可以用
安装inotify
- yum install inotify
看看有没有安装上
- [root@RedHat-6 ~]# ll /proc/sys/fs/inotify/
- 总用量 0
- -rw-r--r-- 1 root root 0 1月 18 12:09 max_queued_events
- -rw-r--r-- 1 root root 0 1月 18 12:09 max_user_instances
- -rw-r--r-- 1 root root 0 1月 18 12:09 max_user_watches
如果没有就说明没有安装成功。
现在就是实现实时同步的脚本了,哈哈!!(脚本名可以随便取),我这里叫inotifyrsync.sh
- #!/bin/bash
- host=192.168.1.220
- src=/data0/image/
- dst=image
- /usr/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/bin/rsync -vzurtopg --progress --delete --password-file=/etc/rsyncd/rsyncd.secrets $src root@$host::$dst >> /var/log/rsync.log 2>&1
- echo "${files} was rsyncd" >> /etc/rsyncd/rsyncd.log 2>&1
- done
这里说明一下:dst是rsync服务端的模块名称。
然后就创建一个密码文件rsyncd.secrets我的文件都放在/etc/rsyncd目录下
- mkdir /etc/rsyncd
- touch /etc/rsyncd/rsyncd.secrets
- chmod 600 /etc/rsyncd/rsyncd.secrets
- [root@RedHat-6 rsyncd]# cat /etc/rsyncd/rsyncd.secrets
- 123456 #这里只需要密码
注:这里的rsyncd.secrets密码文件权限一定要是600不然后面会报错的。
最后真要把脚本inotifyrsync.sh放到后台去执行就可以,这样就配置完了
- /etc/rsyncd/inotifyrsync.sh &
2.同步端
同样的要确定有没有安装rsync,如果安装了就可以配置了,没有安装就像上面说的安装一下然后配置一下。rsync安装是没有配置文件的,需要手动创建。
- mkdir /etc/rsyncd
- touch /etc/rsyncd/rsyncd.conf
- touch /etc/rsyncd/rsyncd.secrets
先把密码文件配一下(密码格式为:用户名:密码)
- [root@localhost rsyncd]# cat rsyncd.secrets
- root:123456
现在来配置一下rsync服务rsyncd.conf
- pid file = /var/run/rsyncd.pid
- lock file = /var/run/rsync.lock
- port = 873
- address = 192.168.1.220
- uid = nobody
- gid = nobody
- use chroot = no
- #read only = yes
- #limit access to private LANS
- max connections = 5
- #strict modes = yes
- transfer logging = yes
- #motd file = /etc/rsyncd/rsyncd.motd
- #log file
- log file = /var/log/rsyncd.log
- log format = %t %a %m %f %b
- syslog facility = local3
- timeout = 300
- [image] #模板名
- path = /data0/image/
- list = false
- ignore errors
- read only = no
- write only = no
- hosts allow = 192.168.1.9
- hosts deny = *
- uid = root
- gid = root
- auth users = root
- secrets file = /etc/rsyncd/rsyncd.secrets
- comment = Rsync Path
- exclude = web/
配置好之后,就可以启动了
- rsync --daemon --config=/etc/rsyncd/rsyncd.conf
搞好之后,就可以测试一下了,看看你改图片服务器上面的东西,同步端有没有什么变化。
错误分析:
1. @ERROR: auth failed on module Path #说明密码文件权限不正确。