【问题标题】:How should I handle if a server crash?如果服务器崩溃,我应该如何处理?
【发布时间】:2015-09-21 14:33:05
【问题描述】:

我想知道我是否有两台服务器,一台是“主”服务器,另一台就在那里(两者都使用相同的后端代码)。如果主服务器崩溃并且我希望我的客户使用另一台服务器,我应该如何处理,这样他们就不必重新启动他们的程序或类似的东西。

我已经阅读了使用 bully 算法,但我不知道如何处理我的客户在第一台主服务器上使用的套接字和数据(消息),并使用它在我的第二个服务器中。

【问题讨论】:

  • 如何设置集群中的服务器?
  • 那是什么意思?我对网络编程有点陌生
  • 我想了解更多关于如何将数据从一台服务器重定向到另一台服务器@LuiggiMendoza
  • 您是将数据存储在数据库中还是分布式缓存中?如果您正在维护缓存,则无需在应用程序中进行任何更改。第二台服务器只是从缓存中获取数据。如果您正在使用数据库,您可以从数据库中重新加载与崩溃服务器相关的数据并继续。
  • 是的,它不是数据库存储的。但是怎么做?如果我的主服务器崩溃,我不会丢失数据吗?如何在崩溃的服务器和“新”服务器之间发送数据? @sunrise76

标签: java sockets crash server


【解决方案1】:

【讨论】:

  • 感谢您提供的所有链接。事实证明,我的问题没有被“准确”地问出来。我只是要把这个投票作为答案,因为看起来有很多信息可以帮助我解决我的问题@paulsm4
【解决方案2】:

首先,如果服务器崩溃,您将无法处理驻留在其上的数据(当然,直到服务器恢复运行)。因此,如果您不想在发生故障时丢失数据,您应该使用分布式(NoSQL?)数据存储(例如 Cassandra、Redis、DynamoDB 等),因为它们已经以可扩展的方式解决了这个问题。

其次,如果您的问题是“当 A 失败时如何将我的请求从 A 路由到 B”,您可以使用简单的(例如基于 NodeJS)代理来前端服务器 A 和 B。最初,代理会将所有客户端请求“转发”到 A。当 A 崩溃时,代理会检测到这一点(可能是当它看到所有转发的请求在过去 x 秒内都已超时)并切换到服务器 B。 但是,客户端请求会持续失败的一小段时间窗口(取决于您配置的 x 值)。

https://github.com/nodejitsu/node-http-proxy

【讨论】:

    【解决方案3】:
    1. 如果您在服务器上存储任何不想在服务器关闭时丢失的状态,则将您的状态存储在两个特定的数据库服务器 - 主服务器和副本服务器上。如果您不知道选择哪个数据库服务器,请告诉我,我会问您其他问题以提供帮助。
    2. 如果使用您的服务器的客户端代码在您的控制之下,则在其中实施所有容错逻辑。执行此操作的最简单方法是“循环” - 您连接到随机服务器,直到找到满足您请求的服务器。谷歌“循环”了解更多详情。
    3. 如果客户端代码不受您的控制,那么您应该使用 BGP 负载平衡。其主要思想是,一旦服务器关闭,另一台服务器将获得第一个服务器的 IP 地址,例如在客户端,一切都是完美的。有关更多详细信息,请谷歌“bgp 负载平衡”。

    【讨论】:

      猜你喜欢
      • 2018-12-21
      • 2022-08-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多