当前位置 : 主页 > 操作系统 > centos >

Linux系统文件同步rsync+ssh+inotify+unison实现

来源:互联网 收集:自由互联 发布时间:2022-06-20
rsync:是类unix系统下的数据 镜像和快速增量备份的 工具(remote sync).远程同步支持本地复制,或 者与其他SSH、rsync主机同步,但不能做到实时同步. Inotify:是监控文件系统操作,比如读取,写入和

rsync:是类unix系统下的数据镜像和快速增量备份的工具(remote sync).远程同步支持本地复制,或

       者与其他SSH、rsync主机同步,但不能做到实时同步.

Inotify:是监控文件系统操作,比如读取,写入和创建.Inotify反应灵敏,用法非常简单,并且比cron任务

       的繁忙轮询高效得多.

Unison:是一款跨windows/linux/MAC OS平台的文件同步工具,不仅支持本地对本地同步,也支持通过

        SSH、RSH和Socket等网络协议进行同步.更棒的是Unison支持双向同步操作,你既可以从A同步到

        B,也可以从B同步到A,这些都不需要额外的设定.

 

环境规划:

   IP              主机名

192.168.1.247      tong1

192.168.1.248      tong2

     

一.利用rsync+ssh工具对文件同步(用计划任务定时同步)

步骤:

(1)在文件服务端和文件镜像端都要ssh互信

(2)在文件服务端安装rsync软件

(3)在文件镜像端也要安装rsync软件


1.下载安装rsync软件和ssh互相信任

[root@tong1 ~]# hostname
tong1
[root@tong1 ~]# cat /etc/hosts
192.168.1.247 tong1
192.168.1.248 tong2

[root@tong1 ~]# wget https://download.samba.org/pub/rsync/src/rsync-3.1.1.tar.gz

[root@tong1 ~]# tar xvf rsync-3.1.1.tar.gz

[root@tong1 ~]# cd rsync-3.1.1
[root@tong1 rsync-3.1.1]# ./configure --prefix=/usr/local/rsync-3.1.1

[root@tong1 rsync-3.1.1]# make && make install

[root@tong1 rsync-3.1.1]# echo $?
0

[root@tong1 ~]# ssh-keygen  -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
79:cb:ca:73:40:9e:5c:2b:46:7f:67:b1:b2:35:8a:91 root@tong1
The key's randomart p_w_picpath is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|        o..   .  |
|       =S+.o   o |
|        BoE.o *  |
|       . oo+ B . |
|       ...o o    |
|        oo       |
+-----------------+

[root@tong1 ~]# scp /root/.ssh/id_rsa.pub tong2:/root/.ssh/authorized
root@tong2's password:
id_rsa.pub                           100%  392     0.4KB/s   00:00   
[root@tong1 ~]#

 

tong2节点:

[root@tong2 ~]# ssh-keygen  -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
/root/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
79:cb:ca:73:40:9e:5c:2b:46:7f:67:b1:b2:35:8a:91 root@tong2
The key's randomart p_w_picpath is:
+--[ RSA 2048]----+
|                 |
|                 |
|                 |
|        o..   .  |
|       =S+.o   o |
|        BoE.o *  |
|       . oo+ B . |
|       ...o o    |
|        oo       |
+-----------------+

[root@tong2 ~]# cd .ssh/

[root@tong2 .ssh]# cat id_rsa.pub >> authorized_keys
[root@tong2 .ssh]# scp authorized_keys  192.168.1.247:/root/.ssh/

[root@tong2 .ssh]# ssh tong1 date
Wed May  6 11:28:19 CST 2015
[root@tong2 .ssh]# ssh tong2 date
Wed May  6 11:31:24 CST 2015
[root@tong2 .ssh]#


2.编辑配置文件和启动服务

tong1节点:

[root@tong1 .ssh]# cd /etc/
[root@tong1 etc]# vim rsyncd.conf
uid=root             --rsync守护进程的用户
gid=root
use chroot=no        --不能跳到上级目录
max_connect=4        --允许4个客户端连接
strict modes=yes     --脚本模式
port=873             --监听端口

[backup]
path=/home/rsync             --服务根目录
comment=This is a test       --描述信息
ignore errors                --忽略IO错误
read only=yes                --只读
list=no                      --不能列出文件
auth users=hening            --认证用户名
secrets file=/etc/rsync.pas    --密钥文件
hosts allow=192.168.1.248      --允许哪个IP访问

pid file=/var/run/rsync.pid          --PID文件
lock file=/var/run/rsync.lock       
log file=/var/log/rsync.log          --日志文件

[root@tong1 etc]# vim rsync.pas      --密钥文件内容
hening:111111                        --用户名和密码(这个用户名不是系统用户名,是rsync客户端登陆时用的)

[root@tong1 etc]# chmod 600 /etc/rsync.pas
[root@tong1 etc]# chown root:root /etc/rsync.pas

[root@tong1 etc]# vim rsync.motd     --登陆后的提示信息
Welcome to use the rsync services!

[root@tong1 etc]# mkdir /home/rsync/{1,2} -pv

[root@tong1 etc]# touch /home/rsync/1.txt

[root@tong1 etc]# /usr/local/rsync-3.1.1/bin/rsync --daemon

[root@tong1 etc]# netstat -antup |grep rsync
tcp        0      0 0.0.0.0:873      0.0.0.0:*        LISTEN      3352/rsync          
tcp        0      0 :::873           :::*             LISTEN      3352/rsync          
[root@tong1 etc]# vim /etc/rc.local

/usr/local/rsync-3.1.1/bin/rsync --daemon

[root@tong1 etc]#


3.配置rsync客户端

tong2节点:

[root@tong2 ~]# mkdir /home/rsync

[root@tong2 ~]# vim /etc/rsync.pas

111111                 --只写密码就可以了

[root@tong2 ~]# chmod 600 /etc/rsync.pas
[root@tong2 ~]# chown root:root /etc/rsync.pas 

[root@tong2 rsync]# /usr/local/rsync-3.1.1/bin/rsync -vzrtopg --progress --delete hening@192.168.1.247::backup /home/rsync --password-file=/etc/rsync.pas   --测试同步文件
receiving incremental file list
./

1/
2/

1.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=2/4)

sent 48 bytes  received 155 bytes  135.33 bytes/sec
total size is 0  speedup is 0.00
[root@tong2 rsync]# ll /home/rsync/
total 8
drwxr-xr-x. 2 root root 4096 May  6 11:58 1
-rw-r--r--. 1 root root    0 May  6 13:08 1.txt
drwxr-xr-x. 2 root root 4096 May  6 11:58 2
[root@tong2 ~]# vim /usr/local/rsync-3.1.1/bin/rsync.sh    --将命令保存为脚本同步文件

#!/bin/bash
/usr/local/rsync-3.1.1/bin/rsync -vzrtopg --progress --delete hening@192.168.1.247::backup /home/rsync --password-file=/etc/rsync.pas

[root@tong2 ~]# crontab -e
*/1 * * * * /usr/local/rsync-3.1.1/bin/rsync.sh >/dev/null 2>&1   --每一分钟同步一次

[root@tong2 ~]#


rsync命令参数详解:

-v          表示显示verbose详细显示

-z          表示压缩文件

-r          表示递归

-t          保持原文件创建的时间

-o          保持原文件的属主

-g          保持原文件属组

-p          保持原文件的参数

-a          存档模式

--progress  详细信息进度情况

--delete    服务器端删除文件时,客户端也删除

--password-file    密码文件

hening             在服务端指定的用户,不是系统用户(auth users=hening)

192.168.1.247      服务端的IP地址

::backup           服务端配置文件的模块([backup])


二.rsync和Inotify文件实时同步(脚本在后台运行就行了)

步骤:

(1)在文件服务端安装rsync软件

(2)在文件镜像端安装rsync和Inotify软件

(3)在文件镜像端编辑脚本使文件同步


1.在tong1和tong2节点都下载安装rsync软件(安装如上)

2.在tong2节点下载安装inotify-tools工俱

tong2节点:

[root@tong2 ~]# wget http://ncu.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz

[root@tong2 ~]# tar xvf inotify-tools-3.13.tar.gz
[root@tong2 ~]# cd inotify-tools-3.13
[root@tong2 inotify-tools-3.13]# ./configure  --prefix=/usr/local/inotify-tools-3.13 && make && make install

[root@tong2 inotify-tools-3.13]# cd /usr/local/inotify-tools-3.13/bin/
[root@tong2 bin]# ll
total 80
-rwxr-xr-x. 1 root root 38598 May  6 13:29 inotifywait
-rwxr-xr-x. 1 root root 40369 May  6 13:29 inotifywatch
[root@tong2 bin]# vim inotify_rsync.sh

#!/bin/bash

srcip=192.168.1.247
desip=192.168.1.248
descdir=/home/rsync
srcdir=/home/rsync

/usr/local/inotify-tools-3.13/bin/inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e close_write,modify,delete,create,attrib $srcdir |
while read DATA TIME FILE DIR; do
   /usr/local/rsync-3.1.1/bin/rsync -vzrtopg --progress --delete /home/rsync  hening@192.168.1.248::backup --password-file=/etc/rsync.pas & > /dev/null 2>&1 && echo "
At ${TIME} on ${DATE},file was backed up via rsync" >> /var/log/rsync.log
done     

[root@tong2 bin]# ./inotify_rsync.sh  &       --后台运行脚本
[1] 23941
[root@tong2 bin]# 


3.测试文件是否同步

tong1节点:

[root@tong1 ~]# cd /home/rsync/
[root@tong1 rsync]# mkdir 1 2 3
[root@tong1 rsync]# touch a.txt b.txt c.xls
[root@tong1 rsync]# ll
total 12
drwxr-xr-x. 2 root root 4096 May  6 15:35 1
drwxr-xr-x. 2 root root 4096 May  6 15:35 2
drwxr-xr-x. 2 root root 4096 May  6 15:35 3
-rw-r--r--. 1 root root    0 May  6 15:35 a.txt
-rw-r--r--. 1 root root    0 May  6 15:35 b.txt
-rw-r--r--. 1 root root    0 May  6 15:35 c.xls
[root@tong1 rsync]# 


tong2节点:

[root@tong2 ~]# cd /home/rsync/          --如果两边文件不能同步就删除镜像服务器的文件

[root@tong2 rsync]# ll
total 12
drwxr-xr-x. 2 root root 4096 May  6 15:35 1
drwxr-xr-x. 2 root root 4096 May  6 15:35 2
drwxr-xr-x. 2 root root 4096 May  6 15:35 3
-rw-r--r--. 1 root root    0 May  6 15:35 a.txt
-rw-r--r--. 1 root root    0 May  6 15:35 b.txt
-rw-r--r--. 1 root root    0 May  6 15:35 c.xls
[root@tong2 rsync]#


inotify参数详解:

inotifywait -mr --timefmt '%d/%m/%y %H:%M' 

-m     --一直保持监听

-r     --递归查看

-e close_write,modify,delete,create,attrib

-e     --是指监听创建,移动,删除,写入权限


三.unison+inotify文件双向同步,无法实现实时双向同步

1.下载安装ocaml,unison软件

tong1节点和tong2节点一样:

[root@tong1 ~]# wget http://caml.inria.fr/pub/distrib/ocaml-3.12/ocaml-3.12.1.tar.gz

[root@tong1 ~]# tar xvf ocaml-3.12.1.tar.gz

[root@tong1 ~]# cd ocaml-3.12.1

[root@tong1 ocaml-3.12.1]# ./configure

[root@tong1 ocaml-3.12.1]# make world

[root@tong1 ocaml-3.12.1]# make opt

[root@tong1 ocaml-3.12.1]# make install

[root@tong1 ocaml-3.12.1]# cd ..

[root@tong1 ~]# wget http://www.seas.upenn.edu/~bcpierce/unison//download/releases/unison-2.40.63/unison-2.40.63.tar.gz

[root@tong1 ~]# tar xvf unison-2.40.63.tar.gz
[root@tong1 ~]# cd unison-2.40.63
[root@tong1 unison-2.40.63]# make UISTYLE=text

[root@tong1 unison-2.40.63]# mkdir /root/bin

[root@tong1 unison-2.40.63]# make install

[root@tong1 unison-2.40.63]# cp -a  /root/bin/*  /usr/bin/


2.创建脚本对文件实时同步

tong1节点:

[root@tong1 unison-2.40.63]# cd /usr/local/inotify-tools-3.13/bin/
[root@tong1 bin]# vim inotify_unison.sh

#!/bin/bash
ip2=192.168.1.248
src2=/home/rsync
dst2=/home/rsync

/usr/local/inotify-tools-3.13/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e close_write,modify,delete,create,attrib $src2 |
while read line; do
     /usr/bin/unison-2.40 -batch $src1 ssh://$ip2/$dst2 >> /var/log/rsync.log
done

[root@tong1 bin]#


tong2节点:

[root@tong2 unison-2.40.63]# cd /usr/local/inotify-tools-3.13/bin/
[root@tong2 bin]# vim inotify_unison.sh

#!/bin/bash
ip1=192.168.1.247
src1=/home/rsync
dst1=/home/rsync

/usr/local/inotify-tools-3.13/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e close_write,modify,delete,create,attrib $src1 |
while read line; do
     /usr/bin/unison-2.40 -batch $src1 ssh://$ip1/$dst1 >> /var/log/rsync.log
done

[root@tong2 bin]#

上一篇:Centos中httpd源代码安装与测试
下一篇:没有了
网友评论