深圳幻海软件技术有限公司 欢迎您!

Rsync+Inotify数据实时同步介绍

2023-02-28

一、rsync概述rsync(remotesync)​远程同步,rsync​是linux系统下的数据镜像备份工具。使用快速增量备份工具RemoteSync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。已支持跨平台,可以在Windows与Linux间进行数据同步。rsync监听端口

一、rsync概述

rsync(remote sync)​远程同步,rsync​是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。已支持跨平台,可以在Windows与Linux间进行数据同步。rsync监听端口:873​,rsync运行模式:C/S。

官网:https://rsync.samba.org/官方文档:https://www.samba.org/ftp/rsync/rsync.htmlGitHub地址:https://github.com/WayneD/rsync

二、rsync优缺点

1)优点

  • 可以镜像保存整个目录树和文件系统;
  • 可以做到保持原来文件的权限、时间、软硬链接等等;
  • 无须特殊权限即可安装;
  • 可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能;
  • 可以使用rcp、ssh等方式来传输文件,rsync本身不对数据加密;
  • 支持匿名传输,可以实现方便安全的进行数据备份和镜像;
  • 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高;
  • 可以通过socket(进程方式)传输文件和数据。

2)缺点

  • 同步数据,需要扫描所有文件进行对比,才进行差量传输。如果文件数量达到百万甚至千万级,扫描文件对比文件将非常耗时,降低了rsync效率;
  • rsync不能实时地区监测、同步数据。虽然可以通过守护进程方式触发同步,但两次动作间有时间差,导致数据不一致,无法应对出现故障时完全恢复数据。

解决方法:rsync+inotify

三、rsync+inotify配置与安装

IP

主机名

角色

192.168.0.113

k8s-master-168-0-113

rsync、 inotify-tools【数据源】

192.168.0.116

k8s-master2-168-0-116

rsync【备份节点】

1)rsync安装

yum -y install rsync
  • 1.

2)rsync配置

cat >/etc/rsyncd.conf<<EOF
uid = root
gid = root
#禁锢在源目录
use chroot = yes
#监听地址,在另外的机器上,记得修改      
address = 192.168.0.113
#监听地址tcp/udp 873,可通过cat /etc/services | grep rsync查看          
port 873
#日志文件位置
log file = /var/log/rsyncd.log
#存放进程 ID 的文件位置
pid file = /var/run/rsyncd.pid
#允许访问的客户机地址
hosts allow = 192.168.0.0/16
#共享模块名称
[nfsdata]
#源目录的实际路径                      
path = /opt/nfsdata
comment = Document Root of www.kgc.com
#指定客户端是否可以上传文件,默认对所有模块为 true
read only = false
#同步时不再压缩的文件类型
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z
#授权账户,多个账号以空格分隔,不加则为匿名,不依赖系统账号
auth users = backuper
#存放账户信息的数据文件
secrets file = /etc/rsyncd_users.db
EOF
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.

rsyncd.conf 常用参数详解

QQe">

rsyncd.conf 参数

参数说明

uid=root

rsync 使用的用户。

gid=root

rsync 使用的用户组(用户所在的组)

use chroot=no

如果为 true,daemon 会在客户端传输文件前“chroot to the path”。这是一种安全配置,因为我们大多数都在内网,所以不配也没关系

max cnotallow=200

设置最大连接数,默认 0,意思无限制,负值为关闭这个模块

timeout=400

默认为 0,表示 no timeout,建议 300-600(5-10 分钟)

pid file

rsync daemon 启动后将其进程 pid 写入此文件。如果这个文件存在,rsync 不会覆盖该文件,而是会终止

lock file

指定 lock 文件用来支持“max connections”参数,使得总连接数不会超过限制

log file

不设或者设置错误,rsync 会使用 rsyslog 输出相关日志信息

ignore errors

忽略 I/O 错误

read notallow=false

指定客户端是否可以上传文件,默认对所有模块为 true

list=false

是否允许客户端可以查看可用模块列表,默认为可以

hosts allow

指定可以联系的客户端主机名或和 ip 地址或地址段,默认情况没有此参数,即都可以连接

hosts deny

指定不可以联系的客户端主机名或 ip 地址或地址段,默认情况没有此参数,即都可以连接

auth users

指定以空格或逗号分隔的用户可以使用哪些模块,用户不需要在本地系统中存在。默认为所有用户无密码访问

secrets file

指定用户名和密码存放的文件,格式;用户名;密码,密码不超过 8 位

[backup]

这里就是模块名称,需用中括号扩起来,起名称没有特殊要求,但最好是有意义的名称,便于以后维护

path

这个模块中,daemon 使用的文件系统或目录,目录的权限要注意和配置文件中的权限一致,否则会遇到读写的问题

配置/etc/rsyncd_users.db,跟auth users对应


cat >/etc/rsyncd_users.db<<EOF
backuper:123456
EOF
#官方要求,必须赋权600,要不然会有问题
chmod 600 /etc/rsyncd_users.db
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

rsync常用命令参数详解

rsync --help

rsync [选项]  原始位置   目标位置

常用选项        说明
-r        递归模式,包含目录及子目录中的所有文件
-l        对于符号链接文件仍然复制为符号链接文件
-v        显示同步过程的详细信息
-z        在传输文件时进行压缩goD
-p        保留文件的权限标记
-a        归档模式,递归并保留对象属性,等同于-rlpt
-t        保留文件的时间标记
-g        保留文件的属组标记(仅超级用户使用)
-o        保留文件的属主标记(仅超级用户使用)
-H        保留硬链接文件
-A        保留ACL属性信息
-D        保留设备文件及其他特殊文件
--delete    删除目标位置有而原始位置没有的文件
--checksum    根据对象的校验和来决定是否跳过文件
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

3)启动rsync服务

rsync --daemon --cnotallow=/etc/rsyncd.conf
netstat -tnlp|grep :873
  • 1.
  • 2.

4)测试验证

# 在192.168.0.116节点上测试手动同步
# 从远端【拉取】数据
rsync -avz root@192.168.0.113:/opt/nfsdata/* /opt/nfsdata/

# 在192.168.0.113节点上测试手动同步
# 从【推送】数据
rsync -avz /opt/nfsdata/* root@192.168.0.116:/opt/nfsdata/

### 在192.168.0.116节点上测试手动同步,通过【拉取】数据,配置文件配置的模块,这里走的是rsync协议,上面走的是ssh协议,只要做了免密就直接推送或拉取数据了。这里就会用到配置文件里配置的users用户了,也是secrets file文件里配置的其中一个用户。
#【方式一】
rsync -avz backuper@192.168.0.113::nfsdata /opt/nfsdata/
# 【方式二】
rsync -avz rsync://backuper@192.168.0.113/nfsdata /opt/nfsdata/

# 在192.168.0.113节点上执行
###【推送】
#【方式一】非交互式,/opt/backuper.pass文件是backuper用户的密码,且文件权限600
rsync -avz --password-file=/opt/backuper.pass /opt/nfsdata/* backuper@192.168.0.113::nfsdata
# 【方式二】
rsync -avz /opt/nfsdata/* rsync://backuper@192.168.0.113/nfsdata
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.

5)编译安装 inotify-tools

1、inotify-tools概述

  • inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。
  • linux内核从 2.6.13 起,加入了inotify支持,通过inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。
  • inotify可用于检测单个文件,也可以检测整个目录。当检测的对象是一个目录的时候,目录本身和目录里的内容都会成为检测的对象。

在192.168.0.113机器上安装

2、优化inotify内核参数

在/proc/sys/fs/inotify​目录下有max_queued_events、max_user_instances、max_user_watches这三个文件

  • max_queued_events:表示调用inotify_init时分配给inotify instance中可排队的event的数目的最大值,超出这个值的事件被丢弃,但会触发IN_Q_OVERFLOW事件;
  • max_user_instances:表示每一个用户可创建的inotify instatnces的数量上限,默认128;
  • max_user_watches:表示同一用户同时可以添加的watch数量。
echo 65535 > /proc/sys/fs/inotify/max_user_instances
echo 99999999 > /proc/sys/fs/inotify/max_queued_events
echo 99999999 > /proc/sys/fs/inotify/max_user_watches
  • 1.
  • 2.
  • 3.

3、inotify-tools下载

# 安装inotify-tools之前,先安装一下automake和libtool这两个依赖,不然编译安装inotify-tools的时候会报错。
yum install automake libtool -y

# 当然也得安全编译工具
yum -y install gcc gcc-c++ make wget

mkdir  /opt/software ; cd /opt/software
wget --no-check-certificate https://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz

# 解压
tar -zxvf inotify-tools-3.14.tar.gz
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

4、inotify-tools编译安装

cd /opt/software/inotify-tools-3.14
# 编译安装
./configure && make && make install
  • 1.
  • 2.
  • 3.

5、编写触发式同步脚本

vi /opt/software/inotify-tools-3.14/inotify_rsync.sh

#!/bin/bash
#监听/opt/nfsdata/ 目录:
#INOTIFY_CMD变量:持续监控 /opt/nfsdata/ 目录中的创建,删除,移动,修改,改变时间的操作
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/nfsdata"
# 注意/tmp/user.pass文件里只有backuper对应的密码,而且文件权限只能是600
RSYNC_CMD="rsync -avzH --delete --password-file=/opt/backuper.pass /opt/nfsdata/* backuper@192.168.0.116::nfsdata"

$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
     $RSYNC_CMD
done
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

inotifywait命令常用参数:

执行

cd /opt/software/inotify-tools-3.14/
chmod +x inotify_rsync.sh
# 启动脚本
nohup ./inotify_rsync.sh &
  • 1.
  • 2.
  • 3.
  • 4.