通过ssh同步两台linux时间,通过rsync+inotify-tools+ssh实现触发式远程实时同步

文件的同步镜像在很多地方都需要用到,因此rsync这款免费软件得到了广泛的应用,包括在Windows平台上,都已经有了支持rsync的“cwRsyncServer”。

但是,我们一般都是通过结合crontab计划任务来实现文件同步的,这样做的缺点是效率低,不能做到实时同步。

现在,在Linux平台下我们可以利用2.6内核的inotify监控文件系统机制,通过inotify-tools来实现实时同步了。

具体操作如下:

1.安装所需软件

目前各大Linux发行版本都已经具有了rsync与inotify-tools的软件包,推荐通过RPM,yum,apt-get等方式进行安装。

RHEL:

[root@server1 ~]# rpm -ivh rsync-*

[root@server1 ~]# rpm -ivh inotify-tools-*

CentOS:

[root@server1 ~]# yum install rsync inotify-tools

Ubuntu:

[root@server1 ~]# apt-get install rsync inotify-tools

采用源码方式安装的步骤如下:

[root@server1 ~]# wget ftp://ftp.samba.org/pub/rsync/rsync-3.0.8.tar.gz

[root@server1 ~]# tar xzvf rsync-3.0.8.tar.gz

[root@server1 ~]# cd rsync-3.0.8

[root@server1 ~]# ./configure

[root@server1 ~]# make

[root@server1 ~]# make install

[root@server1 ~]# wget

[root@server1 ~]# tar xzvf inotify-tools-3.14.tar.gz

[root@server1 ~]# cd inotify-tools-3.14

[root@server1 ~]# ./configure

[root@server1 ~]# make

[root@server1 ~]# make install

2.配置ssh key信任

建议通过普通用户进行操作,理由是通过root操作本身就危险,免密码登陆的root就更危险了。

在两台服务器上创建rsync用户

[root@server1 ~]# useradd -m rsync

[root@server1 ~]# passwd rsync

[root@server2 ~]# useradd -m rsync

[root@server2 ~]# passwd rsync

[root@server1 ~]# su - rsync

[rsync@server1 ~]$ ssh-keygen -t rsa

在提示保存私钥(key)和公钥(public key)的位置时,使用默认值;

在提示是否需要私钥密码(passphrase)时,直接敲回车,即不使用私钥密码。

之后,将生成一对密钥,id_rsa(私钥文件)和id_rsa.pub(公钥文件),保存在/home/rsync/.ssh/目录下。

将公钥添加到远程主机的 authorized_keys 文件中

将文件上传到远程主机(假设远程主机IP为192.168.10.4)

[rsync@server1 ~]$ scp ~/.ssh/id_rsa.pub rsync@192.168.10.4:/home/rsync/

使用rsync用户SSH到登陆到远程主机,并将公钥添加到 authorized_keys 文件中

[rsync@server2 ~]$ mkdir .ssh

[rsync@server2 ~]$ chmod 700 .ssh

[rsync@server2 ~]$ mv ~/id_rsa.pub ~/.ssh/authorized_keys

重启SSH服务

[root@server1 ~]# /etc/init.d/sshd restart

[root@server2 ~]# /etc/init.d/sshd restart

3.创建inotify_rsync.sh脚本

[root@server1 ~]# vim inotify_rsync.sh

1    #!/bin/sh

2    SRC=/home/rsync/test

3    DST=rsync@192.168.10.4:/home/rsync/test

4

5    /bin/su - rsync

6    /usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib ${SRC} | while read D E F

7            do

8                    /usr/bin/rsync -ahqzt --delete $SRC $DST

9            done

相关注解如下:

/usr/local/bin/inotifywait -mrq -e modify,delete,create,attrib ${src}

-m 是保持一直监听

-r 是递归查看目录

-q 是打印出事件

-e create,move,delete,modify,attrib 是指 “监听 创建 移动 删除 写入 权限” 事件

/usr/bin/rsync -ahqzt --delete $SRC $DST

-a 存档模式

-h 保存硬连接

-q 制止非错误信息

-z 压缩文件数据在传输

-t 维护修改时间

-delete 删除于多余文件

要排除同步某个目录时,为rsync添加--exculde=PATTERN参数,注意,路径是相对路径,具体查看man rsync。

要排除某个目录的事件监听的处理时,为inotifywait添加--exclude或--excludei参数,具体查看man inotifywait。

inotifywait 命令产生三个返回值,分别是“日期,时间,文件” 这3个返回值会做为参数传给read,因此脚本中的“while read D E F” 写法细化了返回值。

赋予脚本可执行权限

[root@server1 ~]# chmod +x inotify_rsync.sh

执行脚本

[root@server1 ~]# /root/inotify_rsync.sh &

设置脚本开机自启动

[root@server1 ~]# cat "/root/inotify_rsync.sh &" >> /etc/rc.local

4.测试

首先在server1服务器的/home/rsync/test目录下创建文件或目录,然后再到server2的/home/rsync/test目录下查看,如果看到就说明成功了。

[rsync@server1 ~]$ cd test

[rsync@server1 test]$ touch a.txt

注意:第一次SSH连接的时候可能需要输入一次密码,之后就不需要输入了。

[rsync@server2 ~]$ cd test

[rsync@server2 test]$ ls

a.txt

看到了a.txt文件,说明文件同步已经成功!

文章资源来自:

阅读(15111) | 评论(0) | 转发(7) |

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值