Linux中inotify+unison实现数据双向(多向)实时同步

引言

在某种特定的情况下需要在多个Linux服务器上做指定文件文件夹的实时同步,一个服务器修改了文件其它服务器的文件能保持一致.


准备环境

Centos服务器1:139.199.152.84

Centos服务器2:111.230.103.208

指定同步的文件夹:/usr/Tomcat/image与/usr/Tomcat/upload 目录两个服务器都创建好目录


配置步骤

安装Objective Caml compiler

服务器1与服务器2都要安装

#yum install make  gcc gcc-c++
#cd/tmp
#wget http://caml.inria.fr/pub/distrib/ocaml-4.03/ocaml-4.03.0.tar.gz 
#tar  -zxvf ocaml-4.03.0.tar.gz
#cd ocaml-4.03.0
#./configure
#make world opt
#make install

安装Unison

服务器1与服务器2都要安装

#yum install ctags-etags
#cd/tmp
#wget  http://www.seas.upenn.edu/~bcpierce/unison//download/releases/stable/unison-2.48.4.tar.gz
#mkdir unison-2.48.4 && cd unison-2.48.4
#tar -zxvf /tmp/unison-2.48.4.tar.gz
#cd src
#make UISTYLE=text THREADS=true
#cp unison /usr/local/bin/
//有版本信息出现则安装成功
#unison -version

安装inotfy

服务器1与服务器2同样安装

#yum -y install inotify-tools

配置双机SSH信任

两台服务器先安装一下rsync

#yum install rsync -y 

测试是否成功只要不用输入密码说明配置成功

服务器1测试
#ssh -p 22  111.230.103.208 date
服务器2测试  
#ssh -p 22  139.199.152.84 date

在服务器139.199.152.84配置

#ssh-keygen
//连续按三次空格
# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys 
//给权限
# chmod 700 ~/.ssh
# chmod 600 ~/.ssh/authorized_keys
//需要输入一次密码 
# rsync -avz /root/.ssh/authorized_keys root@111.230.103.208:/root/.ssh/authorized_keys

在服务器111.230.103.208配置

#ssh-keygen
//连续按三次空格
# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
//给权限 
# chmod 700 ~/.ssh
# chmod 600 ~/.ssh/authorized_keys 
//需要输入一次密码 
# rsync -avz /root/.ssh/authorized_keys root@139.199.152.84:/root/.ssh/authorized_keys

配置双机同步

在服务器139.199.152.84配置

//先进入/tem/uniso/src/目录
#mkdir -p /root/.unison/
#vim /root/.unison/default.prf
//配置的内容
#Unison preferences file 
//root是配置的两个目录本地和远程,注意远程IP地址后面是两个//
root = /usr/Tomcat/ 
root = ssh://root@111.230.103.208//usr/Tomcat/
//path 指定的文件夹如果是Tomcat整个目录不用指定path
path = upload
path = image 
#force =
#ignore =
batch = true 
maxthreads = 300
#repeat = 1
#retry = 3 
owner = true 
group = true
//使用ssh压缩传输方式
perms = -1 
fastcheck = false
//true表示通过文件创建时间来比较两地文件,若为false比较文件的内容
rsync = false 
//保持同步过来保持读写权限
sshargs = -C 
xferbycopying = true
//默认值是true,表示当需要同步的两个目录一个为空时,unison将停止,这里设置为false,即便为空unison也不会停止运转
confirmbigdel = false 
log = true
logfile = /root/.unison/unison.log

在服务器111.230.103.208配置

//先进入/tem/uniso/src/目录
#mkdir -p /root/.unison/
#vim /root/.unison/default.prf
//配置的内容
#Unison preferences file 
//root是配置的两个目录本地和远程,注意远程IP地址后面是两个//
root = /usr/Tomcat/ 
root = ssh://root@139.199.152.84//usr/Tomcat/
//path 指定的文件夹如果是Tomcat整个目录不用指定path
path = upload
path = image 
#force =
#ignore =
batch = true 
maxthreads = 300
#repeat = 1
#retry = 3 
owner = true 
group = true
//使用ssh压缩传输方式
perms = -1 
fastcheck = false
//true表示通过文件创建时间来比较两地文件,若为false比较文件的内容
rsync = false 
//保持同步过来保持读写权限
sshargs = -C 
xferbycopying = true
//默认值是true,表示当需要同步的两个目录一个为空时,unison将停止,这里设置为false,即便为空unison也不会停止运转
confirmbigdel = false
log = true
logfile = /root/.unison/unison.log

创建脚本文件

两个服务器都要创建.sh脚本

//到usr目录下创建
#cd usr/
#vim unison.sh
//内容
#/bin/bash
src="/usr/Tomcat/" 
/usr/bin/inotifywait -mrq -e create,delete,modify,move $src | while read line; do
/usr/local/bin/unison 
echo -n "$(date +%F-%T) $line" >> /var/log/inotify.log
done
//执行脚本
#sh unison.sh
//让脚本后台执行
#chmod +x  unison.sh
#nohup ./unison.sh >/dev/null 2>&1 &

完成

从服务器1 upload中添加一个文件刷新服务器2的upload看是不是同步过去了

upload.png

检查image文件夹是否可以同步

检查nosynchro文件夹是否屏蔽了同步

多服务器实时同步思路

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏分布式系统和大数据处理

Kafka分布式消息系统(搭建Kafka集群) - Part.3

在前面两篇文章中,我们了解了基本概念,也安装、配置好了zookeeper集群,在这篇文章中,我们将一步步搭建kafka集群。

14930
来自专栏24K纯开源

Mac OS平台下应用程序安装包制作工具Packages的使用介绍(补充)

上一篇:Mac OS平台下应用程序安装包制作工具Packages的使用介绍 补充说明     上一篇文章中介绍了如何使用Packages如何创建mac下的安装包...

40390
来自专栏difcareer的技术笔记

使用AndroidStudio阅读Android源码

大家有没有好奇过为啥编译一次Android源码需要大概100G的存储? Android源码真的有这么大? 经过我的测试(Android4.4.4)发现: ....

11040
来自专栏信安之路

Java代码审计-铁人下载系统

初学 java 代码审计,跟着表哥们脚步,走一遍审计流程,就选了个没有使用 Java 框架的 java 系统,作为入门。

11500
来自专栏JMCui

Hybris 项目工程配置

1、控制台页面进入platform目录 cd F:\hybris640\hybris\bin\platform 并运行 setantenv.bat 生成对应的a...

63990
来自专栏三木的博客

Linux shell 程序设计1——安装及入门

1、什么是shell? shell是linux内核的“壳”,是用户和内核的桥梁。它类似于windows下的命令提示符,将用户输入的命令解释给内核执行,并返回给用...

20960
来自专栏HappenLee的技术杂谈

NFS服务器的安装与配置

由于实验室的项目需要实现在CephFS之上建立NFS之上,所以记录一下NFS服务器的安装与配置流程。

36540
来自专栏一枝花算不算浪漫

[Linux基础]Linux基础知识入门及常见命令.

41670
来自专栏程序员同行者

Linux 双网卡绑定

80440
来自专栏我的小碗汤

微服务学习之thrift介绍安装

最近在做一个docker+Kubernetes微服务容器化实战项目,项目中用到了很多不熟悉的组件,也遇到了挺多的问题。项目结构是这样的:

38730

扫码关注云+社区

领取腾讯云代金券