网站/网络服务器的容错性 - 最佳实践

问题描述:

例如,我有同一个网络中两台服务器,具有相同的代码/软件。如果主服务器出现故障,我希望第二台服务器成为主服务器。网站/网络服务器的容错性 - 最佳实践

我听说了以下方法:

什么是上述方法的利弊?有什么最佳做法来实现这一目标?

我不是太熟悉,CARP,但我可以尝试帮助剩下的两个选项:

循环DNS为您提供了负载平衡,但如果一台服务器出现故障它仍然会接收请求(其中将太失败)
即:在DNS www.example.com点都XXX1和XXX2
如果XXX2死亡的DNS仍然会被解析为XXX2和客户端将仍然试图从中索取,所以,这使停机时间(不好)
即使您更改DNS中的失败率一半的请求,停机期间仅指向XXX1; DNS传播需要很长时间,您仍然会失去请求。

在我的真实想法将负载平衡器(代理服务器)在堆栈的前面去
我真的很喜欢HAProxy的,但它绝不是唯一的解决方案(发现你的作品的唯一途径)

代理服务器为您提供了更多的控制您的应用程序堆栈在高可用性的形式(HA)
可以2之间进行负载均衡到N后端服务器和适度宽松的其中任意数量的,仍然是运行。
您可以安排每天的任何时间进行维护或部署而不影响您的客户的停机时间。
内置健康检查轮询后端服务器,并根据需要将它们从负载中取出,并在恢复后将它们放回原处。
HA负载平衡的缺点通常是为了保持会话正确或路由特殊情况而必须设置的规则数。是的,它可以变得复杂,但在社区中有支持并且易于学习的A LOT。 HA Load Balancing的另一个优点是代理服务器本身成为单点故障,但这可以通过heartbeatd和第二台代理服务器轻松解决。

希望这回答了你的一些问题

+0

非常感谢这么详细的答案!我还有两个问题,如果你不介意的话:)“第二代理服务器”是指第二台物理服务器,还是一台服务器中的软件。如果有物理服务器,如果发生故障,需要更改DNS直到问题得到解决,对吗?另一个问题是关于你自己的偏好:你在'http'还是'tcp'模式下运行HAProxy? – Curious

+1

要真正高度可用,您需要降低风险,所以是另一台物理服务器或虚拟机(最好是)以防万一您的主代理服务器发生故障。 HAProxy通常只是一个配置文件,您可以在重新启动脚本中进行rsync同步,以便您知道辅助服务器具有最新的配置。至于DNS切换;它在HA堆栈中不需要,您的DNS指向两台服务器之间的共享IP(请参阅https://www.howtoforge.com/setting-up-a-high-availability-load-balancer-with-haproxy-heartbeat -on-debian-lenny) –

+1

我在HTTP模式下运行Web应用程序的HAProxy和我的邮件服务器(SMTP)发送邮件的tcp模式(我每天向广告系列发送约200万封电子邮件)tcp适用于任何非HTTP流量,所以它归结为用例。它关于使用正确的工具进行工作并构建一个适合您的栈。所以如果你只是想要负载平衡http请求,那么是http模式是要走的路。 –

,让你的应用程序的容错会使用nginx的为您的负载均衡器的一个好方法。你可以像

upstream some_name { 
    server server_ip; 
    server server_ip2; 
}; 
server { 
    listen 80; 
    location/{ 
      proxy_set_header X-Real-IP $remote_addr; 
      proxy_set_header X-Forwarded-For 
      $proxy_add_x_forwarded_for; 
      proxy_set_header Host $http_host; 
      proxy_set_header X-NginX-Proxy true; 
      proxy_pass http://some_name 
    } 
} 

一个配置加上这个nginx的上游对象采取进一步的标志像max_fails = 10 fail_timeout = 20岁,是足够聪明,知道如果一台服务器出现故障时,会切换到正在线上,所以未来服务器远不止于此。 有关详细信息,请检查这个official nginx website