数据备份-linux之间同步目录和文件

2024-08-31 14:12

本文主要是介绍数据备份-linux之间同步目录和文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 需求
  • 设计思路
  • 定时打包相关资源
  • rsync同步
    • 介绍
    • 安装
    • 创建rsync用户目录
    • 服务器配置
    • 密码配置
      • 启动服务
      • 验证客户端
    • 测试
  • inotify-tools 工具
    • 安装
  • 完整脚本

需求

在软件开发与运维的过程中,数据远程同步不仅是保障业务连续性的关键步骤,也是灾难恢复计划不可或缺的一部分。
这一过程涉及将关键数据,包括文件、数据库、目录结构、定时打包的资源等,从生产环境安全、高效地传输至远程备份服务器。这样做的目的在于,一旦主系统遭遇硬件故障、自然灾害、人为错误或网络攻击等不可预见事件导致数据丢失或损坏时,能够迅速且准确地从备份中恢复数据,以最小化业务中断时间和损失。

设计思路

使用crontab、rsync 和 inotify-tools 完成

  • rsync

rsync
是一个用于文件和目录同步的强大工具,它能高效地同步两个目录的内容,并且可以跨网络进行操作。它支持增量数据传输,这意味着只传输文件变化的部分,从而节省了大量的带宽和时间。
rsync 将文件分割成固定大小的块,并计算每个块的校验和。
在同步过程中,rsync 检查源文件和目标文件中对应块的校验和是否相同。
如果校验和匹配,则认为该块没有变化,不需要传输;如果不匹配,则传输该块

  • inotify-tools

inotify-tools 提供了一个名为 inotifywait 的工具,它可以监视文件系统事件,并在检测到事件时触发动作。

  • crontab

crontab
是一个用于设置定时任务的工具,可以让您在指定的时间自动执行命令或脚本。这对于自动化任务非常有用,比如定期备份、清理日志文件、同步文件等。

定时打包相关资源

此功能比较简单 使用crontab执行脚本

0 0 * * * /opt/timer/xxx_backup_targz.sh

脚本格式如下 根据需求替换 输入输出目录

#!/bin/bash  # 定义备份资料的名称,包含当前日期  
DATE=$(date +%Y%m%d)  
BACKUP_FILE="/opt/test-bk/osslog-${DATE}.tgz"  
SOURCE_DIR="/data/test/use205"  # 使用tar命令打包并压缩目录  
tar czvf "$BACKUP_FILE" "$SOURCE_DIR"  # 可以在这里添加更多的命令,比如日志记录等  
echo "Backup completed: $BACKUP_FILE" >> /opt/cibnnas/shell/osssql_backup.log

rsync同步

介绍

在 rsync 的网络同步场景中,通常有一个服务器端和一个或多个客户端。以下是它们的工作流程:

  • 客户端发起同步请求:
    客户端通过命令行调用 rsync,并指定源文件和目标文件的位置。如果目标文件位于远程服务器上,客户端会通过网络连接到远程服务器。
  • 服务器端响应:
    服务器端接收到客户端的请求后,开始执行同步操作。服务器端计算源文件的块校验和,并与客户端发送的目标文件的块校验和进行比较。
  • 数据传输:
    对于不匹配的块,客户端只传输这些块给服务端。服务端接收到这些块后,将它们合并到目标文件中。
    结束同步:
    当所有需要同步的块都被传输完毕后,同步过程结束。

注意 rsync 的工作方式更为灵活,它可以双向同步文件,即可以从客户端向服务器传输文件,也可以从服务器向客户端传输文件。如果命令是从客户端到服务器,那么客户端会发送文件差异到服务器;如果是从服务器到客户端,那么服务器会发送文件差异到客户端
配置的时候需要根据具体需求判断

例如: 将192.168.0.1 上的 /opt/test/ 目录 同步到 192.168.0.2

           192.168.0.1=====>192.168.0.2
192.168.0.1 源服务器     有目录 /opt/test/          是rsync客户端
192.168.0.2 目标服务器  有目录 /opt/bak/test/   是服务端 
rsync 
源服务器: 是rsync客户端,不需要配置
目标服务器: 是rsync服务器端,需要配置/etc/rsyncd.conf里的内容 

安装

查看 rpm -qa | grep rsyn## 源码安装
下载:wget https://download.samba.org/pub/rsync/rsync-3.1.3.tar.gz
解压:解压tar.gz文件: tar -zxvf filename.tar.gz 解压tar.bz2文件: tar -jxvf filename.tar.bz2
安装:进入解压目录后依次输入三条命令:1:./configure 2:make 3: make insall## 或者 yum
yum install rsync
安装的完整包 客户端 服务器都有rm -rf /var/run/rsyncd.*

创建rsync用户目录

[root@backup ~]# mkdir /backup
[root@backup ~]# useradd -s /sbin/nologin -M rsync
[root@backup ~]# chown -R rsync.rsync /backup
注意 chmnod 777

服务器配置

配置文件路径 /etc/rsyncd.conf (如果不存在,就创建)

####rsync_config-------------------------------------start-------------------
uid = rsync
gid = rsync
use chroot = no
max connections = 50
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[backup]
path = /backup/
ignore errors
read only = false
list = false
hosts allow = 192.168.0.0/24
#hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
####rsync_config-------------------------------------end---------------------

密码配置

[root@backup ~]# echo "rsync_backup:test123456" > /etc/rsync.password
[root@backup ~]# cat /etc/rsync.password
rsync_backup:test123456
[root@backup ~]# chmod 600 /etc/rsync.password

启动服务

rsync --daemon
ps -ef|grep rsyncss -lntup |grep rsync

可以配置为服务 /etc/systemd/system/rsyncd.service

[Unit]  
Description=rsync daemon  
After=network.target  [Service]  
Type=forking  
ExecStart=/usr/bin/rsync --daemon --no-detach --config=/etc/rsyncd.conf  
PIDFile=/var/run/rsyncd.pid  [Install]  
WantedBy=multi-user.target

验证客户端

配置密码 echo "test123456" > /etc/rsync.password
chmod 600 /etc/rsync.password

测试

rsync -azu /opt/cibnnas/test/ rsync_backup@192.168.0.2::backup/ --password-file=/etc/rsync.password会在服务器创建对应 test目录

参数说明:

-a (archive mode): 归档模式:这个选项使得 rsync 保留文件的属性,包括权限、时间戳、符号链接、设备文件、目录权限等。 这意味着同步后的文件将尽可能保持与源文件相同的属性。
-z (compress): 压缩:启用数据压缩。在数据传输之前对其进行压缩,可以减少网络带宽的使用。 这对于跨网络的同步尤其有用,特别是当网络带宽有限时。
-u (update): 更新:仅当源文件比目标文件新或者目标文件不存在时才进行同步。 这意味着 rsync 不会覆盖已经存在于目标位置并且是最新的文件。

inotify-tools 工具

流程 
目标服务器:先启动rsync后台服务: /usr/bin/rsync --daemon
来源服务器: 执行 inotify_bak.sh & 
在来源服务器目录中新建目录和文件,inotify_bak.sh脚本会检测到,然后同步到目标服务器的相关目录下 
可以查看日志文件: /opt/soft/log/rsync.log 命令如下:观察实时同步的情况。

安装

sudo yum install epel-release
yum install inotify-tools -yinotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib ./test/-m: 即“--monitor”   表示始终保持事件监听状态。-r: 即“--recursive” 表示递归查询目录-q: 即“--quiet”     表示打印出监控事件-o: 即“--outfile”   输出事情到一个文件而不是标准输出-s:  即“--syslog”    输入错误信息到系统日志-format: 指定输出格式;常用的格式符如:%w:表示发生事件的目录 %f:表示发生事件的文件 %e:表示发生的事件 %T:使用由-timefmt定义的时间格式

注意 该工具为文件实时监控工具,需要linux操作系统内核支持,内核支持需要至少版本为2.6.13

在源服务器上需要安装,目标服务器上不需要安装inotify,发现文件变化,同步到目标服务器。

完整脚本

inotify_bak.sh &

#!/bin/bash  # 设置源目录和目标目录(对于 rsync 来说,这实际上是远程服务器的模块名)  
src_dir="/opt/cibnnas/test"  
dest_server="rsync_backup@113.105.131.182::backup"  /usr/bin/inotifywait -mrq --format '%w%f' -e create,delete,close_write "$src_dir" | while read file; do  
# 打印出发生变化的文件或目录  
echo "Detected change in $file"  # 使用 rsync 同步变化的文件或目录到远程服务器  
# 注意:由于我们监听的是目录,所以 $file 可能是文件也可能是目录  
# rsync 的 -a 选项已经包含了递归,所以我们不需要 -r  
# 如果 $file 是目录,rsync 会处理它;如果是文件,它也会只同步该文件  
/usr/bin/rsync -azu --files-from=- - --contimeout=60 --password-file=/etc/rsync.password "$file" "$dest_server" 
# 记录日志  
echo "$(date): $file was rsync'ed" >>/opt/cibnnas/shell/log/rsync.log  
done

这篇关于数据备份-linux之间同步目录和文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

ubuntu16.04如何部署dify? 在Linux上安装部署Dify的技巧

《ubuntu16.04如何部署dify?在Linux上安装部署Dify的技巧》随着云计算和容器技术的快速发展,Docker已经成为现代软件开发和部署的重要工具之一,Dify作为一款优秀的云原生应用... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。它

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Linux系统调试之ltrace工具使用与调试过程

《Linux系统调试之ltrace工具使用与调试过程》:本文主要介绍Linux系统调试之ltrace工具使用与调试过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、ltrace 定义与作用二、ltrace 工作原理1. 劫持进程的 PLT/GOT 表2. 重定

Linux区分SSD和机械硬盘的方法总结

《Linux区分SSD和机械硬盘的方法总结》在Linux系统管理中,了解存储设备的类型和特性是至关重要的,不同的存储介质(如固态硬盘SSD和机械硬盘HDD)在性能、可靠性和适用场景上有着显著差异,本文... 目录一、lsblk 命令简介基本用法二、识别磁盘类型的关键参数:ROTA查询 ROTA 参数ROTA

嵌入式Linux之使用设备树驱动GPIO的实现方式

《嵌入式Linux之使用设备树驱动GPIO的实现方式》:本文主要介绍嵌入式Linux之使用设备树驱动GPIO的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、设备树配置1.1 添加 pinctrl 节点1.2 添加 LED 设备节点二、编写驱动程序2.1

嵌入式Linux驱动中的异步通知机制详解

《嵌入式Linux驱动中的异步通知机制详解》:本文主要介绍嵌入式Linux驱动中的异步通知机制,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录前言一、异步通知的核心概念1. 什么是异步通知2. 异步通知的关键组件二、异步通知的实现原理三、代码示例分析1. 设备结构

Linux搭建单机MySQL8.0.26版本的操作方法

《Linux搭建单机MySQL8.0.26版本的操作方法》:本文主要介绍Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧... 目录概述环境信息数据库服务安装步骤下载前置依赖服务下载方式一:进入官网下载,并上传到宿主机中,适合离线环境

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

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

windows和Linux使用命令行计算文件的MD5值

《windows和Linux使用命令行计算文件的MD5值》在Windows和Linux系统中,您可以使用命令行(终端或命令提示符)来计算文件的MD5值,文章介绍了在Windows和Linux/macO... 目录在Windows上:在linux或MACOS上:总结在Windows上:可以使用certuti

Linux之systemV共享内存方式

《Linux之systemV共享内存方式》:本文主要介绍Linux之systemV共享内存方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、工作原理二、系统调用接口1、申请共享内存(一)key的获取(二)共享内存的申请2、将共享内存段连接到进程地址空间3、将