lsyncd 配合 rsync 实时差异同步节点文件

2024-05-13 03:48

本文主要是介绍lsyncd 配合 rsync 实时差异同步节点文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

    • 说明书
      • 部署客户端
        • 安装 rsync 服务
        • 编写配置文件
        • 创建 rsync 用户
        • 创建目录并赋权
        • 创建认证用户和密码文件
        • 启动 rsync
        • 查看 rsync 是否启动成功
      • 部署服务端
        • 安装 rsync 服务
        • 创建 rsync 用户
          • 创建目录并赋权
          • 创建认证用户和密码文件
          • 测试 rsync 文件同步
          • 客户端查看文件
        • 安装 lsyncd 服务
          • 编写配置文件
          • 启动 lsyncd 服务
          • 测试 lsyncd 功能

说明书

  • rsync
    • rsync 是一个开源的实用程序,可提供快速增量文件传输
    • rsync 官网
    • 和 sync 命令是完全两个玩意,sync 是将内存 buff 中的资料强制写入磁盘,rsync 是增量文件传输
  • lsyncd
    • Lsyncd监视本地目录树事件监视器接口( inotify 或 fsevents )
    • 它聚合并组合事件几秒钟,然后生成一个(或多个)进程来同步更改,(默认情况下是 rsync )
    • lsyncd 2.2.1 要求所有源计算机和目标计算机上的 rsync >= 3.1
    • lsyncd github

lsyncd + rsync 可以用来做数据的备份,也可以代替 nfs 做 web 服务器的共享根目录

192.168.16.100 这个节点用来充当服务端的角色,192.168.16.107192.168.16.108 用来充当客户端的角色(当服务端指定目录内发生修改[增删改]操作后,将修改的操作同步给客户端)

需要整理一下场景和思路

  • 192.168.16.100
    • 需要部署 lsyncd 和 rsync (因为 lsyncd 是一个采用 linux 内核的 inotify 触发机制去调用 rsync 做增量文件传输)
    • lsyncd 需要编写配置文件
    • rsync 不需要编写配置文件
  • 192.168.16.107 和 192.168.16.108
    • 只需要部署 rsync (用来接收 192.168.16.100 传输过来的增量文件)
    • rsync 需要编写配置文件,指定接收哪个节点传输过来的增量文件
IPSERVICE/ROLEOS_VERSION
192.168.16.100lsyncd & rsync/serverCentOS-7.6.1810
192.168.16.107rsync/clientCentOS-7.6.1810
192.168.16.108rsync/clientCentOS-7.6.1810

部署客户端

安装 rsync 服务

192.168.16.107192.168.16.108 两个节点做一样的操作

yum install -y rsync
编写配置文件

配置文件模板 [过滤EXAMPLES]

mv /etc/rsyncd.conf{,.bak}
vim /etc/rsyncd.conf
uid = rsync
gid = rsync
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
timeout = 300
[data]
path = /data/
read only = false
list = false
hosts allow = 192.168.16.100
hosts deny = 0.0.0.0/32
auth users = rsync
secrets file = /etc/rsyncd.secrets

参数解释

uid: 运行 rsync 服务使用的用户
gid: 运行 rsync 服务使用的用户组
use chroot: 安全相关,需要 root 权限,默认为 true
max connections: 最大链接数(默认值为 0,表示没有限制。负值禁用模块。)
pid file: pid 文件存放路径
lock file: rsync 守护进程在此文件上使用记录锁定,以确保共享锁定文件的模块不会超过最大连接限制
log file: 指定日志存储路径,默认为 syslog
timeout: 超时时间
[data]: 模块名称(自定义,服务端同步文件的时候指定的名称)
path: 服务端的同步目录
read only: 客户端是否只读,若不是只读,客户端也可以同步文件到服务端
list: 是否列出模块
hosts allow: rsync 的服务端地址,多个主机用逗号或者空格分隔,也可以写网段(不写的话,服务端链接不上客户端,无法传输增量文件)
hosts deny: 拒绝的链接的ip(不写这个参数,表示谁都可以连)
auth users: 用户以及权限
secrets file: 密码文件

创建 rsync 用户
useradd rsync -s /sbin/nologin
创建目录并赋权
mkdir /data
chown -R rsync.rsync /data
创建认证用户和密码文件

密码文件的权限必须是 600,不然后期会报错无法认证

echo 'rsync:rsync' > /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
启动 rsync
rsync --daemon --config=/etc/rsyncd.conf
查看 rsync 是否启动成功
cat /var/log/rsyncd.log

rsyncd 的版本是 3.1.2

rsyncd 的进程 pid 是 21654

rsyncd 的端口是 873

2022/03/28 15:27:50 [21654] rsyncd version 3.1.2 starting, listening on port 873

部署服务端

安装 rsync 服务
yum install -y rsync
创建 rsync 用户
useradd rsync -s /sbin/nologin
创建目录并赋权

顺便造点数据

mkdir /data
for i in $(seq 1 10);do mkdir /data/test_$i;echo "this is no.$i" > /data/test_$i/test.log;done
chown -R rsync.rsync /data
创建认证用户和密码文件

密码文件的权限必须是 600,不然后期会报错无法认证

后面执行 rsync 命令的时候会指定用户,这里就只写入密码就可以了

echo 'rsync' > /etc/rsyncd.secrets
chmod 600 /etc/rsyncd.secrets
测试 rsync 文件同步

注意格式

  • /data/:服务端的目录
  • rsync@192.168.16.107:用户@需要同步的客户端主机ip
  • ::data:双冒号是格式规定,data是模块的名称,和客户端配置的有关
    • 不存在会报错:@ERROR: Unknown module 'test'
rsync -avz /data/ rsync@192.168.16.107::data --password-file=/etc/rsyncd.secrets

输出传输的进度

sending incremental file list
./
test_1/
test_1/test.log
test_10/
test_10/test.log
test_2/
test_2/test.log
test_3/
test_3/test.log
test_4/
test_4/test.log
test_5/
test_5/test.log
test_6/
test_6/test.log
test_7/
test_7/test.log
test_8/
test_8/test.log
test_9/
test_9/test.logsent 1,022 bytes  received 261 bytes  2,566.00 bytes/sec
total size is 131  speedup is 0.10
客户端查看文件

登录到 192.168.16.107 服务器查看

for i in $(seq 1 10);do cat /data/test_$i/test.log;done

可以查看得到内容

this is no.1
this is no.2
this is no.3
this is no.4
this is no.5
this is no.6
this is no.7
this is no.8
this is no.9
this is no.10
安装 lsyncd 服务

lsyncd 需要 epel 源

yum install -y epel* && yum install -y lsyncd
编写配置文件

lsyncd settings 层配置

lsyncd sync 层配置

mv /etc/lsyncd.conf{,.bak}
vim /etc/lsyncd.conf

lua 语法中 -- 表示注释

多个 sync 表示配置多个同步作业

-- 全局配置
settings {-- 定义日志文件路径和名称logfile = "/var/log/lsyncd/lsyncd.log",-- 定义状态文件路径和名称statusFile = "/var/log/lsyncd/lsyncd.status",-- 指定inotify监控的事件-- 默认是"CloseWrite",还可以是"Modify"inotifyMode = "CloseWrite",-- 最大进程数maxProcesses = 8,-- 累计到多少所监控的事件激活一次同步,即使后面的sync配置的delay延迟时间还未到maxDelays = 1,-- true 表示不启用守护进程模式(默认是true)nodaemon = false,
}-- 定义同步的配置
sync {-- 使用 rsync 进行目录同步default.rsync,-- 源目录source = "/data/",-- 虚拟用户和远程主机ip以及模块名称-- 如果是 default.direct ,target 直接写同步到哪个目录即可,不需要写虚拟用户和主机ip以及模块名称target = "rsync@192.168.16.107::data",-- 排除选项-- excludeFrom = "/etc/lsyncd.exclude" 指定列表文件-- exclude = { LIST } 指定规则exclude = {'.**','.git/**','*.bak','*.tmp','runtime/**','cache/**'},-- 累计事件,默认15秒-- 15s内两次修改了同一文件,最后只同步最新的文件delay = 15,-- rsync 配置rsync = {-- rsync 二进制文件绝对路径 [使用'whereis rsync'命令可以查看 rsync 二进制文件的绝对路径]binary = "/usr/bin/rsync",-- 指定密码文件password_file = "/etc/rsyncd.secrets",-- 是否归档archive = true,-- 是否压缩传输-- 默认是 true ,根据文件大小等因素决定是否开启压缩compress = false,verbose = false,-- 其他参数-- bwlimit 限速,单位kb/s_extra = {"--bwlimit=200", "--omit-link-times"}}
}sync {default.rsync,source = "/data/",target = "rsync@192.168.16.108::data",exclude = {'.**','.git/**','*.bak','*.tmp','runtime/**','cache/**'},delay = 15,rsync = {binary = "/usr/bin/rsync",password_file = "/etc/rsyncd.secrets",archive = true,compress = false,verbose = false,_extra = {"--bwlimit=200", "--omit-link-times"}}
}

参数解释 settings

  • inotifyMode
    • CloseWriteModify
      • CloseWrite 包含了以下 inotify 事件
        • IN_ATTRIB 文件属性被修改,如 chmod、chown、touch 等
        • IN_CLOSE_WRITE 可写文件被关闭
        • IN_CREATE创建新文件
        • IN_DELETE 文件/目录已在监控目录中删除
        • IN_DELETE_SELF 监控的项目本身已删除
        • IN_MOVED_FROM 文件被移出监控目录,如 mv
        • IN_MOVED_TO 文件被移动到监控目录,如 mv、cp
        • IN_DONT_FOLLOW 不追踪符号链接的真实路径
        • IN_ONLYDIR 仅监视目录
      • Modify 是在 CloseWrite 的基础上
        • 增加了
          • IN_MODIFY 文件已被修改
        • 删除了
          • IN_CLOSE_WRITE 可写文件被关闭

参数解释 sync

  • rsyncrsyncsshdirect三种模式
    • default.rsync :使用 rsync 命令完成本地目录间同步,也可以达到使用 ssh 形式的远程 rsync 效果,或 daemon 方式连接远程 rsyncd 进程
    • default.direct :使用 cprm 等命令完成本地目录间差异文件同步
    • default.rsyncssh :同步到远程主机目录,rsync 的 ssh 模式,需要使用 key 来认证;
启动 lsyncd 服务

同时设置为开机自启

systemctl enable lsyncd
systemctl start lsyncd
测试 lsyncd 功能

查看服务端监听目录下的文件和目录

ssh 192.168.16.100 "ls /data/"

得到了如下的输出

test_1
test_10
test_2
test_3
test_4
test_5
test_6
test_7
test_8
test_9

同时也查看 192.168.16.107192.168.16.108 两个客户端是否也是存在这些文件和目录(前面手动同步过,所以是存在的)

for i in 107 108;do ssh 192.168.16.$i "ls /data/";done

预期是返回两次内容

test_1
test_10
test_2
test_3
test_4
test_5
test_6
test_7
test_8
test_9
test_1
test_10
test_2
test_3
test_4
test_5
test_6
test_7
test_8
test_9

现在我们删除服务端(192.168.16.100)上的 /data/test_1 目录,验证客户端(192.168.16.107192.168.16.108)是否也会删除这个目录

ssh 192.168.16.100 "rm -rf /data/test_1"

此时查看服务端和客户端是否还存在 test_1 这个目录

for i in 100 107 108;do ssh 192.168.16.$i "ls /data/";done

此时得到如下的返回

说明 lsyncd 配和 rsync 成功同步

test_10
test_2
test_3
test_4
test_5
test_6
test_7
test_8
test_9
test_10
test_2
test_3
test_4
test_5
test_6
test_7
test_8
test_9
test_10
test_2
test_3
test_4
test_5
test_6
test_7
test_8
test_9

这篇关于lsyncd 配合 rsync 实时差异同步节点文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/984601

相关文章

使用nohup和--remove-source-files在后台运行rsync并记录日志方式

《使用nohup和--remove-source-files在后台运行rsync并记录日志方式》:本文主要介绍使用nohup和--remove-source-files在后台运行rsync并记录日... 目录一、什么是 --remove-source-files?二、示例命令三、命令详解1. nohup2.

PostgreSQL 序列(Sequence) 与 Oracle 序列对比差异分析

《PostgreSQL序列(Sequence)与Oracle序列对比差异分析》PostgreSQL和Oracle都提供了序列(Sequence)功能,但在实现细节和使用方式上存在一些重要差异,... 目录PostgreSQL 序列(Sequence) 与 oracle 序列对比一 基本语法对比1.1 创建序

使用Python实现实时金价监控并自动提醒功能

《使用Python实现实时金价监控并自动提醒功能》在日常投资中,很多朋友喜欢在一些平台买点黄金,低买高卖赚点小差价,但黄金价格实时波动频繁,总是盯着手机太累了,于是我用Python写了一个实时金价监控... 目录工具能干啥?手把手教你用1、先装好这些"食材"2、代码实现讲解1. 用户输入参数2. 设置无头浏

MySQL主从同步延迟问题的全面解决方案

《MySQL主从同步延迟问题的全面解决方案》MySQL主从同步延迟是分布式数据库系统中的常见问题,会导致从库读取到过期数据,影响业务一致性,下面我将深入分析延迟原因并提供多层次的解决方案,需要的朋友可... 目录一、同步延迟原因深度分析1.1 主从复制原理回顾1.2 延迟产生的关键环节二、实时监控与诊断方案

Python 中的异步与同步深度解析(实践记录)

《Python中的异步与同步深度解析(实践记录)》在Python编程世界里,异步和同步的概念是理解程序执行流程和性能优化的关键,这篇文章将带你深入了解它们的差异,以及阻塞和非阻塞的特性,同时通过实际... 目录python中的异步与同步:深度解析与实践异步与同步的定义异步同步阻塞与非阻塞的概念阻塞非阻塞同步

Linux搭建Mysql主从同步的教程

《Linux搭建Mysql主从同步的教程》:本文主要介绍Linux搭建Mysql主从同步的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux搭建mysql主从同步1.启动mysql服务2.修改Mysql主库配置文件/etc/my.cnf3.重启主库my

Mysql中InnoDB与MyISAM索引差异详解(最新整理)

《Mysql中InnoDB与MyISAM索引差异详解(最新整理)》InnoDB和MyISAM在索引实现和特性上有差异,包括聚集索引、非聚集索引、事务支持、并发控制、覆盖索引、主键约束、外键支持和物理存... 目录1. 索引类型与数据存储方式InnoDBMyISAM2. 事务与并发控制InnoDBMyISAM

Java中将异步调用转为同步的五种实现方法

《Java中将异步调用转为同步的五种实现方法》本文介绍了将异步调用转为同步阻塞模式的五种方法:wait/notify、ReentrantLock+Condition、Future、CountDownL... 目录异步与同步的核心区别方法一:使用wait/notify + synchronized代码示例关键

使用Navicat工具比对两个数据库所有表结构的差异案例详解

《使用Navicat工具比对两个数据库所有表结构的差异案例详解》:本文主要介绍如何使用Navicat工具对比两个数据库test_old和test_new,并生成相应的DDLSQL语句,以便将te... 目录概要案例一、如图两个数据库test_old和test_new进行比较:二、开始比较总结概要公司存在多

Rsnapshot怎么用? 基于Rsync的强大Linux备份工具使用指南

《Rsnapshot怎么用?基于Rsync的强大Linux备份工具使用指南》Rsnapshot不仅可以备份本地文件,还能通过SSH备份远程文件,接下来详细介绍如何安装、配置和使用Rsnaps... Rsnapshot 是一款开源的文件系统快照工具。它结合了 Rsync 和 SSH 的能力,可以帮助你在 li