【问题标题】:How to get high availability when download data on 2 servers?在两台服务器上下载数据时如何获得高可用性?
【发布时间】:2025-12-01 16:45:01
【问题描述】:

我需要每 24 小时将数据下载到本地服务器上。为了实现高可用性,我们提供了 2 台服务器以避免故障和数据丢失。

我的问题是:使用 2 台服务器的最佳方法是什么?

我的想法是:

-在一台服务器上下载,如果下载因任何原因失败,将在另一台服务器上继续下载。

-每天在两台服务器上同时下载。

有什么建议吗?

【问题讨论】:

  • 负责执行下载的软件是否位于这些服务器上?如果没有,在哪里?下载时间有多重要?两台服务器是否位于不同的位置?这是现有的解决方案吗?
  • 当您说“为了高可用性”时,您是指保证下载数据,还是说下载的数据是高可用的?还是两者兼而有之?
  • @AdrianK 负责执行下载的软件将位于这些服务器上。下载将在每天凌晨 02:00 进行。两台服务器位于不同的位置。该解决方案是现有的,从云下载数据并将其保存在本地是另一个要求。当您说“高可用性”时,您是指保证下载数据,还是说下载的数据具有高可用性?或两者?这里的高可用意味着数据的保证下载和下载的数据都是高可用的。
  • 数据下载后将如何使用?例如用户将通过网站访问它,直接下载,还是由自动化系统/集成使用?

标签: networking server architecture software-design


【解决方案1】:

就您的高级方法而言,将其分解为可管理的部分,即可靠的数据采集和高度可用的数据传播。我会先从第二部分开始,因为那是你想要达到的状态。

高度可用的数据传播

向后工作(即这是您问题的第二部分),在向消费者提供高可用性数据时,您有两种选择:

  1. 主动-被动
  2. 主动-主动

主动-主动意味着您至少有两个节点为数据请求提供服务,前面有某种负载均衡器 (LB),它分配请求。根据您使用的技术,该技术堆栈中可能存在现有组件/解决方案,或描述潜在解决方案的参考模型。

主动-被动意味着您有一个节点承担所有流量,当该节点变得不可用时,请求将被定向到备用/被动节点。

被动节点可以是“热的”准备就绪,也可以是“冷的”——这意味着它没有完全运行,但相对快速且易于站起来并开始占用流量。

在这两种情况下,如果您只有 2 个节点,则理想情况下您希望这两个节点都能够处理整个负载。这对于 Active-Passive 来说是显而易见的,但它也适用于 active-active,因此如果一个发生故障,另一个将成功处理所有请求。

在这两种情况下,您都需要某种网络组件来路由流量。理想情况下,它将能够自主运行(如果您想要主动-主动负载共享,则必须这样做),但您可以有一个基于手动/警报的过程来从主动切换到被动。一方面,这取决于您的非功能性需求。

可靠的数据采集

在弄清楚如何传播数据后,您就知道需要将数据送到哪里。

例如如果主动-主动你需要同时得到它(我不知道你可以有什么公差),因为你希望它们提供相同的一致数据。解决该问题的一种方法是:

  • 让 LB 将所有流量路由到节点 A。
  • 节点 B 执行下载。
  • LB 被告知Node B 成功获取新数据并准备服务它。然后 LB 将流量仅切换到节点 B。
  • 节点A获取更新后的数据(可能来自节点B,所以保证数据一致)。
  • LB 被告知 Node A 成功获取新数据并准备好服务它。然后,LB 允许流量流向节点 A 和 B。

这种模式也适用于主动-被动

  • 节点 A 是主动节点,B 是被动节点。
  • 节点 B 下载新数据,并准备好提供服务。
  • 节点 A 使用新数据(可能来自节点 B)进行更新,以确保一致性。
  • 节点 A 为新数据提供服务。

您首先在被动节点上获取数据,这样如果节点 A 出现故障,节点 B 将已经拥有新数据。诚然,发生这种情况的时间窗口应该很小。

【讨论】: