rsync远程同步与inotify实时监控

一 rsync应用场景

为了保障系统及数据安全,实现服务器后端各个节点之间的数据同步,使用异地备份是非常有必要的。在服务器中,通常会结合计划任务、Shell 脚本来执行本地备份。本文章主要演示 rsync 工具的使用,以实现快速、安全、高效的异地备份。本文将以Web 站点的同步备份为实例来具体介绍rsync。

二 rsync概述

rsync(Remote Sync,远程同步)是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,并保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适用于异地备份、镜像服务器等应用。

rsync 的官方站点的网址是 http://rsync.samba.org/,目前最新版本是 3.1.3,由 Wayne Davison 进行维护。作为一种最常用的文件备份工具,rsync 往往是 Linux 和 UNIX 系统默认安装的基本组件之一。

三 rsync下行同步案例

3.1 实验环境

准备两台虚拟机,一个作为rsync客户端(发起端),一个作为rsync服务器(同步源)

rsync:20.0.0.100
client:20.0.0.12

3.2 查看rysnc软件

rpm -q rsync

如果没有安装rsync,则执行

yum -y install rsync

3.3 修改rsync配置文件(/etc/rsyncd.conf)

vim /etc/rsyncd.conf

uid = nobody
gid = nobody
use chroot = yes
address = 20.0.0.100
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 20.0.0.0/24

[wwwroot]
path = /var/www/html
comment =  www.cenjeal.com
read only = yes
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
auth users = backuper
secrets file = /etc/rsyncd_users.db

注意
同步可以采用匿名的方式,只要将其中的“auth users”和“secrets file”配置记录去掉就可以了

3.4 设置密码文件

在配置文件/etc/rsyncd.conf中的末尾出现了用户名和密码文件,但“secret file”没有定义,所以需要定义该文件

[root@rsync ~]# vim /etc/rsyncd_users.db

backuper:abc123

设置密码文件权限

chmod 600 /etc/rsyncd_users.db

3.5 启动rsync

[root@rsync html]# rsync --daemon
[root@rsync html]# netstat -ntap | grep rsync
tcp        0      0 20.0.0.100:873          0.0.0.0:*               LISTEN      3891/rsync    

3.6 下行同步

服务端

[root@rsync ~]# yum -y install httpd

[root@rsync ~]# cd /var/www/html/
[root@rsync html]# echo "I nerver wanted to admit it." > index.html
[root@rsync html]# cd ..
[root@rsync www]# chmod 777 html/

客户端

[root@client ~]# yum -y install httpd

[root@client ~]# cd /var/www/html/
[root@client html]# cd ..
[root@client www]# chmod 777 html/

将rsync服务器上的共享模块下的文件同步到本地的/var/www/html下
方法一:

[root@client ~]# rsync -avz backuper@20.0.0.100::wwwroot /var/www/html
Password: 
receiving incremental file list
./
index.html

方法二:

[root@client html]# rm -rf index.html 
[root@client html]# 
[root@client html]# ls
[root@client html]# 

[root@client html]# rsync -avz rsync://backuper@20.0.0.100/wwwroot /var/www/html
Password: 
receiving incremental file list
./
index.html

[root@client html]# ls
index.html
[root@client html]# cat index.html 
I nerver wanted to admit it.

3.7 rsync命令的常用选项

参数解释
-r递归模式,包含目录及子目录中的所有文件。
-l对于符号链接文件仍然复制为符号链接文件。
-v显示同步过程的详细(verbose)信息
-a归档模式,保留文件的权限、属性等信息
-z在传输文件时进行压缩
-p保留文件的权限标记
-t保留文件的时间标记
-g保留文件的属组标记
-o保留文件的属主标记
-H保留硬连接文件
-A保留 ACL 属性信息
-D保留设备文件及其他特殊文件
- - delete删除目标位置有而原始位置没有的文件
- - checksum根据校验和(而不是文件大小、修改时间)来决定是否跳过文件

免交互方式
创建一个密码文件,里面只保存用户的密码

[root@client html]# vim /etc/server.pass

abc123
rsync -az --delete --password-file=/etc/server.pass backuper@20.0.0.100::wwwroot /var/www/html

四 rsync+inotify上行同步

4.1 inotify简介

inotify用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。将 inotify 机制与 rsync 工具相结合,可以实现触发式备份(实时同步)——只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态,这样,就避免了按固定周期备份时存在的延迟性、周期过密等问题。

4.2 编译安装inotify

下载地址:点击前往

[root@client ~]# tar zxvf inotify-tools-3.14.tar.gz
[root@client ~]# cd inotify-tools-3.14/
[root@client inotify-tools-3.14]# ./configure
[root@client inotify-tools-3.14]# make && make install

4.3 调整linux内核参数

[root@client html]# vim /etc/sysctl.conf
fs.inotify.max_queued_events = 16384 
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

[root@client html]# sysctl -p
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

参数解释
fs.inotify.max_queued_events = 16384 //监控事件队列大小
fs.inotify.max_user_instances =1024 //最多监控实例数
fs.inotify.max_user_watches = 1048576 //每个实例最多监控文件数

4.4 对本机实行实时监控

[root@client ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html/
/var/www/html/ DELETE index.html
/var/www/html/ CREATE test

4.5 客户端编写自动同步脚本

[root@client opt]# vim inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@20.0.0.100::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
        if [ $(pgrep rsync | wc -l) -le 0 ] ; then
                $RSYNC_CMD
        fi
done

4.6 服务端修改/etc/rsyncd.conf

[wwwroot]
path = /var/www/html
comment = www.kgc.cn
read only = no
dont compress = *.gz *.tgz *.zip *.z*.Z*.rpm *.deb*.bz2
auth users = backuper
secrets file = /etc/rsyncd_users.db

将read only参数设置为no

重启服务:

[root@rsync html]# pkill -9 rsync

[root@rsync html]# rsync --daemon
failed to create pid file /var/run/rsyncd.pid: File exists
[root@rsync html]# 
[root@rsync html]# rm -rf /var/run/rsyncd.pid

[root@rsync html]# rsync --daemon

4.7 放通权限

[root@rsync www]# chmod 777 /var/wwwhtml
[root@rsync www]# ll
total 3
drwxr-xr-x. 2 root root   6 Apr  2  2020 cgi-bin
drwxrwxrwx. 2 root root  51 Oct 24 17:06 html

4.8 开启监控脚本

[root@client opt]# chmod +x inotify.sh

[root@client opt]# ./inotify.sh

验证同步:
客户端
在这里插入图片描述
在这里插入图片描述

服务器端:
在这里插入图片描述
同步成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值