本文系统Centos6.0
Server:(Centos) 192.168.182.130
Client:(lv2) 192.168.182.129
rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了――remote sync。
支持匿名传输,以方便进行网站镜象。
rsync -参数 用户名@同步服务器的IP::rsyncd.conf中那个方括号里(模块名)的内容 本地存放路径 如:
rsync �Cvzrtopg �Cdelete --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 即 �Cgroup 保持文件属组信息
-a 即 --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
--delete 以rsync服务器为基准保持数据同步,如果服务器删除了某一文件,客户端也会删掉。
--progress 显示出详细的进度情况。
--exclude 用于排除不需要的文件类型。
[email protected]::lansggtest 指定备份的服务器和相关的模块, lansgg 为服务器Server上面设置的rsync同步帐号;
/backup 指定备份的文件在客户端上的存放位置 。
--password-file=/etc/rsyncd.pass 指定客户端存放密码文件的位置。
rsync简单应用;
1、Server端安装rsync;
[root@Centos ~]# yum install -y rsync
创建同步测试目录并且创建同步用户;
[root@Centos ~]# mkdir /root/test [root@Centos ~]# vim /etc/rsyncd.pass lansgg:lansgg123
修改密码文件权限
[root@Centos ~]# chmod 600 /etc/rsyncd.pass
呜呼,当你rpm -ql该包的时候,你会发现没有什么配置文件,下面就是自己写配置文件了;
[root@Centos ~]# vim /etc/rsyncd.conf uid=root #该选项指定当该模块传输文件时守护进程应该具有的uid;默认值是"nobody", gid=root ##该选项指定当该模块传输文件时守护进程应该具有的gid;默认值是”nobody”。 use chroot=no #不使用chroot max connections=0 #设置最大连接数,默认为0,即无限制。你可以随意设置,10、20都可以 strict mode=yes #设置是否检查口令文件的权限 pid file=/var/run/rsyncd.pid #指定rysnc进程的pid文件位置 lock file=/var/lock/rsync.lock #指定支持max connections的锁文件 log file=/var/log/rsyncd.log #指定 rsync日志输出路径 [lansggtest] #模块名,可使用任意名称 path=/root/test/ #同步源目录路径 comment=lansgg test #模块描述 ignore errors #出现I/O错误时可忽略。 read only=no #是否只读,设置为no时客户端可上传文件。 write only=no #设置为no 时客户端可下载文件。 hosts allow=192.168.182.129 #允许访问主机 hosts deny=* #拒绝访问的主机,*表示所有主机。 list=false #设置客户端请求时是否列出该模块,false为隐藏。 auth users=lansgg #设置连接时使用的用户,即密码文件里面定义的用户名。如果没有这行,则表明是匿名 secrets file=/etc/rsyncd.pass #指定密码文件位置
启动rsync
[root@Centos ~]# rsync --daemon
在测试目录中创建测试文件
2、Client操作;
安装rsync
[root@lv2 ~]# yum install rsync -y
配置密码文件,里面写入与服务器Server上相同的密码,但不需要再写帐号名。
[root@lv2 ~]# vim /etc/rysncd.pass lansgg123
mkdir /root/backup #此为创建本地备份目录
开始同步;
rsync -vzrtopg --delete --progress --exclude "*.log" [email protected]::lansggtest /root/backup --password-file=/etc/rsyncd.pass
没有log日志文件;
Ps:你可以将rsync --daemon写入rc.local文件,
你可以将上面的命令写入cron;实现定时同步;
下面是rsync+inotify实现数据实时同步;
上面已经表明,rsync无法实现实时的同步;所以才做了cron;这也是rsync的不足;
Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。Inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。您还可以跟踪活动的源头和目标等细节。
要使用 inotify,必须具备一台带有 2.6.13 或更新内核的 Linux 机器(以前的 Linux 内核版本使用更低级的文件监控器 dnotify)。如果不知道内核的版本,请转到 shell,输入 uname -a:
这就是常说的rsync可以下发多台机器配置文件的图;其实和上面的案例是反过来,上面是client下载server端,进行备份,这个案例是client端进行上传到多台server端,比如集群的话;
在Server端(三台)配置如上;
uid=root #该选项指定当该模块传输文件时守护进程应该具有的uid;默认值是"nobody", gid=root ##该选项指定当该模块传输文件时守护进程应该具有的gid;默认值是”nobody”。 use chroot=no #不使用chroot max connections=0 #设置最大连接数,默认为0,即无限制。你可以随意设置,10、20都可以 strict mode=yes #设置是否检查口令文件的权限 pid file=/var/run/rsyncd.pid #指定rysnc进程的pid文件位置 lock file=/var/lock/rsync.lock #指定支持max connections的锁文件 log file=/var/log/rsyncd.log #指定 rsync日志输出路径 [lansggtest] #模块名,可使用任意名称 path=/root/test/ #同步源目录路径 comment=lansgg test #模块描述 ignore errors #出现I/O错误时可忽略。 read only=no #是否只读,设置为no时客户端可上传文件。 write only=no #设置为no 时客户端可下载文件。 hosts allow=192.168.182.129 #允许访问主机 hosts deny=* #拒绝访问的主机,*表示所有主机。 list=false #设置客户端请求时是否列出该模块,false为隐藏。 auth users=lansgg #设置连接时使用的用户,即密码文件里面定义的用户名。如果没有这行,则表明是匿名 secrets file=/etc/rsyncd.pass #指定密码文件位置
下面是接着在Client端安装inotify-tools
[root@Centos ~]# yum install inotify-tools -y
rpm -ql inotify-tools /usr/bin/inotifywait /usr/bin/inotifywatch
inotifywait用于等待文件或文件集上的一个特定事件,可以监控任何文件和目录设置,并且可以递归地监控整个目录树;
inotifywatch用于收集被监控的文件系统统计数据,包括每个inotify事件发生多少次等信息。
mkdir /root/backup vim /etc/rsyncd.pass lansgg123
编写实时检测同步脚本;
vi dataup.sh #!/bin/bash server1=192.168.182.130 server2=192.168.182.131 server3=192.168.182.132 src=/root/backup dstmode=mode1 user=lansgg /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src| while read files do rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.pass $src $user@$server1::$dstmode rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.pass $src $user@$server2::$dstmode rsync -vzrtopg --delete --progress --password-file=/etc/rsyncd.pass $src $user@$server3::$dstmode echo "$files was rsynced" >> /tmp/rsync.log 2>&1 done
inotifywait的相关参数:
-m 即 �Cmonitor ,表示始终保持事件监听状态;
-r 即 �Crecursive,表示递归查询目录
-q 即 �Cquiet ,打印出监控事件
--timefmt,指定时间的输出格式
--format,指定变化文件的详细信息
sh inotify.sh &
echo “sh inotify.sh &” >> /etc/rc.local
现在可以在client;创建、删除文件进行测试;
Client执行:
[root@node1 ~]# ./dataup.sh & [1] 10461 [root@node1 ~]# tail -f /tmp/rsync.log
当你在Client执行mkdir /root/backup/testtesttest (创建测试目录)
你会发现Client客户端日志:
你去查看server端;
全部已经同步了;
Ps:在执行search inotify的时候,发现一款incron;系统简介:incron.i686 : Inotify cron system;大家可以去研究下;