首页 > 系统相关 >Linux文件实时同步配置

Linux文件实时同步配置

时间:2023-08-14 11:24:27浏览次数:31  
标签:rsync 同步 inotify -- ffs 实时 etc Linux

  今天接到需求说要实现mysql与指定目录的文件实时双向热备,mysql的上篇已经解决,linux文件的在这篇展开讨论。

  Linux主机之间文件实时自动同步备份,使用 rsync+inotify 组合的方式来实现,避免由于硬件或者软件导致的 Linux 系统死机或损坏造成的损失。

一、rsync+inotify 简介

1、rsync简介

  rsync(remote synchronize)是 Liunx/Unix 下的一个远程数据同步工具,它可通过 LAN/WAN 快速同步多台主机间的文件和目录。

  Linux 之间同步文件一般有两种方式,分别是 rsync 与 scp 。scp 相当于复制,粘贴,文件不存在则新建,若存在则覆盖,而 rsync 则是比较两边文件是否相同,不相同才进行更新。所以 rsync 和 scp 在文件夹存在的情况下差异很大,因为 scp 是复制和覆盖,从执行性能来说 rsync 更胜一筹。而且 rsync 能将文件夹、文件的权限等信息也保存下来。

  但是 rsync 也有一定的缺点,在同步数据时,需要扫描所有文件后进行比对,如果文件数量相当大时,扫描文件就非常耗费时间和性能。其次,rsync 不能够实时监测、同步数据,这就可能导致一些时间段数据不一致。解决这个问题的方法就是实时同步,所以需要使用 rsync+inotify 组合。

2、inotify简介

  inotify 是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux 内核从2.6.13版本起,加入了对 inotify 的支持。通过 inotify 可以监控文件系统中添加、删除、修改、移动等各种事件,利用这个内核接口,inotify-tools 便可以监控文件系统下文件的各种变化情况了。

先看一看系统中是否已安装rsync,现在一般系统都是预装的

rsync --version

再检查系统内核是否支持 inotify:

ll /proc/sys/fs/inotify

出现以下三个文件表示系统默认支持 inotify,如下所示。

二、整体架构

这里我使用两个 Linux 服务器节点来做演示,实现两个节点间文件的实时同步,node1 为源服务器节点,就是需要同步数据的节点,部署 rsync+inotify ,node2 为同步节点,也就是接收同步数据的节点,只需要部署 rsync,如下所示。

三、同步节点部署(rsync)

同步节点,也就是node2 172.19.42.200

配置rsync配置文件

vim /etc/rsyncd.conf

 1 uid = nobody
 2 gid = nobody
 3 use chroot = yes
 4 max connections = 10
 5 strict mode=yes
 6 pid file = /var/run/rsyncd.pid
 7 lock file=/var/run/rsync.lock
 8 log file=/var/log/rsyncd.log
 9 [backup]
10 path = /opt/ffs/files/
11 comment = ffs file
12 ignore errrors
13 read only=no
14 write only=no
15 hosts allow=172.19.42.100
16 hosts deny=*
17 list=false
18 uid=root
19 gid=root
20 auth users=ffs
21 secrets file=/etc/rsync.password

其中需要用到一个密码文件, /etc/rsync.password,内容格式为:user:password

echo "ffs:ffs" > /etc/rsync.password

然后需要给密码文件600权限

chmod 600 /etc/rsync.password

启动 rsync 守护进程

/usr/bin/rsync --daemon

加入系统自启动文件

echo "/usr/bin/rsync --daemon" >> /etc/rc.local

如果有防火墙,开放端口

firewall-cmd --add-port=873/tcp --permanent --zone=public
firewall-cmd --reload

查看 rsync 进程,如下

ps aux | grep rsync

四、源服务器节点部署(rsync+inotify)

源服务器节点,也就是 node1 172.19.42.100,需要部署 rsync 和 inotify

配置rsync配置文件

vim /etc/rsyncd.conf

 1 uid = nobody
 2 gid = nobody
 3 use chroot = yes
 4 max connections = 10
 5 strict mode=yes
 6 pid file = /var/run/rsyncd.pid
 7 lock file=/var/run/rsync.lock
 8 log file=/var/log/rsyncd.log
 9 [backup]
10 path = /opt/ffs/files/
11 comment = ffs file
12 ignore errrors
13 read only=no
14 write only=no
15 hosts allow=172.19.42.200
16 hosts deny=*
17 list=false
18 uid=root
19 gid=root
20 auth users=ffs
21 secrets file=/etc/rsync.password

源服务器节点中只需要配置认证密码文件,首先在 etc 文件夹下创建文件 rsync.password,只需要密码,不需要用户,密码需要和同步节点 node2 中的一致

echo "ffs" > /etc/rsync.password

然后需要给密码文件600权限

chmod 600 /etc/rsync.password

启动 rsync 守护进程

/usr/bin/rsync --daemon

加入系统自启动文件

echo "/usr/bin/rsync --daemon" >> /etc/rc.local

如果有防火墙,开放端口

firewall-cmd --add-port=873/tcp --permanent --zone=public
firewall-cmd --reload

测试一下,先在源服务器节点的 /opt/ffs/files/ 目录下新建一个 test 文件夹

mkdir /opt/ffs/files/test

然后进行进行同步测试,其中一些参数要和同步节点配置文件中相对应,比如下面的认证模块名backup、用户名 ffs 等

rsync -avH --port 873 --delete /opt/ffs/files/ [email protected]::backup --password-file=/etc/rsync.password

可以看到 node1 中文件夹 test 已经发送,查看同步节点 node2 中,如下

 test 文件夹已经同步到 node2,所以我们的 rsync 配置成功,可以进行文件同步,接下来就是部署 inotify 实现实时同步,通过inotify监听文件或文件夹,如果有变动就进行同步。

这里我们用到了inotify-tools,我使用的中科方德系统预装了这个,如果你的系统没有这个需要先安装,我这里直接开始配置了

创建用于 rsync 同步的 shell 脚本,如果添加、修改、删除了文件或文件夹,inotify 可以监控到,然后通过 rsync 进行同步,这里我们就在需要进行监控的目录创建这个脚本

vim /opt/ffs/files/inotifyrsync.sh

1 #!/bin/bash
2 host1=172.19.42.200
3 src=/opt/ffs/files/
4 dst1=backup
5 user1=ffs
6 /usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read files
7 do        /usr/bin/rsync -vzrtopg --delete --progress --password-file=/etc/rsync.password $src $user1@$host1::$dst1 > /dev/null 2>&1
8         echo "${files} was rsynced." >> /tmp/rsync.log 2>&1
9 done

其中 host 是 client 的 ip,src 是 server 端要实时监控的目录,des 是认证的模块名,需要与 client 一致,user 是建立密码文件里的认证用户。

然后给这个脚本赋予权限

chmod 755 /opt/ffs/files/inotifyrsync.sh

后台运行这个脚本

/opt/ffs/files/inotifyrsync.sh &

有需要可以将脚本加入系统自启动文件中

echo "/opt/ffs/files/inotifyrsync.sh &" >> /etc/rc.local

测试,在 node1 节点中添加删除修改文件或文件夹,看 node2 中是否会自动同步,首先在 node1 中创建一个文件夹 test1、test2,文件test1.txt、text2.txt

 在 node2 中都会进行实时的同步备份,如下所示(文件和文件夹都创建成了一个文件[笑哭],小问题,不影响测试)

 经验证,修改文件和删除文件也能同步,实时自动同步备份功能成功实现

标签:rsync,同步,inotify,--,ffs,实时,etc,Linux
From: https://www.cnblogs.com/guanghe/p/17628128.html

相关文章

  • Linux之shell脚本的循环
    一、循环语句1.1forhelpfor帮助文档foriinabc;doechohello;done[root@localhostdata]#foriinabc;doechohello;donehellohellohelloforiinabc;doecho$i;done[root@localhostdata]#foriinabc;doecho$i;doneabc[root@localhostd......
  • Linux-wget命令使用及参数详解
    wget简介Linux系统中的wget是一个下载文件的工具,它用在命令行下。对于Linux用户是必不可少的工具,我们经常要下载一些软件或从远程服务器恢复备份到本地服务器。wget支持HTTP,HTTPS和FTP协议,可以使用HTTP代理。所谓的自动下载是指,wget可以在用户退出系统的之后在后台执行。这意......
  • Linux 配置Node环境变量[通俗易懂]
    大家好,又见面了,我是你们的朋友全栈君。修改/etc/profile文件,在末尾添加以下内容exportNODE_HOME=/usr/local/node//Node所在路径exportPATH=$NODE_HOME/bin:$PATH复制修改完成后需要重新登陆才能生效,也可以执行命令source/etc/profile或者./etc/profile来生效(注意......
  • Linux中 more/less快捷键
    空格翻页全屏导航ctrl+F-向前移动一屏ctrl+B-向后移动一屏ctrl+D-向前移动半屏ctrl+U-向后移动半屏单行导航j-向前移动一行k-向后移动一行其它导航G-移动到最后一行g-移动到第一行q/ZZ-退出less命令......
  • OpenZFS 2.2 发布 RC3,支持 Linux 6.4
    导读之前的OpenZFS2.2候选版本已致力于实现与 Linux 6.4内核的兼容性,而在2.2-rc3中,Linux6.4支持的元跟踪器已标记为已完成。OpenZFS2.2发布了第3个RC版本。之前的OpenZFS2.2候选版本已致力于实现与Linux6.4内核的兼容性,而在2.2-rc3中,Linux6.4......
  • Nexpose v6.6.210 for Linux & Windows - 漏洞扫描
    Nexposev6.6.210forLinux&Windows-漏洞扫描Rapid7VulnerabilityManagement,ReleaseAug09,2023请访问原文链接:https://sysin.org/blog/nexpose-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org您的本地漏洞扫描程序搜集通过实时覆盖整个网络,随......
  • Palo Alto Cortex XSOAR 6.11 (Linux) - 安全编排、自动化和响应 (SOAR) 平台
    PaloAltoCortexXSOAR6.11(Linux)-安全编排、自动化和响应(SOAR)平台SecurityOrchestration,AutomationandResponse(SOAR)platform请访问原文链接:https://sysin.org/blog/cortex-xsoar-6/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org重新定义安全......
  • UTM v4.3.5 - 在 macOS 上优雅的使用 QEMU 虚拟化 Windows、Linux 和 macOS
    UTMv4.3.5-在macOS上优雅的使用QEMU虚拟化Windows、Linux和macOS在iOS中虚拟化Windows、Linux和Unix请访问原文链接:https://sysin.org/blog/utm-4/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.orgUTM4底层基于QEMU,在Mac上安全的运行Windows、Li......
  • 为什么基于Linux的安卓没有Linux安全?
    大家都知道安卓是基于Linux内核,而且大家也知道Linux的安全性是公认的,那为什么和Linux有着类似嫡系关系的安卓却一直被人诟病不安全呢?要想说清楚这个问题,我们需要了解一下安卓和Linux到底是什么关系,而且这两个系统到底安全不安全,背后的原因是什么。当然,在此需要表明一个观点:世界......
  • Linux 端如何用命令窗口进行网络测速?
    在Linux上可以使用Speedtest-cli工具进行带宽网速测试。Speedtest-cli是一个基于命令行的工具,用于测量互联网连接的带宽。当您运行Speedtest-cli命令时,它会与Speedtest.net服务器建立连接,并进行上传和下载测试来测量速度。它是用Python写成的,可以使用apt或pip命令来安装。你......