在日常的运维工作中,需要保证文件的高可用性,以防单点带来的文件丢失。 根据场景不同,一般会有单向和双向同步两种方式。
1、双向同步:unison+inotify 用于启动切换的场景
2、单向同步:rsync+inotify  用于手工恢复的场景
大多数情况下,都用单向同步即可,如果有问题的话,运维认为手工恢复即可; 如果对恢复的实时性要求不叫高的话,可以用双向同步,出问题的时候,让系统自动切换先用起来,然后再人工维护,不影响正常使用。
我们来演示一下双向同步环境的搭建和配置。

1 Unison简介

Unison是Windows、Linux以及其他Unix平台下都可以使用的文件同步工具,它能使两个文件夹(本地或网络上的)保持内容的一致。Unison拥有与其它一些同步工具或文件系统的相同的特性,但也有自身的特点:
a.跨平台使用;
b.对内核和用户权限没有特别要求;
c.Unison是双向的,它能自动处理两分拷贝中更新没有冲突的部分,有冲突的部分将会显示出来让用户选择更新策略;
d.只要是能连通的两台主机,就可以运行unison,可以直接使用socket连接或安全的ssh连接方式,对带宽的要求不高,使用类似rsync的压缩传输协议。

示例环境:两台centos7的环境
vm1 192.168.1.110
vm2 192.168.1.111

2、编译并安装Unison

Linux下通过源码包编译安装Unison时,需要用到Objective Caml compiler。

2.1 编译和安装ocaml

[root@vm1 ~]# wget http://caml.inria.fr/pub/distrib/ocaml-4.02/ocaml-4.02.0.tar.gz
[root@vm1 ~]# tar -xzvf ocaml-4.02.0.tar.gz
[root@vm1 ~]# cd ocaml-4.02.0
[root@vm1 ocaml-4.02.0]# ./configure
[root@vm1 ocaml-4.02.0]# make world opt
[root@vm1 ocaml-4.02.0]# make install

2.2 编译安装Unison

[root@vm1 ~]# wget ftp://133.31.130.35/pub/pkgsrc/distfiles/unison-2.48.3.tar.gz
[root@vm1 ~]# tar -xzvf unison-2.48.3.tar.gz
[root@vm1 ~]# cd unison-2.48.3
[root@vm1 unison-2.48.3]# make UISTYLE=text
[root@vm1 unison-2.48.3]# make install

2.3 copy unsion到/usr/local/bin

[root@vm1 unison-2.48.3]# cp unison /usr/local/bin

3 配置ssh的无密码登录

3.3.1 同步ssh-keygen生成ssh登录安全密钥对(两台机器上分别执行)

ssh-keygen -t rsa

一路回车到结束
这里将生成一对密钥,id_rsa(私钥文件)和id_rsa.pub(公钥文件),保存在 ~/.ssh/目录下

3.2 copy公钥并授权

将id_rsa.pub(公钥)文件的内容,copy到另外一台服务器的authorized_keys 文件中,完成授权

# vm1 上执行
cat ~/id_rsa.pub # 获取内容,然后copy# vm2 的执行黏贴
vi ~/.ssh/authorized_keys# vm2 文件授权
chmod 700 .ssh
chmod 600 ~/.ssh/authorized_keys# vm2 重启SSH服务
[root@vm1 ~]# service sshd restart# vm2 测试:
ssh root@vm1

同样的反向操作,相互授权一下。

4 设置同步脚本

示例这里是同步两台机器的nfs文件夹

vm1 上的脚本(unsion.sh)

#/bin/sh
UNISON=`ps -ef |grep -v grep|grep -c inotifywait`
if [ ${UNISON} -lt 1 ]
thenother_server="192.168.1.110"src1="/home/nfs/"dst2="/home/nfs/"/usr/bin/inotifywait -mrq -e create,delete,delete_self,modify,move $src1 | while read line; do/usr/bin/unison $src1 ssh://$other_server/$dst2echo -n "$line " >> /var/log/inotify.logecho `date | cut -d " " -f1-4` >> /var/log/inotify.logdone
fi

vm2 上的脚本(unsion.sh)

#/bin/sh
UNISON=`ps -ef |grep -v grep|grep -c inotifywait`
if [ ${UNISON} -lt 1 ]
thenother_server="192.168.1.111"src1="/home/nfs/"dst2="/home/nfs/"/usr/bin/inotifywait -mrq -e create,delete,delete_self,modify,move $src1 | while read line; do/usr/bin/unison $src1 ssh://$other_server/$dst2echo -n "$line " >> /var/log/inotify.logecho `date | cut -d " " -f1-4` >> /var/log/inotify.logdone
fi

然后执行两个脚本,则实现双向同步。

5 定时检查同步任务(以防进程死掉)

[unison@localhost ~]# crontab -e
# vm1
* * * * * nohup unsion.sh > /dev/null 2>&1 &# vm2
* * * * * nohup unsion.sh > /dev/null 2>&1 &

linux服务器之间的文件同步(双向同步unison+inotify)相关推荐

  1. Linux命令(20)linux服务器之间复制文件和目录

    linux的scp命令: scp就是secure copy的简写,用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器.  有时我们需要获得远程服务器 ...

  2. Linux服务器之间的文件同步(单向同步:rsync+inotify)

    1.rsync简介 rsync是linux系统下的数据备份工具.支持本地复制,或者与其他SSH.rsync主机同步. 2.rsync的部分特性 rsync支持很多特性: 可以镜像保存整个目录树和文件系 ...

  3. linux主机数据拷贝,linux 服务器之间拷贝文件

    scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用ssh1,并且和ssh1使用相同的认证方式,提供相同的安全保证.与rcp不同的是,scp会要求你输入密码如果需要的话. 最简单的 ...

  4. Linux服务器之间传输文件 scp命令

    scp命令可用于用一台服务器向另一台服务器上传文件 scp -p file.tar.gz root@192.168.107.193:/root 把当前目录下的  file.tar.gz 推送到 192 ...

  5. linux服务器之间传输文件的四种方式

    转载自:https://www.jb51.net/article/82608.htm 1. scp [优点]简单方便,安全可靠:支持限速参数  [缺点]不支持排除目录 [用法] scp就是secure ...

  6. 【scp】【数据传输】服务器之间拷贝数据、数据同步

    方法一:scp(secure copy)安全拷贝 (1)scp定义: scp可以实现服务器与服务器之间的数据拷贝.(   from serverA  to serverB ) 1.scp方法 最简单的 ...

  7. mac服务器文件传输,scp实现mac与linux服务器之间文件传输

    1.mac上传文件到linux服务器 scp 文件名 用户名@服务器ip:目标路径 如:scp -P端口号 /Users/test/testFile test@xxx.xxx.xxx.xxx:/tes ...

  8. linux 服务器之间数据复制—scp

    文章目录 一.命令详情介绍 二.使用实例 三.批量文件传输 另一个方法 scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝 ...

  9. linux100台服务器免密,多台Linux服务器之间互相免密登陆,脚本同步免密

    多台Linux服务器之间互相免密登陆,脚本同步免密 环境: 三台Linux 服务器 IP                          Release                        ...

  10. 关于解决多台linux服务器间的文件实时同步问题

    关于解决多台linux服务器间的文件实时同步问题 参考文章: (1)关于解决多台linux服务器间的文件实时同步问题 (2)https://www.cnblogs.com/fps2tao/p/1003 ...

最新文章

  1. tableau必知必会之用参数操作实现数据下钻
  2. 中国产教融合市场发展模式与运营前景咨询报告2022版
  3. 有机发光二极管显示器测试方法_研究人员证明有机激光二极管将不再是梦
  4. 机器学习 啤酒数据集_啤酒数据集上的神经网络
  5. mysql5.6允许远程服务器访问数据库
  6. SQL 使用总结五(杂记)
  7. 智能实验室-杀马(Defendio) 4.11.0.790
  8. ESXi虚拟机装系统,报错 /vmlinuz has invalid signature 解决方法
  9. 深入浅出python中文版pdf-深入浅出Python 巴里著 中文 PDF版 [37M]
  10. Kubernetes (K8s)安装部署过程(一)之证书安装
  11. 如何在线批量将JPG图片转Word文件
  12. U盘插到电脑上显示设备和打印机
  13. Thematic框架主题结构图
  14. JVM内部锁升级过程(偏向锁,轻量级锁,重量级锁)
  15. 微信图片转文字的方法有哪些
  16. 元宇宙十大技术及其产业
  17. 嵌入式(十四)——Makefile编写及多级目录
  18. LiFi网络优劣势解析
  19. 网页翻译软件-网页翻译软件排行榜
  20. 八,如何检测PC1,PC2直接通信?

热门文章

  1. zuk z2 android 8,骁龙820享受安卓8.0!ZUK Z2悄然升级ZUI 4.0
  2. Android 10.0 强制app横屏显示
  3. 腾讯云跨云迁移工具案例实践:阿里云迁移到腾讯云
  4. 计算机显示桌面的按钮,win10系统添加显示桌面按钮的详细步骤
  5. CSDN学院 免费技术答疑公开课,本周六场即将开播~~~
  6. 如何使用视频格式转换器将flv转换成MP4
  7. 二极管压降随电流的变化
  8. 第1060期AI100_机器学习日报(2017-08-13)
  9. 【人工智能项目】sg2im文字转图像
  10. cef 获取 html代码,CefGlue获取网页源代码