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

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/hosts192.168.1.247 tong1192.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 rsaGenerating 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)? yEnter 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@tong1The key’s randomart image 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 rsaGenerating 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)? yEnter 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@tong2The key’s randomart image 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 dateWed May 6 11:28:19 CST 2015[root@tong2 .ssh]# ssh tong2 dateWed 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=rootuse 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 rsynctcp 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/sectotal size is 0 speedup is 0.00[root@tong2 rsync]# ll /home/rsync/total 8drwxr-xr-x. 2 root root 4096 May 6 11:58 1-rw-r–r–. 1 root root 0 May 6 13:08 1.txtdrwxr-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]# lltotal 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/bashsrcip=192.168.1.247desip=192.168.1.248descdir=/home/rsyncsrcdir=/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.logdone

[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]# lltotal 12drwxr-xr-x. 2 root root 4096 May 6 15:35 1drwxr-xr-x. 2 root root 4096 May 6 15:35 2drwxr-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]# lltotal 12drwxr-xr-x. 2 root root 4096 May 6 15:35 1drwxr-xr-x. 2 root root 4096 May 6 15:35 2drwxr-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 UI >

[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/baship2=192.168.1.248src2=/home/rsyncdst2=/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.logdone

[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/baship1=192.168.1.247src1=/home/rsyncdst1=/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.logdone

[root@tong2 bin]#

你能给的也只有这么多,在这个狭小的圈子里,

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

相关文章:

你感兴趣的文章:

标签云: