UNISON+inotify数据的双向实时同步

UNISON安装部署手册

操作系统:SUSE12

安装包:inotify-tools-3.13.tar.gz  ocaml-4.02.0.tar.gz   unison-2.48.4.tar.gz

主机:FH-UMP-PORTAL1  192.168.1.181

FH-UMP-PORTAL2  192.168.1.182

登录用户/密码:root/123456

配置文件:/root/.unison/default.prf

Unison双向同步基本原理是:假如有A B两个文件夹,A文件夹把自己的改动同步到B,B文件夹也把自己的改动同步到A,最后A B两文件夹的内容相同,是AB文件夹的合集。

Unison双向同步的一个缺点是,对于一个文件在两个同步文件夹中都被修改时,unison是不会去同步的,因为unison无法判断以那个为准。

一、安装前的准备

1. 查看空间大小

# df -h

2. 创建目录

#mkdir /opt/unison

3. 上传安装包到指定目录

二、解压及安装

4. 解压、编译、安装

(1) 对于ocaml-4.02.0.tar.gz(Linux下通过源码包编译安装Unison时,需要用到Objective
Caml compiler)

解压:#tar zxfv ocaml-4.02.0.tar.gz

进入解压目录:#cd ocaml-4.02.0

配置:#./configure

编译:#make world opt

安装:#make install

(2) 安装unison-2.48.4.tar.gz

解压:#tar zxvf unison-2.48.4.tar.gz

进入解压目录:#cd src/

编译:#make UISTYLE=text

安装:#make install

5. 有安装信息说明安装成功

三、配置双机ssh 信任 (免密登录)

6. 在FH-UMP-PORTAL1上创建key并配置PORTAL2的信任

(1) 获取密钥对

# ssh-keygen -t rsa

(2)将公钥添加到authorized_keys文件中,并修改权限

(3)使用rsync 远程同步将密钥传到PORTAL2

7.
同样的,在FH-UMP-PORTAL2上创建key并配置PORTAL1的信任

#ssh-keygen -t rsa

#cat /root/.ssh/id_rsa.pub >>
/root/.ssh/authorized_keys

#chmod 700 ~/.ssh/

#chmod 600 ~/.ssh/authorized_keys

#rsync -avz /root/.ssh/authorized_keys [email protected]:/root/.ssh/authorized_keys

注:配置结束后,在两台机器上分别ssh对方IP,能无密码登录则表示配置成功。

如:

四、Unison的配置与使用

8. Unison的使用方法

(1) 本地使用

使用方法:

#unison  111 222  #同步本地的111和222文件夹

(2) unison远程使用

使用方法:

# unison <本地目录>
ssh://remotehostname(IP)/<远程目录的绝对路径>

例如:

# unison /home/AAA ssh://[email protected](ip)//DB/path/BBB

表示将本机的目录/home/AAA和远端主机的/DB/path/BBB进行同步。一般的,需要两台机能ssh连接。

注意: 在主机和目录间又多加了一个 "/"

9. Unison的相关配置

修改unison配置文档(以共享/opt目录为例):

#cd /root/.unison

#vim default.prf


# Unison preferences file

root = /opt

root = ssh://192.168.1.182//opt

#force =

#ignore =

batch = true

#repeat = 1

#retry = 3

#owner = true

#group = true

#perms = -1

#fastcheck = false

#rsync = false

#sshargs = -C

#xferbycopying = true

log = true

logfile = /root/.unison/unison.log

PORTAL2:

#vim
/root/.unison/default.prf


# Unison preferences file

root = /opt

root = ssh://192.168.1.181//opt

#force =

#ignore =

batch = true

#repeat = 1

#retry = 3

#owner = true

#group = true

#perms = -1

#fastcheck = false

#rsync = false

#sshargs = -C

#xferbycopying = true

log = true

logfile = /root/.unison/unison.log

相关注解如下:

1.两个root表示需要同步的文件夹。

2.force表示以本地的文件夹为标准,将该目录同步到远端,开启后则变成单项同步

3.ignore = Path表示忽略某个目录,即同步时不同步它。

4. batch=true 表示全自动模式,接受并执行默认动作

5.log = true表示在终端输出运行信息。

6.logfile则指定了同时将输出写入log文件。

7.owner = true //保持同步过来的文件属主

8.group = true //保持同步过来的文件组信息

9.perms = -1 //保持同步过来的文件读写权限

10.repeat = 1 //间隔1秒后,开始新的一次同步检查

11.retry = 3 //失败重试

12.sshargs = -C //使用ssh的压缩传输方式

fastcheck true 表示同步时仅通过文件的创建时间来比较,如果选项为false,Unison则将比较两地文件的内容。

auto //接受缺省的动作,然后等待用户确认是否执行。

ignore xxx //增加 xxx 到忽略列表中 
:经测试此参数不能用。

ignorecase [true|false|default] //是否忽略文件名大小写

follow xxx //是否支持对符号连接指向内容的同步

xferbycopying = true

immutable xxx //不变目录,扫描时可以忽略

silent //安静模式

times=true //同步修改时间

path xxx 参数 //只同步 -path 参数指定的子目录以及文件,而非整个目录,-path 可以多次出现。

confirmbigdel=false//默认值为true,表示当需要同步的两个目录一个为空时,unison将停止,这里设置为false,即便为空unison也不会停止运转

10. 测试(手动推)

(对于unison),在PORTAl1中有变化,则执行unison后PORTAL2就会发生对应的变化,例如:PORTAL1:


#mkdir /opt/dir1

#ll

而此时的PORTAL2是没有dir1文件的

执行命令同步:

PORTAL1:


#unison

PORTAL2:


#ll

则会出现dir1文件,说明同步成功。

注:unison只会同步变动的一方,所以在生产环境中不能轻易改动PORTAL2中的内容。

PORTAl2只在PORTAL1出故障的时候启用,所以必须保证同步是正确的,且及时。

五、定时或定期执行同步

如果想要定期执行,则通过crontab计划任务来实现,例如通过以下方式设置每5分钟执行一次。

#crontab -e

* * * * *
/usr/local/bin/unison

使计划任务生效 需要重启 crond服务

[[email protected] ~]# service crond restart

六、安装inotify实时监控

11. 查看系统是否支持inotify

说明支持。

12. 安装inotify

#cd /opt

#tar zxvf
inotify-tools-3.13.tar.gz

#cd
inotify-tools-3.13/

#./configure

#make &&
make install

13. 编写inotify实时监控脚本

#cd /tmp

#cd ..

#vim inotify.sh


#!/bin/bash

UNISON=`ps -ef
|grep -v grep|grep -c inotifywait`

if [ ${UNISON}
-lt 1 ]

then

user2="unison"

ip2="FH-UMP-PORTAL2"

src2="/opt"

dst2="/opt"

/usr/local/bin/inotifywait -mrq -e
create,delete,modify,move $src1 | while read line

do

#/root/bin/unison -batch
$src2 ssh://[email protected]$ip2//$dst2

/root/bin/unison

echo -n "$line "
>> /opt/inotify/inotify$(date +%u).log

echo ` date +%F %T "
" -f1-4` >> /opt/inotify/inotify$(date +%u).log

done

fi

#chmod +x
inotify.sh

原文地址:https://www.cnblogs.com/A121/p/9941673.html

时间: 2024-11-08 12:30:59

UNISON+inotify数据的双向实时同步的相关文章

利用unison+inotify 实现数据双向实时同步

利用unison+inotify 实现数据双向实时同步 环境:Centos 6.5 64位 server1 :192.168.1.201 server2 :192.168.1.250 需求软件:ocaml unison inotify 我这里全是使用yum安装的,若是喜欢使用源码编译安装的可以官网下载源码包. yum install ocaml unison inotify 第一步:保证两台服务器之间可以通过ssh无密码访问,为了安全,需要创建一个普通用户: 两边执行的步骤一样: useradd

rsync+inotify 实现服务器文件实时同步

rsync+inotify 实现服务器文件实时同步 操作系统:CentOS 6.X 源服务器:192.168.80.132 目标服务器:192.168.80.128 目的:把源服务器上/data/app目录实时同步到目标服务器的/data/app下 具体操作: 第一部分:在目标服务器192.168.80.128上操作 一.在目标服务器安装Rsync服务端 1.关闭SELINUX vi /etc/selinux/config #SELINUX=enforcing #SELINUXTYPE=targ

20190308 samba服务、inotify和rsync实现实时同步、防火墙

Samba服务[root@centos7 ~]#yum install samba[root@centos7 ~]#systemctl start smb[root@centos7 ~]#ss -ntluNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port tcp LISTEN 0 50 :139 : tcp LISTEN 0 50 :445 端口已开启 : 可以做共享了. 主配置文件:/etc/samba/smb.conf

inotify和rsync实现实时同步

inotify和rsync实现实时同步首先先用两台主机实现rsyncc同步服务端:[[email protected] data 14:20:35]#echo "rsyncuser:123" > /etc/rsync.pass 生成验证文件[[email protected] data 14:21:13]#chmod 600 /etc/rsync.pass [[email protected] data 14:21:19]#mkdir /backup 准备目录[[email pr

rsync unison+inotify双向实时同步

rsync多线程同步 A:文件服务器 ip:10.10.1.10 B:备份服务器 ip:10.10.1.11 1.在B服务器上安装rsync软件 tar xzvf rsync-3.1.0.tar.gz cd rsync-3.1.0 ./configure make make install 2.配置双机ssh信任 在两台服务器的root目录下创建.ssh目录并设置正确的权限 mkdir ~/.ssh chmod 700 ~/.ssh 使用ssh-keygen命令生成SSH协议的RSA密钥 ssh

unison+inotify-tools触发式双向自动同步

双向实时数据同步部署 首先添加服务器ssh信任,即免秘钥登陆 Web1:192.168.10.36 Web2:192.168.10.37 分别在web1和web2上执行以下命令 mkdir ~/.ssh chmod 700 ~/.ssh 生成RSA密钥 ssh-keygen -t rsa  (然后连续三次回车) 添加密钥到授权密钥文件中 cd ~/.ssh ssh "-p 22" 192.168.10.36 cat /root/.ssh/id_rsa.pub >> auth

rsync+inotify节点间文件实时同步

说明: 操作系统:CentOS 7.2 server服务器(代码.数据检入)server: SLB-1:10.171.63.120 client服务器(数据检出.主动推送)client:WWW:10.163.0.233 目的:把client服务器上/www/web目录实时同步到server服务器的/www/web下 ============================================================ 具体操作: 第一部分:在server--SLB-1_10.1

配置rsync+inotify实现站点文件实时同步

一.rsync简介 rsync是linux系统下的数据镜像备份工具.可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,且采用优化的同步算法,在传输前执行压缩,因此非常适用于异地备份.镜像服务器等应用. rsync的官方站点为http:rsync.samba.org/ 二.使用rsync备份工具 2.1.rsync命令的基本用法 用法类似于cp命令,例如将文件/etc/fstab 和目录/boot/grub同步备份到.opt目录下,其中-r表示递归整个目录,-l选项用来备份链接文

rsync+ssh+inotify实现服务器文件实时同步

如何实现两台web服务器的文件同步的,答案是rsync,但是,如何做到实时同步呢,cron已经达不到这样的要求了,同步的再快,也会有时间间隔,cron时刻执行,也会浪费系统的资源,下面,我将介绍ssh+rsync+inotify来实现两台web间的文件实时同步. 拓扑如下:  实验的linux系统为CentOS 6.5,实验之前确保开发环境已安装完毕 首先,我们介绍一下inotify,这是linux的一个新特性,在2.6的内核开始加入,它是监控文件系统,并且及时的向我们的rsync发出相关信息,