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

相关文章

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

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

详谈redis跟数据库的数据同步问题

《详谈redis跟数据库的数据同步问题》文章讨论了在Redis和数据库数据一致性问题上的解决方案,主要比较了先更新Redis缓存再更新数据库和先更新数据库再更新Redis缓存两种方案,文章指出,删除R... 目录一、Redis 数据库数据一致性的解决方案1.1、更新Redis缓存、删除Redis缓存的区别二

Nacos集群数据同步方式

《Nacos集群数据同步方式》文章主要介绍了Nacos集群中服务注册信息的同步机制,涉及到负责节点和非负责节点之间的数据同步过程,以及DistroProtocol协议在同步中的应用... 目录引言负责节点(发起同步)DistroProtocolDistroSyncChangeTask获取同步数据getDis

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

服务器集群同步时间手记

1.时间服务器配置(必须root用户) (1)检查ntp是否安装 [root@node1 桌面]# rpm -qa|grep ntpntp-4.2.6p5-10.el6.centos.x86_64fontpackages-filesystem-1.41-1.1.el6.noarchntpdate-4.2.6p5-10.el6.centos.x86_64 (2)修改ntp配置文件 [r

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

JS和jQuery获取节点的兄弟,父级,子级元素

原文转自http://blog.csdn.net/duanshuyong/article/details/7562423 先说一下JS的获取方法,其要比JQUERY的方法麻烦很多,后面以JQUERY的方法作对比。 JS的方法会比JQUERY麻烦很多,主要则是因为FF浏览器,FF浏览器会把你的换行也当最DOM元素。 <div id="test"><div></div><div></div