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

简介:

本文系统Centos6.0

Server:(Centos)  192.168.182.130

Client:(lv2)     192.168.182.129

rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。

它的特性如下:
可以 镜像保存整个目录树和文件系统。
可以很容易做到保持原来文件的权限、时间、软硬链接等等。
无须特殊权限即可安装。
快速:第一次同步时 rsync 会复制全部内容,但在下一次只传输修改过的文件。rsync 在传输数据的过程中可以实行压缩及 解压缩操作,因此可以使用更少的带宽。
安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接。

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

服务器端启动

usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
可能需要 root权限运行.
/etc/rsyncd/rsyncd.conf 是你刚才编辑的rsyncd.conf的位置.
也可以在/etc/rc.d/rc.local里加入让系统自动启动等.

客户端同步

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

rsync –vzrtopg –delete --progress --exclude “*.log”  lansgg@192.168.182.130::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 用于排除不需要的文件类型。
lansgg@192.168.182.130::lansggtest 指定备份的服务器和相关的模块, lansgg 为服务器Server上面设置的rsync同步帐号;
/backup 指定备份的文件在客户端上的存放位置 。
--password-file=/etc/rsyncd.pass 指定客户端存放密码文件的位置。

rsync简单应用;

224936526.jpg

1、Server端安装rsync;

1
[root@Centos ~]# yum install -y rsync

225921156.jpg

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

1
2
3
[root@Centos ~]# mkdir /root/test
[root@Centos ~]# vim /etc/rsyncd.pass
lansgg:lansgg123

修改密码文件权限

1
[root@Centos ~]# chmod  600  /etc/rsyncd.pass

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[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

1
[root@Centos ~]# rsync --daemon

232522588.jpg

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

232745966.jpg

2、Client操作;

安装rsync

1
[root@lv2 ~]# yum install rsync -y

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

1
2
[root@lv2 ~]# vim /etc/rysncd.pass
lansgg123

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

开始同步;

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

001123934.jpg

没有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:

103831503.jpg

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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

1
[root@Centos ~]# yum install inotify-tools -y
1
2
3
rpm -ql inotify-tools
/usr/bin/inotifywait
/usr/bin/inotifywatch

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

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

1
2
3
mkdir /root/backup
  vim /etc/rsyncd.pass
lansgg123

编写实时检测同步脚本;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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 即 –monitor ,表示始终保持事件监听状态;
-r  即 –recursive,表示递归查询目录
-q 即 –quiet ,打印出监控事件
--timefmt,指定时间的输出格式
--format,指定变化文件的详细信息

sh inotify.sh &

echo “sh inotify.sh &” >> /etc/rc.local

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

Client执行:

1
2
3
[root@node1 ~]# ./dataup.sh &
[ 1 10461
[root@node1 ~]# tail -f /tmp/rsync.log

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

你会发现Client客户端日志:

233804703.jpg

你去查看server端;

233826865.jpg

233826163.jpg

全部已经同步了;

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




本文转自 西索oO 51CTO博客,原文链接:http://blog.51cto.com/lansgg/1227600
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
28天前
|
Linux
linux查看应用对应的端口
linux查看应用对应的端口
16 0
|
28天前
|
网络协议 安全 Linux
linux系统安全及应用——端口扫描
linux系统安全及应用——端口扫描
36 0
|
1月前
|
传感器 数据采集 存储
ARM Linux摄像头传感器数据处理全景视野:从板端编码视频到高级应用(一)
ARM Linux摄像头传感器数据处理全景视野:从板端编码视频到高级应用
75 0
|
1月前
|
Linux 数据处理 C++
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(一)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
76 0
|
2月前
|
Linux
在Linux中使用rsync进行备份时如何排除文件和目录?
在Linux中使用rsync进行备份时如何排除文件和目录?
123 1
在Linux中使用rsync进行备份时如何排除文件和目录?
|
2月前
|
传感器 Linux 开发工具
Linux应用开发基础知识——I2C应用编程(十三)
Linux应用开发基础知识——I2C应用编程(十三)
60 0
Linux应用开发基础知识——I2C应用编程(十三)
|
2月前
|
存储 传感器 Linux
Linux应用开发基础知识——I2C应用编程(十二)
Linux应用开发基础知识——I2C应用编程(十二)
77 0
Linux应用开发基础知识——I2C应用编程(十二)
|
1月前
|
存储 Linux API
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(三)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
31 1
|
1月前
|
消息中间件 Linux 数据处理
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用(二)
Linux系统编程 C/C++ 以及Qt 中的零拷贝技术: 从底层原理到高级应用
32 1
|
1月前
|
传感器 Linux 数据处理
ARM Linux摄像头传感器数据处理全景视野:从板端编码视频到高级应用(二)
ARM Linux摄像头传感器数据处理全景视野:从板端编码视频到高级应用
46 1