本文系统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>>> /tmp/rsync.log </code><code>2</code><code>>&</code><code>1</code>
<code>done</code>
inotifywait的相关参数:
-m 即 –monitor ,表示始终保持事件监听状态;
-r 即 –recursive,表示递归查询目录
-q 即 –quiet ,打印出监控事件
--timefmt,指定时间的输出格式
--format,指定变化文件的详细信息
sh inotify.sh &
echo “sh inotify.sh &” >> /etc/rc.local
现在可以在client;创建、删除文件进行测试;
Client执行:
<code>[root@node1 ~]# ./dataup.sh &</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