如果服务器崩溃了,我该如何处理?

3
我想知道如果我有两台服务器,一台是“主”服务器,另一台只是备用(两台服务器都使用相同的后端代码)。如果主服务器崩溃了,我应该如何处理,让我的客户端使用另一台服务器,使他们不需要重新启动程序或任何其他操作。
我已经研究了使用“ bully算法”,但我不知道如何处理客户端在第一台主服务器上使用的套接字和数据(消息),并将其用于我的第二个服务器。

1
将服务器设置为集群如何? - Luiggi Mendoza
你的意思是什么?我对网络编程还比较新。 - Bojje
我想了解更多关于如何将数据从一个服务器重定向到另一个服务器的信息 @LuiggiMendoza - Bojje
是的,它不是基于数据库存储的。但是怎么办?如果我的主服务器崩溃了,我会失去数据吗?如何在崩溃的服务器和“新”服务器之间发送数据?@sunrise76 - Bojje
http://nosql-database.org/ 和 http://highscalability.com/blog/2011/6/20/35-use-cases-for-choosing-your-next-nosql-database.html 是一些关于NoSQL的好链接。 - Ravindra babu
显示剩余2条评论
3个回答

4

听起来你正在尝试在应用程序级别(例如在Java / sockets代码中)实现“故障转移”。我建议你不要这样做。

以下是一些可能更加强大的替代方案:

补充:


谢谢您提供的所有链接。事实证明,我的问题并没有被“准确地”提出。我会投票支持这个答案,因为它看起来提供了很多信息,可以帮助我解决问题@paulsm4。 - Bojje

2
首先,如果服务器崩溃,除非服务器重新启动,否则您无法处理其上存储的数据(当然,这时您可以采取措施)。因此,如果您不想在出现故障时丢失数据,应使用分布式(NoSQL?)数据存储(例如Cassandra、Redis、DynamoDB等),因为它们已经以可扩展的方式解决了这个问题。
其次,如果您的问题是:“当A失败时,我如何将我的请求从A路由到B”,您可以使用一个简单的(例如基于NodeJS的)代理来前端化您的A和B服务器。最初,代理将所有客户端请求转发到A。当A崩溃时,代理会检测到(可能是当它看到所有转发请求在过去x秒内一直超时时)并切换到服务器B。但是,在这个过程中会有一个小的时间窗口(取决于您配置的x值),其中客户端请求将继续失败。

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


0
如果您在服务器上存储任何状态,并且不希望在服务器关闭时丢失该状态,则请将状态存储在两个特定的数据库服务器上 - 主服务器和副本。 如果您不知道选择哪个数据库服务器,请告诉我,我会问您其他问题以帮助您。
如果使用您的服务器的客户端代码由您控制,则应在其中实现所有容错逻辑。最简单的方法是“循环式” - 您连接到一个随机服务器,直到找到为您提供服务的服务器。Google“循环式”以获取更多详细信息。
如果客户端代码不在您的控制之下,则应使用BGP负载平衡。其主要思想是一旦一个服务器出现问题,另一个服务器就会获得第一个服务器的IP地址,因此客户端方面一切都完美。有关更多详细信息,请搜索“bgp负载平衡”。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接