理论+实操!!!rsync远程同步与rsync+inotify实时同步


一、rsync

  • rsync简介:
    rsync,remote synchronize顾名思意就知道它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。 rsync是用 “rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过ssh方式来传输文件,这样其保密性也非常好,另外它还是免费的软件。

1.1、rsync 包括如下的一些特性

  • 能更新整个目录和树和文件系统;
  • 有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
  • 对于安装来说,无任何特殊权限要求;
  • 对于多个文件来说,内部流水线减少文件等待的延时;
  • 能用rsh、ssh 或直接端口做为传输入端口;
  • 支持匿名rsync 同步文件,是理想的镜像工具;

1.2、常用选项

-a :包含-rtplgoD,a选项后面可以跟–no-OPTION这个表示关闭-rlptgoD中的某一个例如 -a–no-l 等同于-rptgoD

-r :同步目录时要加上,类似cp时的-r选项

-v :同步时显示-些信息,让我们知道同步的过程

-l :保留软连接

-L :加上该选项后,同步软连接时会把源文件给同步

-p :保持文件的权限属性

-o :保持文件的属主

-g :保持文件的属组

-D :保持设备文件信息

-t :保持文件的时间属性

–delete :删除DEST中SRC没有的文件

–exclude :过滤指定文件,如–exclude “logs”会把文件名含logs的文件或者目录过滤掉,不同步

-P :显示同步过程,比如速率,比-v更加详细

-u :加上该选项后,如果DEST中的文件比SRC新,则不同步

-z :传输时压缩

1.3、命令语法格式(6种)

rsync [OPTION]… SRC DEST

rsync [OPTION]… SRC [USER@]host:DEST

rsync [OPTION]… [USER@]HOST:SRC DEST

rsync [OPTION]… [USER@]HOST::SRC DEST

rsync [OPTION]… SRC [USER@]HOST::DEST

rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]

1.3、语法说明

1、拷贝本地文件。当SRC和DES路径信息都不包含有单个冒号":“分隔符时就启动这种工作模式。如:rsync -a /etc/passwd /tmp/passwd_bak
2、使用一个远程shell程序(如rsh、ssh)来实现将本地机器的内容拷贝到远程机器。当DST路径地址包含单个冒号”:“分隔符时启动该模式。如:rsync -av /etc/passwd 192.168.204.129:/tmp/passwd_bak
3、使用一个远程shell程序(如rsh、ssh)来实现将远程机器的内容拷贝到本地机器。当SRC地址路径包含单个冒号”:“分隔符时启动该模式。如:rsync -av 192.168.204.129:/tmp/passwd_bak /etc/passwd
4、从远程rsync服务器中拷贝文件到本地机。当SRC路径信息包含”::“分隔符时启动该模式。如:rsync -av root@192.168.204.128::test /etc/passwd
5、从本地机器拷贝文件到远程rsync服务器中。当DST路径信息包含”::"分隔符时启动该模式。如:rsync -av /etc/passwd root@192.168.78.192::test tmp/passwd_bak
6、列远程机的文件列表。这类似于rsync传输,不过只要在命令中省略掉本地机信息即可。如:rsync -v rsync://192.168.78.192/www

二、同步实验

1.实验环境

  • 关闭防火墙
  • 关闭核心防护
  • 两台centos虚拟机

1.1源服务器

[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# yum -y install rsync
[root@localhost ~]# vi /etc/rsyncd.conf
添加以下内容
uid = nobody                                           ##开启uid
gid = nobody                                           ##开启gid
use chroot = yes                                       ####禁锢家目录
address = 20.0.0.35                                 #####主机监听地址
port 873                                                    #####端口号
log file = /var/log/rsyncd.log               ######指定日志文件位置
pid file = /var/run/rsyncd.pid              ######指定pid文件
hosts allow = 20.0.0.0/24                      ######白名单

[fff]                                                            ######开启的共享模块,名称可以自己定
path = /var/www/html                          ###httpd的html文件位置作为rsync的共享目录使用
comment = www.kgc.cn                        ###定义名称
read only = yes                                       ###只读
dont comperss = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2   ###格式
auth users = backuper                          ###身份认证账号
secrets file = /etc/rsyncd_users.db     ###存放密码位置
##################保存退出###########
[root@localhost ~]# chmod 600 /etc/rsyncd_users.db    ##文件授权
[root@localhost ~]# rsync --daemon              #####启动rsync
[root@localhost ~]# netstat -apnt | grep rsync   ###过滤看看端口是否开启
tcp        0      0 20.0.0.35:873           0.0.0.0:*               LISTEN      18733/rsync

[root@localhost ~]# yum -y install httpd    ###不安装httpd,下面这个文件就没有
[root@localhost etc]# cd /var/www/html/
[root@localhost html]# touch 222.txt
[root@localhost html]# ll
total 4
-rw-r--r-- 1 root root 16 Oct 23 11:55 123.txt
-rw-r--r-- 1 root root  0 Oct 23 12:03 222.txt

1.2客户端

[root@localhost ~]# yum -y install rsync
[root@localhost ~]# rsync -avz backuper@20.0.0.35::fff /opt/   ###拉取源服务器文件到opt下
Password:                                           ###这里输入我们设置的密码(abc123)
receiving incremental file list
./
123.txt                                               

[root@localhost ~]# cd /opt
[root@localhost opt]# ll                ###拉取成功
总用量 0
-rw-r--r--. 1 root root 0 10月 23 12:03 222.txt
#########################这是第一种拉取方式###########

免交互方式
[root@localhost opt]# vi /etc/server.pass      ####在etc下建立这个文件,放密码的
添加
abc123
###保存退出###
[root@localhost opt]# chmod 600 /etc/server.pass  ###给文件提权
[root@localhost opt]# rsync -az --delete --password-file=/etc/server.pass backuper@20.0.0.35::fff /opt/
####这里没有跳出输入密码界面,没有报错,直接去opt下查询#########
[root@localhost opt]# ll
总用量 4
-rw-r--r--. 1 root root 0 10月 23 12:03 222.txt     #######免交互拉取成功

2.rsync+inotify实时同步

2.1 客户端配置
[root@localhost html]# vi /etc/sysctl.conf 
添加这个在内核参数
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
####保存退出###
[root@localhost html]# sysctl -p       ####刷新以下会显示添加的参数
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576

将inotify-tools-3.14.tar放入在opt目录下
[root@localhost ~]# cd /opt
[root@localhost opt]# tar zxvf inotify-tools-3.14.tar.gz
[root@localhost opt]# cd inotify-tools-3.14/
[root@localhost inotify-tools-3.14]# ./configure 
[root@localhost inotify-tools-3.14]# make && make install

 开启监控
[root@localhost ~]# inotifywait -mrq -e modify,create,move,delete /var/www/html/

2.2、测试监控

  • 重新在开启一个20.0.0.38的客户机连接端
    创建一个文件在删除,同时看监控显示
    在这里插入图片描述

在这里插入图片描述

  • 监控正常
[root@localhost ~]# cd /opt
[root@localhost opt]# vi inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
RSYNC_CMD="rsync -az --delete --password-file=/etc/server.pass /var/www/html/ backuper@20.0.0.35::fff/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do 
     if [ $(pgerp rsync | wc -l) -le 0 ];then
         $RSYNC_CMD
     fi
done
##########保存退出#########
[root@localhost opt]# chmod +x inotify.sh  ###赋予执行权限

2.3、源服务器配置

[root@localhost www]# vi /etc/rsyncd.conf  ###修改配置文件,将原本只读进行修改
、、、、、省略、、、、
read only = yes            ########将这里改为 no
、、、、、省略、、、、
#####保存退出#######
[root@localhost www]# netstat -napt | grep rsync   
tcp        0      0 20.0.0.35:873           0.0.0.0:*               LISTEN      18733/rsync
#####这里可以看到rsync时开启的所以实际修改配置文件是没有生效,需要重新开启让它生效#####
[root@localhost www]# kill -9 18733                   ####关闭进程
[root@localhost www]# netstat -napt | grep rsync  ####过滤一下发现没有
[root@localhost www]# rsync --daemon                 ####重启发现报错了
failed to create pid file /var/run/rsyncd.pid: File exists ###这里说的是有进程号存在

在这里插入图片描述

[root@localhost www]# cd /var/run/
[root@localhost run]# ll
[root@localhost run]# rm -rf rsyncd.pid 
[root@localhost run]# rsync --daemon
[root@localhost run]# 
[root@localhost run]# netstat -napt | grep rsync
tcp        0      0 20.0.0.35:873           0.0.0.0:*               LISTEN      19385/rsync

在这里插入图片描述

rsync+inotify实时同步

3.1开启监控

./inotify.sh

3.2发起端创建和删除后原机是否同步

echo "this is ok" > test.txt

3.3监控显示

在这里插入图片描述

3.4源服务器

在这里插入图片描述
完成!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值