在远程服务器和本地同步数据的指南

ops/2024/11/27 8:10:10/

在远程服务器和本地同步数据的指南

在现代软件开发和数据管理中,保持本地和远程服务器之间的数据同步是至关重要的。无论是代码、配置文件还是其他数据,确保它们在不同环境中的一致性都是高效工作的关键。本文将介绍如何使用 Bash 脚本和 rsync 工具在本地和远程服务器之间同步数据,重点讲解两种同步方式:直接同步和通过跳板机同步。

背景

在许多开发和运维场景中,数据的同步是常见需求。不同的同步方式适用于不同的环境和安全要求。选择合适的同步方式可以提高效率并确保数据安全。

  • 直接同步:适用于可以直接访问目标服务器的情况,通常在同一局域网内或目标服务器的网络配置允许直接连接时使用。
  • 通过跳板机同步:适用于需要通过中间服务器(跳板机)访问目标服务器的情况。这种方式通常用于安全性较高的环境,能够限制对内部网络的直接访问。
    我们定义了两个同步目录:
LOCAL_DIR_DEEPNS="/path/to/local/deepns/"
REMOTE_DIR_DEEPNS="user@192.168.1.10:~/path/to/remote/deepns/"LOCAL_DIR_MRAUTOINSPECT="/path/to/local/MR-autoinspect/"
REMOTE_DIR_MRAUTOINSPECT="user@192.168.1.20:/path/to/remote/MR-autoinspect/"

在这个网络环境中,存在以下互通关系:

  • 本地机器与 192.168.1.10 互通:这意味着本地机器可以直接访问 192.168.1.10,并与其进行数据传输。
  • 192.168.1.10192.168.1.20 互通:这表示 192.168.1.10 可以访问 192.168.1.20,并与其进行数据交换。
  • 本地机器无法直接访问 192.168.1.20:这意味着本地机器不能直接与 192.168.1.20 进行通信,无法直接同步数据。
    因此,在同步操作中,我们使用直接同步的方式将本地的 deepns 目录与 192.168.1.10 进行同步,而对于 MR-autoinspect 目录的同步,则需要通过 192.168.1.10 作为跳板机来访问 192.168.1.20。这种设置确保了数据的安全性和网络的合理配置,同时也提供了灵活的同步方式。

使用 rsync 工具进行数据同步

rsync 是一个强大的文件传输和同步工具,能够高效地将文件和目录从一个位置复制到另一个位置。它支持增量备份,只传输变化的部分,从而节省带宽和时间。

同步方式

1. 直接同步

直接同步是指在本地机器和目标远程服务器之间直接进行文件传输。在这种方式下,用户可以使用 rsync 命令将本地文件同步到远程服务器,或将远程服务器上的文件下载到本地。

示例:直接同步 deepns

在脚本中,直接同步的实现如下:

if [ "$1" == "local_to_remote_deepns" ] ;thensync_local_to_remote $LOCAL_DIR_DEEPNS $REMOTE_DIR_DEEPNS ""
elif [ "$1" == "remote_to_local_deepns" ] ;thensync_remote_to_local $REMOTE_DIR_DEEPNS $LOCAL_DIR_DEEPNS ""
  • 适用场景
    • 当本地机器和目标服务器在同一网络中,或者目标服务器的网络配置允许直接访问时,使用直接同步。
    • 适合快速、频繁的数据更新和备份操作。

2. 通过跳板机同步

通过跳板机同步是指在本地机器与目标服务器之间使用一个中间服务器(跳板机)进行数据传输。这种方式通常用于安全性较高的环境,能够限制对内部网络的直接访问。

示例:通过跳板机同步 MR-autoinspect

在脚本中,通过跳板机同步的实现如下:

elif [ "$1" == "local_to_remote_mr" ] ;thensync_local_to_remote $LOCAL_DIR_MRAUTOINSPECT $REMOTE_DIR_MRAUTOINSPECT "-J user@192.168.1.10"
elif [ "$1" == "remote_to_local_mr" ] ;thensync_remote_to_local $REMOTE_DIR_MRAUTOINSPECT $LOCAL_DIR_MRAUTOINSPECT "-J user@192.168.1.10"
  • 适用场景

    • 当目标服务器位于防火墙后或在安全的内部网络中,无法直接访问时,使用跳板机同步。
    • 适合需要额外安全层的操作,确保数据传输的安全性和合规性。

    完整脚本示意

以下是一个用于同步数据的 Bash 脚本示例。该脚本定义了多个目录,并提供了两种同步方式:直接同步和通过跳板机进行同步。

#!/bin/bash# 定义源目录和目标目录
LOCAL_DIR_DEEPNS="/path/to/local/deepns/"
REMOTE_DIR_DEEPNS="user@192.168.1.10:~/path/to/remote/deepns/"LOCAL_DIR_MRAUTOINSPECT="/path/to/local/MR-autoinspect/"
REMOTE_DIR_MRAUTOINSPECT="user@192.168.1.20:/path/to/remote/MR-autoinspect/"# 定义rsync命令选项
RSYNC_OPTS="-avzhP --delete --stats"# 忽略的文件夹
EXCLUDE_OPTS="--exclude='__pycache__' --exclude='.git' --exclude='.idea'"# 日志文件
LOG_FILE="/path/to/log/sync_devices.log"# 日志记录函数
function log() {echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a $LOG_FILE
}# 本地到远程同步函数
function sync_local_to_remote() {local local_dir=$1local remote_dir=$2local ssh_jump=$3log "Checking differences between local and remote directories (local to remote):"rsync $RSYNC_OPTS $EXCLUDE_OPTS -e "ssh $ssh_jump" --dry-run $local_dir $remote_dir | tee -a $LOG_FILEread -p "Do you want to synchronize local to remote? (y/n) " answerif [ "$answer" != "${answer#[Yy]}" ] ;thenlog "Starting synchronization from local to remote..."rsync $RSYNC_OPTS $EXCLUDE_OPTS -e "ssh $ssh_jump" $local_dir $remote_dir | tee -a $LOG_FILElog "Synchronization from local to remote completed."elselog "Synchronization from local to remote aborted."fi
}# 远程到本地同步函数
function sync_remote_to_local() {local remote_dir=$1local local_dir=$2local ssh_jump=$3log "Checking differences between remote and local directories (remote to local):"rsync $RSYNC_OPTS $EXCLUDE_OPTS -e "ssh $ssh_jump" --dry-run $remote_dir $local_dir | tee -a $LOG_FILEread -p "Do you want to synchronize remote to local? (y/n) " answerif [ "$answer" != "${answer#[Yy]}" ] ;thenlog "Starting synchronization from remote to local..."rsync $RSYNC_OPTS $EXCLUDE_OPTS -e "ssh $ssh_jump" $remote_dir $local_dir | tee -a $LOG_FILElog "Synchronization from remote to local completed."elselog "Synchronization from remote to local aborted."fi
}# 主程序逻辑
if [ "$1" == "local_to_remote_deepns" ] ;thensync_local_to_remote $LOCAL_DIR_DEEPNS $REMOTE_DIR_DEEPNS ""
elif [ "$1" == "remote_to_local_deepns" ] ;thensync_remote_to_local $REMOTE_DIR_DEEPNS $LOCAL_DIR_DEEPNS ""
elif [ "$1" == "local_to_remote_mr" ] ;thensync_local_to_remote $LOCAL_DIR_MRAUTOINSPECT $REMOTE_DIR_MRAUTOINSPECT "-J user@192.168.1.10"
elif [ "$1" == "remote_to_local_mr" ] ;thensync_remote_to_local $REMOTE_DIR_MRAUTOINSPECT $LOCAL_DIR_MRAUTOINSPECT "-J user@192.168.1.10"
elseprintf "Usage: $0 {\nlocal_to_remote_deepns\nremote_to_local_deepns\nlocal_to_remote_mr\nremote_to_local_mr\n}\n"
fi

脚本功能

  • 定义目录:脚本中定义了多个本地和远程目录,用于存储需要同步的文件。
  • rsync 选项:使用 -avzhP --delete --stats 选项,确保文件以归档模式传输,保持文件权限和时间戳,并显示传输进度和统计信息。
  • 日志记录:通过 log 函数记录同步过程中的重要信息和时间戳。
  • 同步函数:定义了两个主要的同步函数,分别用于本地到远程和远程到本地的同步。
  • 用户确认:在执行实际同步之前,脚本会进行干运行(dry-run),并提示用户确认是否继续同步。

http://www.ppmy.cn/ops/137032.html

相关文章

Unity中动态生成贴图并保存成png图片实现

实现原理&#xff1a; 要生成长x宽y的贴图&#xff0c;就是生成x*y个像素填充到贴图中&#xff0c;如下图&#xff1a; 如果要改变局部颜色&#xff0c;就是从x1到x2(x1<x2),y1到y2(y1<y2)这个范围做处理&#xff0c; 或者要想做圆形就是计算距某个点&#xff08;x1,y1&…

【Python爬虫实战】深入解析 Scrapy:从阻塞与非阻塞到高效爬取的实战指南

&#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、阻塞和非阻塞 &#xff08;一&#xff09;阻塞 &#xff08;二&#xff09;非阻塞 二、Scrapy的工作…

【c语言】文件操作详解 - 从打开到关闭

文章目录 1. 为什么使用文件&#xff1f;2. 什么是文件&#xff1f;3. 如何标识文件&#xff1f;4. 二进制文件和文本文件&#xff1f;5. 文件的打开和关闭5.1 流和标准流5.1.1 流5.1.2 标准流 5.2 文件指针5.3 文件的打开和关闭 6. 文件的读写顺序6.1 顺序读写函数6.2 对比一组…

上下文信息、全局信息、局部信息

摘要 在计算机视觉中&#xff0c;上下文信息&#xff08;contextual information&#xff09;是一个核心概念&#xff0c;它指的是一个像素或一个小区域周围的环境或背景信息。这种信息对于模型理解图像中对象的相对位置、大小、形状&#xff0c;以及与其他对象的关系至关重要…

PHP 超级全局变量

超级全局变量是指在php任意脚本下都可以使用 PHP 超级全局变量列表: $GLOBALS&#xff1a;是PHP的一个超级全局变量组&#xff0c;在一个PHP脚本的全部作用域中都可以访问。 $_SERVER&#xff1a;$_SERVER 是一个PHP内置的超级全局变量,它是一个包含了诸如头信息(header)、路…

【算法】连通块问题(C/C++)

目录 连通块问题 解决思路 步骤&#xff1a; 初始化&#xff1a; DFS函数&#xff1a; 复杂度分析 代码实现&#xff08;C&#xff09; 题目链接&#xff1a;2060. 奶牛选美 - AcWing题库 解题思路&#xff1a; AC代码&#xff1a; 题目链接&#xff1a;687. 扫雷 -…

深入解析 ArrayList 源码:从动态扩容到高效存取的秘密

全文目录&#xff1a; 开篇语目录&#x1f31f; 前言&#x1f9e9; ArrayList 概述&#x1f3d7;️ ArrayList 的底层实现&#x1f4d0; 构造函数详解&#x1f3d7;️ 数组的动态扩容机制 ⚙️ 核心方法源码解析➕ add() 方法的实现➖ remove() 方法的实现&#x1f50d; get() …

23.100ASK_T113-PRO 移植opencv

1.交叉工具链 我使用的是 buildroot 的工具链,这个简单就可以得到.就是编译一遍系统. 路径: /home/book/buildroot-100ask_t113-pro/buildroot/output/host/opt/ext-toolchain/bin 这里最重要的就是验证一下工具链: 要使用此编译器&#xff0c;上安装一些库 。 sudo apt…