实时备份工具

2024-09-06 03:28
文章标签 工具 实时 备份

本文主要是介绍实时备份工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

实时同步工具

    • 1. 常用实时同步工具
      • 1.1 sersync
      • 1.2 inotify-tools
      • 1.3 ‌lsync‌
    • 2. 工具对比
      • 2.1 常用实时同步工具对比
      • 2.2 ‌sersync和lsyncd对比
    • 3. 实践
      • 3.1 sersync
        • 1. 简易架构
        • 2. 服务器
        • 3. 搭建简易web服务器
        • 4. 配置NFS服务器
        • 5. 配置备份服务器
        • 6. 实时同步部分
        • 7. 验证

1. 常用实时同步工具

1.1 sersync

sersync是一个基于inotifyrsync的文件同步工具,设计用于实时监控指定目录或文件的变化,并在变化发生时自动触发同步操作,确保数据的实时一致性。

Sersync适用于需要进行实时数据同步的场景,如服务器同步、Web镜像备份等,其性能和可靠性得到了广泛认可。作为一个开源项目,Sersync拥有活跃的社区支持,用户可以从社区获得帮助和资源‌

官网 https://sersync.sourceforge.net/

1.2 inotify-tools

‌inotify-tools‌是一个用于监控文件系统变化的工具,它基于Linux内核的inotify子系统,提供了灵活的监控选项和输出格式。这个工具集包括两个主要的命令行工具:‌inotifywait‌和‌inotifywatch

Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。学习如何将 inotify 集成到您的应用程序中,并发现一组可用来进一步自动化系统治理的命令行工具。

官网 https://inotify.aiken.cz/

1.3 ‌lsync‌

‌lsync‌是一个基于inotifyrsync的实时文件同步工具,设计用于高效地同步大量数据。它通过Linux内核2.6.13及以后版本中的inotify触发机制,利用rsync进行差异同步,达到实时同步的效果。

lsync的主要特点和优势包括:

  • 实时同步‌:通过inotify机制监控文件系统的变化,当文件或目录发生变化时,立即通过rsync进行差异同步,确保数据的一致性。
  • 高效传输‌:lsync能够高效地传输海量数据,通过优化算法减少不必要的数据传输,节省带宽和计算资源。
  • 简单配置‌:lsync的配置使用Lua语言编写,配置灵活且易于理解,支持多种工作模式,如本地目录cp、本地目录rsync、远程目录rsyncssh等。
  • 解决频繁发送文件列表问题‌:通过时间延迟或累计触发事件次数,lsync解决了inotify+rsync在处理海量文件同步时可能遇到的频繁发送文件列表的问题。
  • 适用于多种场景‌:无论是本地到本地的同步,还是本地到远程的同步,lsync都能提供快速且高效的解决方案。

此外,lsync还支持通过Zabbix进行监控,提供分布式系统监视以及网络监视功能,确保服务器系统的安全运营,并通过灵活的通知机制快速定位和解决问题。这使得lsync成为企业级应用中一个重要的组成部分,特别是在需要实时监控和数据同步的场景中‌

官网 https://github.com/axkibe/lsyncd

2. 工具对比

2.1 常用实时同步工具对比

工具说明优缺点
inotifyinotify本身是用来监控文件系统操作,能够检查目录/文件变化,一般通过和rsync组合,来做实时同步性能较差
sersync内置了inotifyrsync,通过配置文件控制同步目录性能较好,基本不更新
lsync通过配置实现实时同步性能较好
drbd同步基于磁盘分区级别(block),通常给数据库做高可用一般为主备模式,主节点正常运行,则备节点一直不可用

2.2 ‌sersync和lsyncd对比

‌sersync和lsyncd都是用于实时同步文件的工具,但它们在设计、功能和使用场景上有所不同。‌

  • ‌sersync‌:
    sersync是一个国内开发者开源的工具,使用C++编写,采用多线程方式进行同步,具有失败重传机制和对临时文件的过滤功能。它自带crontab定时同步功能,支持配置文件管理,但自2011年后没有更新,文档和社区支持可能相对有限‌。
    sersync的性能优化主要体现在对大文件的同步异常处理上,通过多线程和重传机制提高同步的稳定性和可靠性。它的设计初衷是为了解决inotify+rsync在大文件同步时可能出现的问题,尽管它提供了较高的性能,但在功能和配置的灵活性方面可能不如lsyncd‌
  • ‌lsyncd‌:
    lsyncd实际上是用Lua语言封装了inotify和rsync工具,利用Linux内核的inotify触发机制,通过rsync进行差异同步,达到实时效果。它的特点是配置简单,可读性强,支持多种工作模式,包括本地目录cp、本地目录rsync、远程目录rsyncssh等‌。
    lsyncd的优势在于解决了inotify+rsync在处理大量文件同步时频繁发送文件列表的问题,通过时间延迟或累计触发事件次数实现优化。它的配置方式简单直观,非常适合需要简单实时同步的场景‌。

综上所述,sersync和lsyncd各有优势。sersync在性能和稳定性方面表现更优,适合对性能要求较高和对大文件同步有特殊需求的场景;而lsyncd则在配置灵活性和易用性方面更胜一筹,适合需要简单实时同步的场景。

3. 实践

3.1 sersync

我们将使用nfs+rsync+sersync搭建全网备份及实时备份

1. 简易架构

在这里插入图片描述

说明:

  • web服务器们把/upload挂载到NFS服务器/webupload,共享存储用户上传的数据,图片,视频等等。这部分数据可能会频繁更改,也相对来说比较重要,所以进行实时备份。在NFS服务器安装sersync,实时检测/webupload变化,并同步到备份服务器的/Realtime_backup目录中。
  • web服务器上的其他数据/data,可能包括:网页文件,配置文件,程序等,变化频率不会很频繁,所以进行日备份或定时备份。这部分内容直接备份到备份服务器的/backup目录中
  • 数据库文件备份不在本文的实践范围中,后面会单独整理一个篇幅进行实践
2. 服务器
服务器ip系统版本说明安装软件
web-svr-01192.168.202.131CentOS Linux release 7.9.2009 (Core)web服务器nginx
nfs-svr-01192.168.202.130CentOS Linux release 7.9.2009 (Core)网络存储服务器nfs-utils、rpcbind、sersync2
backup-svr-01192.168.202.128CentOS Linux release 7.9.2009 (Core)备份服务器rsync
3. 搭建简易web服务器
yum install -y nginx[root@web-svr-01 html]# cat /etc/nginx/nginx.conf
...
http {...server {listen       80;server_name  localhost;#charset koi8-r;#access_log  logs/host.access.log  main;location / {root   /data/html;index  index.html index.htm;}#error_page  404              /404.html;# redirect server error pages to the static page /50x.html#error_page   500 502 503 504  /50x.html;location = /50x.html {root   /data/html;}
...

修改网页文件路径,当然这不是必须的,为了演示整体备份效果而已

[root@web-svr-01 html]# curl 127.0.0.1
hello, this is test rsync
[root@web-svr-01 html]# curl 127.0.0.1/page
<html>
<head><title>404 Not Found</title></head>
<body>
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>

创建模拟用户上传数据路径/upload

[root@web-svr-01 html]# mkdir /upload
4. 配置NFS服务器

安装nfs及依赖rpcbind

yum install -y nfs-utils rpcbind

配置nfs

[root@nfs-svr-01 ~]# mkdir /webupload
[root@nfs-svr-01 ~]# chown nfsnobody.nfsnobody /webupload/
[root@nfs-svr-01 ~]# cat /etc/exports
/webupload   192.168.202.1/24(rw,all_squash)
[root@nfs-svr-01 ~]# systemctl restart nfs
[root@nfs-svr-01 ~]# showmount -e 192.168.202.130
Export list for 192.168.202.130:
/webupload 192.168.202.1/24

web服务器挂载nfs存储目录

[root@web-svr-01 html]# showmount -e 192.168.202.130
Export list for 192.168.202.130:
/webupload 192.168.202.1/24[root@web-svr-01 html]# mount -t nfs 192.168.202.130:/webupload /upload
[root@web-svr-01 html]# df -h
Filesystem                  Size  Used Avail Use% Mounted on
devtmpfs                    894M     0  894M   0% /dev
tmpfs                       910M     0  910M   0% /dev/shm
tmpfs                       910M   22M  889M   3% /run
tmpfs                       910M     0  910M   0% /sys/fs/cgroup
/dev/mapper/centos-root      17G   15G  2.1G  89% /
/dev/sdb1                   4.8G  321M  4.3G   7% /mnt/sdb
/dev/sda1                  1014M  168M  847M  17% /boot
tmpfs                       182M     0  182M   0% /run/user/0
192.168.202.130:/webupload   17G   16G  1.8G  90% /upload

测试

[root@web-svr-01 html]# touch  /upload/123
[root@web-svr-01 html]# ll /upload/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  5 14:09 123
[root@nfs-svr-01 ~]# ll /webupload/
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  5 14:40 123
5. 配置备份服务器

安装rysnc

[root@backup-svr-01 share]# yum install -y rsync

配置rsync 可以参考https://blog.csdn.net/u010230019/article/details/141682071,这里笔者在此基础上进行修改

[root@backup-svr-01 ~]# useradd -s /sbin/nologin -M rsync
[root@backup-svr-01 ~]# id rsync
uid=1003(rsync) gid=1004(rsync) groups=1004(rsync)[root@backup-svr-01 ~]# chown rsync.rsync /backup/
[root@backup-svr-01 ~]# ll /backup/ -d
drwxr-xr-x 2 rsync rsync 6 Aug 29 16:39 /backup/[root@backup-svr-01 ~]# echo "rsync_bak_01:rsync" > /etc/rsync.passwd
[root@backup-svr-01 ~]# cat /etc/rsync.passwd
rsync_bak_01:rsync
[root@backup-svr-01 ~]# chmod 400 /etc/rsync.passwd
[root@backup-svr-01 ~]# ll /etc/rsync.passwd
-r-------- 1 root root 19 Aug 29 16:51 /etc/rsync.passwd

修改配置文件

[root@backup-svr-01 share]# cat /etc/rsyncd.conf
# /etc/rsyncd: configuration file for rsync daemon modeuid = rsync
gid = rsync
use chroot = no
max connections = 4
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
# exclude = lost+found/
# transfer logging = yes
timeout = 900
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
fake super = yes
[backup]
path = /backup/
ignore errors
read only = false
list = true
hosts allow = 192.168.202.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_bak_01
secrets file = /etc/rsync.passwd[Realtime_backup]
path = /Realtime_backup/
ignore errors
read only = false
list = true
hosts allow = 192.168.202.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_bak_01
secrets file = /etc/rsync.passwd

配置客户端(即NFS存储服务器)

[root@nfs-svr-01 html]# cat /etc/rsync.passwd
rsync

验证

[root@nfs-svr-01 html]# rsync -avz /etc/hostname rsync_bak_01@192.168.202.128::backup --password-file=/etc/rsync.passwd
sending incremental file list
hostnamesent 106 bytes  received 43 bytes  14.19 bytes/sec
total size is 11  speedup is 0.07
[root@backup-svr-01 ~]# cat /backup/hostname
web-svr-01

到这里,常规的备份内容基本结束了,剩下的定时任务和打包数据等可以参考以前的文章

6. 实时同步部分

在NFS服务器安装sersync,通过inotify监控/webupload(即web服务器的upload)目录内文件变化,并进行推送到备份服务器

sersync 官网为我们提供了二进制安装包,下载并上传到本地。笔者下载的是
sersync2.5.4_64bit_binary_stable_final.tar.gz

[root@nfs-svr-01 share]# tar -zxvf sersync2.5.4_64bit_binary_stable_final.tar.gz
GNU-Linux-x86/
GNU-Linux-x86/sersync2
GNU-Linux-x86/confxml.xml

可以看到sersync提供的工具包中,只包括一个执行文件和一个配置文件

首先,我们修改配置文件

[root@nfs-svr-01 share]# cat sersync/confxml.xml
...<sersync>#修改本地同步目录,实时监测<localpath watch="/webupload">#配置远程服务器IP及模块名,推送数据<remote ip="192.168.202.128" name="Realtime_backup"/><!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath><rsync><commonParams params="-artuz"/>#配置rsync的用户及密码<auth start="true" users="rsync_bak_01" passwordfile="/etc/rsync.passwd"/><userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/></rsync>#faillog更换路径,并且每60分钟对失败的log进行重新同步<failLog path="/usr/local/share/sersync/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--><crontab start="false" schedule="600"><!--600mins--><crontabfilter start="false"><exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab><plugin start="false" name="command"/></sersync>...

创建连接

[root@nfs-svr-01 share]# mv GNU-Linux-x86 sersync
[root@nfs-svr-01 share]# ln -s /usr/local/share/sersync/sersync2  /usr/bin/sersync2

开启守护进程

[root@nfs-svr-01 sersync]# sersync2 -dro /usr/local/share/sersync/confxml.xml
set the system param
execute:echo 50000000 > /proc/sys/fs/inotify/max_user_watches
execute:echo 327679 > /proc/sys/fs/inotify/max_queued_events
parse the command param
option: -d      run as a daemon
option: -r      rsync all the local files to the remote servers before the sersync work
option: -o      config xml name:  /usr/local/share/sersync/confxml.xml
daemon thread num: 10
parse xml config file
host ip : localhost     host port: 8008
daemon start,sersync run behind the console
use rsync password-file :
user is rsync_bak_01
passwordfile is         /etc/rsync.passwd
config xml parse success
please set /etc/rsyncd.conf max connections=0 Manually
sersync working thread 12  = 1(primary thread) + 1(fail retry thread) + 10(daemon sub threads)
Max threads numbers is: 22 = 12(Thread pool nums) + 10(Sub threads)
please according your cpu ,use -n param to adjust the cpu rate
------------------------------------------
rsync the directory recursivly to the remote servers once
working please wait...
execute command: cd /webupload && rsync -artuz -R --delete ./ rsync_bak_01@192.168.202.128::Realtime_backup --password-file=/etc/rsync.passwd >/dev/null 2>&1
run the sersync:
watch path is: /webupload
7. 验证

在这里插入图片描述
搭建完成实时备份后,加上前面web服务器使用的NFS网络存储系统,理论上,我们在web服务器的/upload目录中新增文件,在NFS服务器/webupload和备份服务器/Realtime_backup目录中,几乎也会同时新增相同文件,下面让我们看看是不是这样的:

web服务器

[root@web-svr-01 upload]# touch "this is a test file"
[root@web-svr-01 upload]# ll
total 0
-rw-r--r-- 1 root      root      0 Sep  5 16:05 123
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  5 16:38 123456
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  5 16:48 this is a test file

NFS服务器

[root@nfs-svr-01 sersync]# ll /webupload/
total 0
-rw-r--r-- 1 root      root      0 Sep  5 16:05 123
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  5 16:38 123456
-rw-r--r-- 1 nfsnobody nfsnobody 0 Sep  5 16:48 this is a test file

备份服务器

[root@backup-svr-01 share]# ll /Realtime_backup/
total 0
-rw-r--r-- 1 rsync rsync 0 Sep  5 16:05 123
-rw-r--r-- 1 rsync rsync 0 Sep  5 16:38 123456
-rw-r--r-- 1 rsync rsync 0 Sep  5 16:48 this is a test file

本次搭建基本到达预期

这篇关于实时备份工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

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

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

【Linux 从基础到进阶】Ansible自动化运维工具使用

Ansible自动化运维工具使用 Ansible 是一款开源的自动化运维工具,采用无代理架构(agentless),基于 SSH 连接进行管理,具有简单易用、灵活强大、可扩展性高等特点。它广泛用于服务器管理、应用部署、配置管理等任务。本文将介绍 Ansible 的安装、基本使用方法及一些实际运维场景中的应用,旨在帮助运维人员快速上手并熟练运用 Ansible。 1. Ansible的核心概念

超强的截图工具:PixPin

你是否还在为寻找一款功能强大、操作简便的截图工具而烦恼?市面上那么多工具,常常让人无从选择。今天,想给大家安利一款神器——PixPin,一款真正解放双手的截图工具。 想象一下,你只需要按下快捷键就能轻松完成多种截图任务,还能快速编辑、标注甚至保存多种格式的图片。这款工具能满足这些需求吗? PixPin不仅支持全屏、窗口、区域截图等基础功能,它还可以进行延时截图,让你捕捉到每个关键画面。不仅如此

PR曲线——一个更敏感的性能评估工具

在不均衡数据集的情况下,精确率-召回率(Precision-Recall, PR)曲线是一种非常有用的工具,因为它提供了比传统的ROC曲线更准确的性能评估。以下是PR曲线在不均衡数据情况下的一些作用: 关注少数类:在不均衡数据集中,少数类的样本数量远少于多数类。PR曲线通过关注少数类(通常是正类)的性能来弥补这一点,因为它直接评估模型在识别正类方面的能力。 精确率与召回率的平衡:精确率(Pr

husky 工具配置代码检查工作流:提交代码至仓库前做代码检查

提示:这篇博客以我前两篇博客作为先修知识,请大家先去看看我前两篇博客 博客指路:前端 ESlint 代码规范及修复代码规范错误-CSDN博客前端 Vue3 项目开发—— ESLint & prettier 配置代码风格-CSDN博客 husky 工具配置代码检查工作流的作用 在工作中,我们经常需要将写好的代码提交至代码仓库 但是由于程序员疏忽而将不规范的代码提交至仓库,显然是不合理的 所

10个好用的AI写作工具【亲测免费】

1. 光速写作 传送入口:http://u3v.cn/6hXWYa AI打工神器,一键生成文章&ppt 2. 讯飞写作 传送入口:http://m6z.cn/5ODiSw 3. 讯飞绘文 传送入口:https://turbodesk.xfyun.cn/?channelid=gj3 4. AI排版助手 传送入口:http://m6z.cn/6ppnPn 5. Kim

分享5款免费录屏的工具,搞定网课不怕错过!

虽然现在学生们不怎么上网课, 但是对于上班族或者是没有办法到学校参加课程的人来说,网课还是很重要的,今天,我就来跟大家分享一下我用过的几款录屏软件=,看看它们在录制网课时的表现如何。 福昕录屏大师 网址:https://www.foxitsoftware.cn/REC/ 这款软件给我的第一印象就是界面简洁,操作起来很直观。它支持全屏录制,也支持区域录制,这对于我这种需要同时录制PPT和老师讲

生信圆桌x生信分析平台:助力生物信息学研究的综合工具

介绍 少走弯路,高效分析;了解生信云,访问 【生信圆桌x生信专用云服务器】 : www.tebteb.cc 生物信息学的迅速发展催生了众多生信分析平台,这些平台通过集成各种生物信息学工具和算法,极大地简化了数据处理和分析流程,使研究人员能够更高效地从海量生物数据中提取有价值的信息。这些平台通常具备友好的用户界面和强大的计算能力,支持不同类型的生物数据分析,如基因组、转录组、蛋白质组等。

IntelliJ IDEA - 强大的编程工具

哪个编程工具让你的工作效率翻倍? 在日益繁忙的工作环境中,选择合适的编程工具已成为提升开发者工作效率的关键。不同的工具能够帮助我们简化代码编写、自动化任务、提升调试速度,甚至让团队协作更加顺畅。那么,哪款编程工具让你的工作效率翻倍?是智能的代码编辑器,强大的版本控制工具,还是那些让你事半功倍的自动化脚本?在这里我推荐一款好用的编程工具:IntelliJ IDEA。 方向一:工具介绍 Int