rsync远程同步(rsync+inotify)

目录

一、概述

1、关于rsync

2、rsync的特点:

3、备份方式:

4、同步方式:

二、rsync相关命令

1、rsync常用命令的选项:

2、启动和关闭rsync服务:

3、关闭 rsync 服务

三、 免交互:

1、免密同步:

2、定期同步:

四、inotify工具:

1、发送端安装inotify工具:

2、inotify 内核参数

3、设置监控实例和实例文件修改:

4、inotify命令:

五、实验:

1、下行同步:

2、上行同步:

3、使用rsync快速删除大量文件


一、概述

1、关于rsync

rsync远程同步:是开源的快速备份工具。可以在不同主机之间同步整个目录

在远程同步任务重,一个是源端,还有一个是发起端(客户端)

源端负责文件的原始位置,发起端和源端的文件同步

2、rsync的特点:

拷贝文件,链接文件,设备

可以保持源文件或者目录的权限不变(时间、软硬连接、所有者、所在组等均可以保持不变)

可以实现增量同步。只同步发生变化的数据,数据传输效率很高

支持匿名认证。

3、备份方式:

完整备份,第一次同步都是完整的备份

往后的同步,都是增量备份(差异备份)。只同步变化的数据

4、同步方式:

下行同步:

从源端同步到客户端

上行同步:

从客户端同步到源端

二、rsync相关命令

1、rsync常用命令的选项:

rsync -r:递归模式,目录包含子目录里面的所有文件

rsync -l:复制链接文件,软链接

rsync -v:显示同步过程中的详细信息

rsync -z:传输文件时进行压缩

rsync -a:归档模式,可以保留文件的权限、属性等等

rsync -p:保留文件的权限标记(所有者和所在组)

rsync -t:保留时间标记(时间戳)

rsync -g:保留文件的所在组(管理员)

rsync -o:保留文件的所有者(管理员)

rsync -H:保留硬链接

rsync -D:保留设备文件和其他特殊文件

rsync --delete:删除目标位置有,但是原始文件没有的文件(相同的数据不作操作)

2、启动和关闭rsync服务:

启动 rsync 服务,以独立监听服务的方式(守护进程)运行

rsync --daemon

3、关闭 rsync 服务

kill $(cat /var/run/rsyncd.pid)

rm -rf /var/run/rsyncd.pid

三、 免交互:

1、免密同步:

echo "123456" > /etc/server.pass

chmod 600 /etc/server.pass

rsync -avz --password-file=/etc/server.pass [email protected]::test /opt/

rsync远程同步(rsync+inotify)_第1张图片

2、定期同步:

举个例子

crontab -e

30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/

为了在同步过程中不用输入密码,需要创建一个密码文件,保存 backuper 用户的密码,如 /etc/server.pass。

#在执行 rsync 同步时使用选项 “--password-file=/etc/server.pass” 指定即可。

systemctl restart crond

systemctl enable crond

四、inotify工具:

1、发送端安装inotify工具:

tar zxvf inotify-tools-3.14.tar.gz -C /opt/

cd /opt/inotify-tools-3.14

./configure

make -j2 && make install

2、inotify 内核参数

在Linux内核中,默认的inotify机制提供了三个调控参数

1)max_queue_events(监控事件队列,默认值为16384)

2)max_user_instances(最多监控实例数,默认值为128)

3)max_user_watches(每个实例最多监控文件数,默认值为8192)

当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值。

cat /proc/sys/fs/inotify/max_queued_events

cat /proc/sys/fs/inotify/max_user_instances

cat /proc/sys/fs/inotify/max_user_watches

3、设置监控实例和实例文件修改:

vim /etc/sysctl.conf

fs.inotify.max_queued_events = 16384

fs.inotify.max_user_instances = 1024

fs.inotify.max_user_watches = 1048576

rsync远程同步(rsync+inotify)_第2张图片rsync远程同步(rsync+inotify)_第3张图片

rsync同步速度很快,适合同步大文件,可以结合数据库同步使用

inotify:通知接口,可以用来监控文件系统的各种变化情况,文件存取,删除移动修改,都可以被监控

inotify机制和rsync配置在一块使用。既可以通知变化,也可以实现同步。

只监控,同步是rsync

4、inotify命令:

inotifywait -mrq -e modify,create,move,delete /opt/test/

-m:持续监控

-r:递归整个目录

-q:信息提示

-e:指定监控的事件,多个事件用逗号隔开

rsync远程同步(rsync+inotify)_第4张图片rsync远程同步(rsync+inotify)_第5张图片

五、实验:

架构:

test1 源端 20.0.0.21

test2 发起端(客户端) 20.0.0.22

 关防火墙安全机制

systemctl stop firewalld

setenforce 0

查看安装情况:

rpm -q rsync

rsync是linux自带的软件

rpm -qc rsync

rsync远程同步(rsync+inotify)_第6张图片

1、下行同步:

下行同步的格式:

rsync [选项] 源服务器位置 本地位置

举个例子

格式一:

rsync -avz [email protected]::message /opt/

格式二:

rsync -avz rsync://[email protected]/message /opt/

test为配置文件中的授权账户

IP地址为同步源地址

message 为配置文件中定义的共享模块


 

配置源端rsync:

改配置文件:

vim /etc/rsyncd.conf #添加以下配置项

uid = root

gid = root

use chroot = yes #禁锢在源目录

address = 20.0.0.21 #监听地址

port = 873

#监听端口 tcp/udp 873,可通过cat /etc/services | grep rsync查看

log file = /var/log/rsyncd.log #日志文件位置

pid file = /var/run/rsyncd.pid #存放进程 ID 的文件位置

hosts allow = 20.0.0.0/24 #允许访问的客户机地址

dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型

[test] #共享模块名称

path = /opt/test #源目录的实际路径

comment = test

write only = yes #是否为只读

auth users = backuper #授权账户,多个账号以空格分隔

secrets file = /etc/rsyncd_users.db #存放账户信息的数据文件

#如采用匿名的方式,只要将其中的“auth users”和“secrets file”配置项去掉即可。

#为备份账户创建数据文件

rsync远程同步(rsync+inotify)_第7张图片

给授权账户添加密码

vim /etc/rsyncd_users.db

backuper:123456 #无须建立同名系统用户

rsync远程同步(rsync+inotify)_第8张图片

设置只有文件的所有者可以读取和修改密码文件

chmod 600 /etc/rsyncd_users.db

保证所有用户对源目录/data都有读取权限

mkdir /opt/test

chmod 777 /opt/test

启动 rsync 服务,以独立监听服务的方式(守护进程)运行

rsync --daemon

观察是否启动成功

ss -napt | grep rsync

rsync远程同步(rsync+inotify)_第9张图片

服务端同步数据到客户端:

rsync -avz [email protected]::test /opt

-avz:保留文件权限 v显示详细过程 z同步过程中对文件进行压缩

20.0.0.21::test

rsync远程同步(rsync+inotify)_第10张图片

往后的同步都是增量同步,只有新增的才会同步

rsync -avz [email protected]::test /opt

rsync远程同步(rsync+inotify)_第11张图片

2、上行同步:

将发起端(客户端)修改,更新到源端

还是在客户端执行命令:

rsync -azH --delete --password-file=/etc/server.pass /opt/data [email protected]::test/

rsync远程同步(rsync+inotify)_第12张图片

将监控和同步一起执行

脚本:

vim inotify.sh

#!/bin/bash

CMD="inotifywait -mrq -e modify,create,move,delete /opt/data"

rsync_cmd="rsync -azH --delete --password-file=/etc/server.pass /opt/data [email protected]::test/"

$CMD | while read DIRECTORY EVENT FILE

do

if [ $(pgrep rsync | wc -l) -gt 0 ]

then

 $reync_cmd

fi

done

rsync远程同步(rsync+inotify)_第13张图片

也可以设置定时任务

3、使用rsync快速删除大量文件

在文件数量较多的情况下,比如百万和千万级别的文件,rm -rf *速度很慢

rsync 可以实现大量删除

此时,利用rsync的替换原理,结合--delete选项,可以实现快速删除大量文件,比如服务的缓存

现在主机模拟生成大量垃圾文件:

mkdir test1

cd test1/

touch {1..9999}.txt

touch demo.txt

#demo.txt用作测试

再创建一个空文件

mkdir test2

cd test2

touch demo.txt

进行同步删除

rsync --delete-before -avH --progress --stats /opt/test2/ /opt/test1

--delete-before:在传输的过程中进行删除

-a:归档模式

-H:硬链接

-v:输出信息

--progress:显示传输的过程

--stats:给出文件的传输状态

rsync远程同步(rsync+inotify)_第14张图片rsync远程同步(rsync+inotify)_第15张图片rsync远程同步(rsync+inotify)_第16张图片

你可能感兴趣的:(工具,mysql,架构,运维)