linux中inotify+unison实现数据双向同步备份

服务器分别为:
服务器A:192.168.1.6,同步目录:/var/www
服务器B:192.168.1.7,同步目录:/var/www
 
安装unison
首先安装ocaml,版本至少为3.07或更高
下载地址:http://caml.inria.fr

 代码如下 复制代码
tar xvf ocaml-3.10.2.tar.gz
cd ocaml-3.10.2
./configure
make world opt
make install
cd ..

安装unison
下载地址:www.seas.upenn.edu/~bcpierce/unison/

 代码如下 复制代码
tar xvf unison-2.32.52.tar.gz
cd unison-2.32.52
make UISTYLE=text THREADS=true STATIC=true
cp unison /usr/local/bin
cd ..
注:
UISTYLE=text THREADS=true STATIC=true表示使用命令行方式,加入线程支持以静态模式编译
安装inotify
下载地址:http://inotify-tools.sourceforge.net
tar xvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure
make
make install
cd ..

配置双机ssh信任(除以下方法外,也可以在A中生成密钥后,把A上的.ssh目录全SCP到B服务器/root/.ssh,这样方便些)
以root用户登陆
在服务器A上创建.ssh目录
mkdir ~/.ssh
chmod 700 ~/.ssh
生成RSA密钥
ssh-keygen -t rsa
(然后连续三次回车)
添加密钥到授权密钥文件中
在192.168.1.6服务器A上操作(2222是端口号)

 代码如下 复制代码
cd ~/.ssh
ssh "-p 2222" 192.168.1.6 cat /root/.ssh/id_rsa.pub >> authorized_keys  #小写p
ssh "-p 2222" 192.168.1.7 cat /root/.ssh/id_rsa.pub >> authorized_keys
scp  -P 2222 authorized_keys 192.168.1.7:/root/.ssh/  #大写P
chmod 600 /root/.ssh/authorized_keys

在192.168.1.7服务器B上操作
chmod 600 /root/.ssh/authorized_keys
分别在两台机器上执行如下测试(第一次执行时,会要求输入密码,以后执行则不需要说明信任成功)

 代码如下 复制代码
ssh -p 2222 192.168.1.6 date
ssh -p 2222 192.168.1.7 date

添加脚本
在192.168.1.6服务器A上添加脚本:

 代码如下 复制代码
mkdir /script
vim /script/inotify.sh
#/bin/bash
UNISON=`ps -ef |grep -v grep|grep -c inotifywait`
if [ ${UNISON} -lt 1 ]
then
ip2="192.168.1.7"
src2="/var/www /"
dst2="/var/www/ "
/usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while read line
do
/usr/local/bin/unison -batch $src2 ssh://$ip2/$dst2
echo -n "$line " >> /var/log/inotify/inotify$(date +%u).log
echo ` date +%F %T " " -f1-4` >> /var/log/inotify/inotify$(date +%u).log
done
fi

在192.168.1.7服务器上添加脚本:

 代码如下 复制代码
mkdir /script
vim /script/inotify.sh
#/bin/bash
UNISON=`ps -ef |grep -v grep|grep -c inotifywait`
if [ ${UNISON} -lt 1 ]
then
ip2="192.168.1.6"
src2="/var/www /"
dst2="/var/www/ "
/usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while read line
do
/usr/local/bin/unison -batch $src2 ssh://$ip2/$dst2
echo -n "$line " >> /var/log/inotify/inotify$(date +%u).log
echo ` date +%F %T " " -f1-4` >> /var/log/inotify/inotify$(date +%u).log
done
fi

在二台服务器上修改脚本权限:
chmod a+x /script/inotify.sh
在计划任务中添加任务(原本在/etc/rc.local下添加开机启动的,但出问题,脚本并不执行)

 代码如下 复制代码
crontab –e
#unison+inotify
* * * * * /bin/sh /script/inotify.sh > /dev/null 2>&1 &

重启电脑,测试二台服务器中/var/www的内容是否能同步
 
不重启电脑,手动执行脚本也可以测试
sh /script/inotify
在其中一台/var/www目录中添加,或修改,或删除文件的时候,可以看到脚本状态,同时另一台服务器也应该会跟随操作,如果有问题,请手动修改下脚本
 
在某些公司中,是禁止禁用root远程登陆,只能使用普通用户进行同步方案
等待同步目录(二台电脑不能使用一样的待同步目录名,否则报错)

 代码如下 复制代码
192.168.1.6: /var/web1
192.168.1.7: /var/web2
 
安装过程如上
useradd –g apache unison
passwd unison
(输入新密码)
chown –R unison. /var/www
mkdir /home/unison/.ssh
chmod 700 /home/unison/.ssh
su – unison
ssh-keygen -t rsa

(然后连续三次回车)
 
添加密钥到授权密钥文件中
在192.168.1.6服务器A上操作(2222是端口号)

 代码如下 复制代码
cd /home/unison/.ssh
ssh "-p 2222" 192.168.1.6 cat /home/unison/.ssh/id_rsa.pub >> authorized_keys  #小写p
ssh "-p 2222" 192.168.1.7 cat /home/unison /.ssh/id_rsa.pub >> authorized_keys
scp  -P 2222 authorized_keys 192.168.1.7:/home/unison/.ssh/  #大写P
chmod 600 /home/unison/.ssh/authorized_keys
 
在192.168.1.7服务器B上操作
chmod 600/home/unison/.ssh/authorized_keys

 
分别在两台机器上执行如下测试(第一次执行时,会要求输入密码,以后执行则不需要说明信任成功)

 代码如下 复制代码
ssh -p 2222 unison@192.168.1.6 date
ssh -p 2222 unison@192.168.1.7 date
su - root
 

A脚本:

 代码如下 复制代码
#/bin/bash
UNISON=`ps -ef |grep -v grep|grep -c inotifywait`
if [ ${UNISON} -lt 1 ]
then
ip2="unison@192.168.1.7:2222"
src2="/var/web1/"
dst2="/var/web2/"
/usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while read line
do
/usr/local/bin/unison -batch -sshargs "-i /home/unison/.ssh/id_rsa" $src2 ssh://$ip2
/$dst2
echo -n "$line " >> /var/umelook-log/inotify/inotify$(date +%u).log
echo ` date +%F %T` >> /var/umelook-log/inotify/inotify$(date +%u).log
done
fi

 
 
B脚本:

 代码如下 复制代码
#/bin/bash
UNISON=`ps -ef |grep -v grep|grep -c inotifywait`
if [ ${UNISON} -lt 1 ]
then
ip2="unison@192.168.1.6:2222"
src2="/var/web2/"
dst2="/var/web1/"
/usr/local/bin/inotifywait -mrq -e create,delete,modify,move $src2 | while read line
do
/usr/local/bin/unison -batch -sshargs "-i /home/unison/.ssh/id_rsa" $src2 ssh://$ip2
/$dst2
echo -n "$line " >> /var/umelook-log/inotify/inotify$(date +%u).log
echo ` date +%F %T` >> /var/umelook-log/inotify/inotify$(date +%u).log
done
fi

在此我自己常用字的同步备份并不是这个而一个单向备份的工具,是网络比较常用的一个备份工具,在此我就不说了免得大家攻击我呀。

时间: 2024-09-25 04:24:23

linux中inotify+unison实现数据双向同步备份的相关文章

Linux中利用Rsync+Inotify-tools实现数据实时同步备份

说明: 操作系统:CentOS 5.X 源服务器:192.168.21.129 目标服务器:192.168.21.127,192.168.21.128 目的:把源服务器上/home/www.111cn.net目录实时同步到目标服务器的/home/www.111cn.net下 具体操作: 第一部分:分别在两台目标服务器192.168.21.127,192.168.21.128上操作 一.分别在两台在目标服务器安装Rsync服务端 1.关闭SELINUX vi /etc/selinux/config

Linux下Rsync+sersync实现数据实时同步的例子

前言: 一.为什么要用Rsync+sersync架构? 1.sersync是基于Inotify开发的,类似于Inotify-tools的工具 2.sersync可以记录下被监听目录中发生变化的(包括增加.删除.修改)具体某一个文件或某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的这个文件或者这个目录. 二.Rsync+Inotify-tools与Rsync+sersync这两种架构有什么区别? 1.Rsync+Inotify-tools (1):Inotify-tools只能记录

Linux中svn提交文件后自动同步更新到网站目录

 下面来为各位介绍Linux中svn提交文件后自动同步更新到网站目录希望文章对各位有帮助.     有时,对于多文件需要上传到服务器的时候将会很麻烦,但是如果使用svn的钩子脚本就容易实现本地提交svn后,自动同步代码文件到远程服务器的网站目录下,而不必手动上传了. 首先,在网站目录下checkout代码,例如我的目录是/data/www/test svn co https://127.0.0.1/test/trunk/ /data/www/test/ 注意,这是因为有时我会在服务器上直接修改代

异构系统,如何实现数据双向同步

问题描述 异构系统,如何实现数据双向同步 目前在做老系统的重新工作,目前已经完成了新系统的开发. 但是两个系统需要并存上线一段时间,两边都有可能有查询和修改数据的操作,新老系统的底层数据库结构设计不同,需要两边互相同步业务数据,数据不允许丢失,且延迟不能太长,几秒内可以接受. 板上各位前辈.大牛,有否成熟方案或成熟产品? 解决方案 能不能直接把请求分发到两个系统上,这样就可以避免数据同步的问题了?

mysql-MySQL 数据双向同步 配置My.ini 不能重启

问题描述 MySQL 数据双向同步 配置My.ini 不能重启 环境Windows7 + MySQL5.0 将my.ini文件修改为: log_bin=C:mysqlback server_id=1 sql-bin-update-same binlog_do_db=ftest master-host=192.168.2.10 master-user=vscom1 master-password=123456 master-port=3306 master-connect-retrt=10 rep

Linux系统如何对网站数据定期自动备份与删除?

  需求是这样的,首先网站文件和数据库需要每天自动备份,然后备份目录超过一定时间的删除,比如保留最近14天地备份 刚好vps是redhat,里面默认居然没有装crond的服务,输入以下命令安装 yum install cronie 创建备份脚本 vi /root/bakweb.sh 编辑并输入以下内容 #!/bin/bash find /home/bak/ -name '*' -type f -mtime +14 -exec rm {} ; tar zcvf /home/bak/www.peng

rsync与inotify集成实现数据实时同步更新

上篇文章我们介绍了如何使用rsync同步文件,这篇文章我们再来介绍下,如何把rsync与inotify集成实现数据的实时同步. 要达到这个目的,我们需要分以下几个步骤: 1.rsync的优点与不足 2.inotify是什么 3.检测OS是否支持inotify 4.inotify相关参数详解 5.inotify监控的文件事件类似 6.inotify-tools是什么 7.安装inotify-tools 8.inotifywait使用详解 9.inotifywatch使用详解 10.inotif-t

linux中rsync异步服务器实现文件同步与备份

  Rsync 非常适合在两台机器之间快速同步大型.复杂的目录,例如论坛的附件目录.再配合 ssh ,则安全性也有保证,且可以利用 ssh public key 和 cron 来进行自动定时同步. 说明:两台机器分别为 localhost 和 remotehost ;用户分别为 localuser 和 remoteuser. 环境:FreeBSD 4.9 和 FreeBSD 6.1  代码如下   设置 ssh public key 认证 $ssh-keygen -t dsa -b 2048 生

企业Linux服务器数据实时同步备份的解决方案

数据是最宝贵的财产!公司的服务器都是需要对数据有着完整的备份策略,利用脚本.计划任务.开源软件等等,无论那种途径,能够对数据的实时同步,才是最理想的效果!下面详细介绍利用rsync配合inotify实现数据实时的触发同步. rsync:可以镜像保存整个目录树和文件系统.可以很容易做到保持原来文件的权限.时间.软硬链接等等.第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件. 方案:起初用rsync进行数据备份是利用计划任务,定时执行一下命令实现rsync的同步,但最近开发这边