测试环境搭配
两台服务器:
若需要实时同步则需要用inotify,安装之前需查看系统内核:uname -a只能在高于2.6.13版本的系统上安装
192.168.1.7(主服务器)
192.168.1.21(备份服务器)
实现主服务器上的某个目录中的文件添加,删除,修改时,实时同步到备份服务器上的某个目录。
首先在192.168.1.21上开始:
备份服务器需要安装rsync
在新建立的目录下执行以下步骤:
1、安装rsync(备份服务器只安装rsync)
wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
tar zxvf rsync-3.0.9.tar.gz
cd rsync-3.0.9
./configure --prefix=/usr/local/rsync
make
make install
2、建立用户与密码认证文件
echo "root:123456" > /usr/local/rsync/rsync.passwd
请记住,在server端建立的密码文件,只有密码,没有用户名;而在备份服务端client里建立的密码文件,用户名与密码都有。
chmod 600 rsync.passwd 需要给密码文件600权限
/apache-tomcat-8.0.24/backfile/ROOT
3、建立rsync配置文件
uid = root
gid = root
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
path = /opt/test (192.168.1.21同步的目录位置)/apache-tomcat-8.0.24/backfile/ROOT
web
comment = web
ignore errors
read only = no
write only = no
hosts allow = 192.168.1.7
hosts deny = *
list = false
uid = root
gid = root
auth users = root
secrets file = /usr/local/rsync/rsync.passwd
其中web是server服务端里的认证模块名称,需要与主服务器里的一致,以上的配置我的自己服务器里的配置,以供参考。
把配置文件命名为rsync.conf,放到/usr/local/rsync/目录里
启动rsync
rm -rf /var/run/rsyncd.pid(提示rsyncd.pid存在的话,执行这一句)
/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsync.conf
/webapp/rsync/rsync/bin/rsync --daemon --config=/webapp/rsync/rsync.conf
/webapp/rsync/rsync/bin/rsync --daemon --config=/webapp/rsync/rsync.conf
开启873端口
vi /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
192.168.1.7
在新建立的目录下执行以下步骤:
1、安装rsync(备份服务器只安装rsync)
wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz
tar zxvf rsync-3.0.9.tar.gz
cd rsync-3.0.9
./configure --prefix=/usr/local/rsync
make
make install
2、建立密码认证文件
cd /usr/local/rsync/
#[root@nginx rsync]# echo "123456" >/usr/local/rsync/rsync.passwd
chmod 600 rsync.passwd
3、安装inotify
ll /proc/sys/fs/inotify命令,是否有以下三条信息输出,如果没有表示不支持。
在新建立的目录下安装
total 0
-rw-r--r-- 1 root root 0 Dec 11 15:23 max_queued_events
-rw-r--r-- 1 root root 0 Dec 11 15:23 max_user_instances
-rw-r--r-- 1 root root 0 Dec 11 15:23 max_user_watches
/proc/sys/fs/inotify/max_queued_evnets
表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件。
/proc/sys/fs/inotify/max_user_instances
表示每一个real user ID可创建的inotify instatnces的数量上限。
/proc/sys/fs/inotify/max_user_watches
表示每个inotify instatnces可监控的最大目录数量。如果监控的文件数目巨大,需要根据情况,适当增加此值的大小。
例如: echo 30000000 > /proc/sys/fs/inotify/max_user_watches
cd /usr/src/
src\]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz \[src\]# tar zxvf inotify-tools-3.14.tar.gz \[src\]# cd inotify-tools-3.14 \[inotify-tools-3.14\]# ./configure --prefix=/usr/local/inotify \[inotify-tools-3.14\]# make \[inotify-tools-3.14\]# make install 4、创建rsync复制脚本 此项功能主要是将server端的目录/tmp里的内容,如果修改了(无论是添加、修改、删除文件)能够通过inotify监控到,并通过rsync实时的同步给client的/tmp里,下面是通过shell脚本实现的。 rsync排除 使用inotifywait排除监控目录的情况下,必须同时使用rsync排除对应的目录,否则只要有触发同步操作,必然会导致不该同步的目录也会同步。与inotifywait类似,rsync的同步也有--exclude和--exclude-from两种写法。 在rsync_exclude.list文件里添加上不同步的目录 admin/ adminthemes/ b2b2c/ cms/ commons/ config/ core/ docs/ editor/ excel/ font/ html/ install/ license/ logs/ META-INF/ products/ shop/ test/ themes/ WEB-INF/ host=192.168.1.21 src=/opt/test/ (192.168.1.7要同步的目录位置) des=web user=root /usr/local/inotify/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 -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd $src $user@$host::$des echo "${files} was rsynced" \>\>/opt/rsync.log 2\>\&1 done host=192.168.1.21 src=/apache-tomcat-8.0.24/backfile/ROOT/ des=web user=test1 rsync_exclude='/apache-tomcat-8.0.24/backfile/rsync/rsync_exclude.list' /apache-tomcat-8.0.24/backfile/rsync/inotify/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 -vzrtopg --exclude-from=${rsync_exclude} --delete --progress --password-file=/apache-tomcat-8.0.24/backfile/rsync/rsync.passwd $src $user@$host::$des echo "${files} was rsynced" \>\>/apache-tomcat-8.0.24/backfile/rsync/rsync.log 2\>\&1 done 放在任一目录下都可以 # chmod 764 rsync.sh 然后运行这个脚本就可以 sh /tmp/rsync.sh \&(用这个命令时当关闭命令窗口时此服务就停止了) ./rsync.sh \&(用这个命令可解决关闭窗口服务停止的问题) 加入开机启动项: echo "/work/installed/inotify/rsync.sh \&" \>\> /etc/rc.local 在rsync+inotify这种备份方法的时候,我公司遇到了一个问题,那就是主服务已经给备用服务同步完数据了,但主服务器磁盘看见满了,需要把已经备份的文件删除,但同时在备份服务器里保留主服务器里的文件,也就是说主服务器里删除文件的时候,备份服务器里不跟着删除文件,我查看了很多英文文档,测试了很多遍,最后找到了一个解决方法,那就是在主服务器里,把rsync.sh这个脚本里第9行的--delete参数给去掉,就可以解决这个问题。