nfs适合存小图片和小文件,有一个致命的缺点,就是其中一台web服务挂掉之后,会直接导致web页面无法访问,动态的那种数据,而且数据量很大的数据不适合nfs
Unison是一款跨平台(Window,Unix,Linux)的文件同步对象,不仅支撑本地对本地同步,也支持经由过程SSH、RSH和Socket同步支持双向同步
下载并且编译安装三个软件包。(inotify-tools-3.14.tar.gz、ocaml-3.10.2.tar.gz、unison-2.32.52.tar.gz)
mkdir /tools
cd /tools
wget
wget ~bcpierce/unison//download/releases/unison-2.32.52/unison-2.32.52.tar.gz
wget
tar xf inotify-tools-3.14.tar.gz
tar xf ocaml-3.10.2.tar.gz
tar xf unison-2.32.52.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify && make && make install
echo "PATH=/usr/local/inotify/bin:$PATH" >/etc/profile.d/inotify.sh
source /etc/profile.d/inotify.sh
echo "/usr/local/inotify/lib" >/etc/ld.so.conf.d/inotify.conf (创建库文件)
ldconfig -v | grep inotify (使系统从新装载一下所有库文件)
ln -sv /usr/local/inotify/include/ /usr/include/inotify (导出头文件)
cd /tools/ocaml-3.10.2
./configure
make world opt
make install
cd /toos/unison-2.32.52
yum -y install ctags-etags
make UISTYLE=text THREADS=true STATIC=true
#UISTYLE=text THREADS=true STATIC=true 表示:使用命令方式,加入线程支持,以静态模式编译
make install
接下来会提示错误
mv /root/bin//unison /tmp/unison-10576
mv: 无法获取"/root/bin//unison" 的文件状态(stat): 没有那个文件或目录
make: [doinstall] 错误 1 (忽略)
cp unison /root/bin/
cp: 无法创建普通文件"/root/bin/": 是一个目录
make: *** [doinstall] 错误 1
上述报错不用管他,接下来使用一条命令就可以:cp unison /usr/local/bin
上述操作在其他要同步的服务器也操作一遍
生成ssh秘钥对:ssh-keygen cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
将文件id_rsa id_rsa.pub authorized_keys 复制到其他主机上的对应目录
也可以使用ssh-copy-id -i命令,例如:ssh-copy-id -i ./.ssh/id_rsa.pub root@192.168.238.236
mkdir -p /var/vm1
mkdir -p /var/vm2
vmware1上
[root@vmware1 ~]# cat unison-A.sh
#!/bin/bash
ipB="192.168.1.11"
srcA="/var/vm1"
dstB="/var/vm2"
/usr/local/inotify/bin/inotifywait -mrq -e create,delete,modify,move $srcA | while read line; do
/usr/local/bin/unison -batch $srcA ssh://$ipB/$dstB
echo -n "$line " >> /var/log/inotify.log
echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done
[root@vmware1 ~]# chmod o+x unison-A.sh
[root@vmware1 ~]# bash unison-A.sh &
echo "bash /root/unison-A.sh &" >> /etc/rc.local
vmware2上
[root@vmware2 ~]# cat unison-B.sh
#!/bin/bash
ipA="192.168.1.12"
srcB="/var/vm2"
dstA="/var/vm1"
/usr/local/inotify/bin/inotifywait -mrq -e create,delete,modify,move $srcB | while read line; do
/usr/local/bin/unison -batch $srcB ssh://$ipA/$dstA
echo -n "$line " >> /var/log/inotify.log
echo `date | cut -d " " -f1-4` >> /var/log/inotify.log
done
[root@vmware1 ~]# chmod o+x unison-B.sh
[root@vmware2 ~]# bash unison-B.sh &
echo "bash /root/unison-B.sh &" >> /etc/rc.local
如何解决在和远程服务器同步大量数据,上传一部分数据后超时
实际操作中,最好的方法是,第一次先把要上传的文件打成包,用 ftp 上传,然后展开到服务器中,之后手动执行一次 unison 同步即可
补充:使用自动同步之前最好执行一下手动同步