天天看点

Linux之rsync简单应用&&rsync+inotify实时应用

本文系统Centos6.0

Server:(Centos)  192.168.182.130

Client:(lv2)     192.168.182.129

它的特性如下:

可以很容易做到保持原来文件的权限、时间、软硬链接等等。

无须特殊权限即可安装。

安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

支持匿名传输,以方便进行网站镜象。

usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf

/etc/rsyncd/rsyncd.conf 是你刚才编辑的rsyncd.conf的位置.

也可以在/etc/rc.d/rc.local里加入让系统自动启动等.

rsync -参数 用户名@同步服务器的IP::rsyncd.conf中那个方括号里(模块名)的内容 本地存放路径 如:

rsync –vzrtopg –delete --progress --exclude “*.log”  [email protected]::lansggtest /root/backup --password-file=/etc/rsyncd.pass

该命令的解释如下:

-v即--verbose   显示传输的详细信息

-z 即--compress 传输时对文件进行压缩

-r 即—recursive 对子目录进行递归处理

-t 即—times    保持文件的时间信息

-o即—owner  用来保持文件的属主信息

-p 即 --perms 保持文件权限

-g 即 –group 保持文件属组信息

-a 即 --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD

--delete  以rsync服务器为基准保持数据同步,如果服务器删除了某一文件,客户端也会删掉。

--progress 显示出详细的进度情况。

--exclude 用于排除不需要的文件类型。

/backup 指定备份的文件在客户端上的存放位置 。

--password-file=/etc/rsyncd.pass 指定客户端存放密码文件的位置。

rsync简单应用;

<a target="_blank" href="http://blog.51cto.com/attachment/201306/224936526.jpg"></a>

1、Server端安装rsync;

1

<code>[root@Centos ~]# yum install -y rsync</code>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/225921156.jpg"></a>

创建同步测试目录并且创建同步用户;

2

3

<code>[root@Centos ~]# mkdir /root/test</code>

<code>[root@Centos ~]# vim /etc/rsyncd.pass</code>

<code>lansgg:lansgg123</code>

修改密码文件权限

<code>[root@Centos ~]# chmod </code><code>600</code> <code>/etc/rsyncd.pass</code>

呜呼,当你rpm -ql该包的时候,你会发现没有什么配置文件,下面就是自己写配置文件了;

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

<code>[root@Centos ~]# vim /etc/rsyncd.conf</code>

<code>uid=root  #该选项指定当该模块传输文件时守护进程应该具有的uid;默认值是</code><code>"nobody"</code><code>,</code>

<code>gid=root  ##该选项指定当该模块传输文件时守护进程应该具有的gid;默认值是”nobody”。</code>

<code>use</code> <code>chroot=no   #不使用chroot</code>

<code>max connections=</code><code>0</code>   <code>#设置最大连接数,默认为</code><code>0</code><code>,即无限制。你可以随意设置,</code><code>10</code><code>、</code><code>20</code><code>都可以</code>

<code>strict mode=yes   #设置是否检查口令文件的权限</code>

<code>pid file=/</code><code>var</code><code>/run/rsyncd.pid  #指定rysnc进程的pid文件位置</code>

<code>lock file=/</code><code>var</code><code>/lock/rsync.lock  #指定支持max connections的锁文件</code>

<code>log file=/</code><code>var</code><code>/log/rsyncd.log   #指定 rsync日志输出路径</code>

<code>[lansggtest]                     #模块名,可使用任意名称</code>

<code>path=/root/test/                 #同步源目录路径</code>

<code>comment=lansgg test         #模块描述</code>

<code>ignore errors          #出现I/O错误时可忽略。</code>

<code>read only=no            #是否只读,设置为no时客户端可上传文件。</code>

<code>write only=no           #设置为no 时客户端可下载文件。</code>

<code>hosts allow=</code><code>192.168</code><code>.</code><code>182.129</code>        <code>#允许访问主机 </code>

<code>hosts deny=*                      #拒绝访问的主机,*表示所有主机。</code>

<code>list=</code><code>false</code>                  <code>#设置客户端请求时是否列出该模块,</code><code>false</code><code>为隐藏。</code>

<code>auth users=lansgg            #设置连接时使用的用户,即密码文件里面定义的用户名。如果没有这行,则表明是匿名</code>

<code>secrets file=/etc/rsyncd.pass     #指定密码文件位置</code>

启动rsync

<code>[root@Centos ~]# rsync --daemon</code>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/232522588.jpg"></a>

在测试目录中创建测试文件

<a target="_blank" href="http://blog.51cto.com/attachment/201306/232745966.jpg"></a>

2、Client操作;

安装rsync

<code>[root@lv2 ~]# yum install rsync -y</code>

配置密码文件,里面写入与服务器Server上相同的密码,但不需要再写帐号名。

<code>[root@lv2 ~]# vim /etc/rysncd.pass</code>

<code>lansgg123</code>

mkdir /root/backup   #此为创建本地备份目录

开始同步;

<code>rsync -vzrtopg --</code><code>delete</code> <code>--progress --exclude </code><code>"*.log"</code> <code>lansgg@</code><code>192.168</code><code>.</code><code>182.130</code><code>::lansggtest /root/backup --password-file=/etc/rsyncd.pass</code>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/001123934.jpg"></a>

没有log日志文件;

Ps:你可以将rsync --daemon写入rc.local文件,

你可以将上面的命令写入cron;实现定时同步;

下面是rsync+inotify实现数据实时同步;

上面已经表明,rsync无法实现实时的同步;所以才做了cron;这也是rsync的不足;

<a target="_blank" href="http://blog.51cto.com/attachment/201306/103831503.jpg"></a>

这就是常说的rsync可以下发多台机器配置文件的图;其实和上面的案例是反过来,上面是client下载server端,进行备份,这个案例是client端进行上传到多台server端,比如集群的话;

在Server端(三台)配置如上;

<code>hosts allow=</code><code>192.168</code><code>.</code><code>182.129</code>        <code>#允许访问主机</code>

下面是接着在Client端安装inotify-tools

<code>[root@Centos ~]# yum install inotify-tools -y</code>

<code>rpm -ql inotify-tools</code>

<code>/usr/bin/inotifywait</code>

<code>/usr/bin/inotifywatch</code>

inotifywait用于等待文件或文件集上的一个特定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树;

inotifywatch用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息。

<code>mkdir /root/backup</code>

<code> </code><code>vim /etc/rsyncd.pass</code>

编写实时检测同步脚本;

<code>vi  dataup.sh</code>

<code>#!/bin/bash</code>

<code>server1=</code><code>192.168</code><code>.</code><code>182.130</code>

<code>server2=</code><code>192.168</code><code>.</code><code>182.131</code>

<code>server3=</code><code>192.168</code><code>.</code><code>182.132</code>

<code>src=/root/backup</code>

<code>dstmode=mode1</code>

<code>user=lansgg</code>

<code>/usr/bin/inotifywait -mrq --timefmt </code><code>'%d/%m/%y %H:%M'</code> <code>--format </code><code>'%T %w%f%e'</code> <code>-e modify,</code><code>delete</code><code>,create,attrib $src| </code><code>while</code> <code>read files</code>

<code>do</code>

<code>rsync -vzrtopg --</code><code>delete</code> <code>--progress  --password-file=/etc/rsyncd.pass  $src $user@$server1::$dstmode</code>

<code>rsync -vzrtopg --</code><code>delete</code> <code>--progress  --password-file=/etc/rsyncd.pass  $src $user@$server2::$dstmode</code>

<code>rsync -vzrtopg --</code><code>delete</code> <code>--progress  --password-file=/etc/rsyncd.pass  $src $user@$server3::$dstmode</code>

<code>echo </code><code>"$files was rsynced"</code> <code>&gt;&gt; /tmp/rsync.log </code><code>2</code><code>&gt;&amp;</code><code>1</code>

<code>done</code>

inotifywait的相关参数:

-m 即 –monitor ,表示始终保持事件监听状态;

-r  即 –recursive,表示递归查询目录

-q 即 –quiet ,打印出监控事件

--timefmt,指定时间的输出格式

--format,指定变化文件的详细信息

sh inotify.sh &amp;

echo “sh inotify.sh &amp;” &gt;&gt; /etc/rc.local

现在可以在client;创建、删除文件进行测试;

Client执行:

<code>[root@node1 ~]# ./dataup.sh &amp;</code>

<code>[</code><code>1</code><code>] </code><code>10461</code>

<code>[root@node1 ~]# tail -f /tmp/rsync.log</code>

当你在Client执行mkdir /root/backup/testtesttest (创建测试目录)

你会发现Client客户端日志:

<a target="_blank" href="http://blog.51cto.com/attachment/201306/233804703.jpg"></a>

你去查看server端;

<a target="_blank" href="http://blog.51cto.com/attachment/201306/233826865.jpg"></a>

<a target="_blank" href="http://blog.51cto.com/attachment/201306/233826163.jpg"></a>

全部已经同步了;

Ps:在执行search inotify的时候,发现一款incron;系统简介:incron.i686 : Inotify cron system;大家可以去研究下;

本文转自 西索oO 51CTO博客,原文链接:http://blog.51cto.com/lansgg/1227600

继续阅读