网站/网络服务器容错-最佳做法

问题描述 投票:0回答:2

例如,我在同一网络中有两台服务器,具有相同的代码/软件。 如果主服务器出现故障,我希望第二台服务器成为主服务器。

我听说以下方法:

上述方法的优缺点是什么? 而实现这一目标的最佳实践是什么?

nginx haproxy high-availability round-robin fault-tolerance
2个回答
1
投票

我对CARP不太熟悉,但是我可以尝试为其余两个选项提供帮助:

循环DNS为您提供负载平衡,但是如果服务器发生故障,它仍然会接收请求(也会失败)
即:DNS www.example.com指向xxx1和xxx2
如果xxx2死了,DNS仍将解析为xxx2,并且客户端仍会尝试向其请求,因此这会使停机期间的失败率降至请求的一半(不好)
即使您在停机期间将DNS更改为仅指向xxx1,也是如此。 DNS传播将花费很长时间,您仍然会丢失请求。

老实说,将负载平衡器(代理服务器)放在堆栈前面是唯一的方法
我真的很喜欢HAProxy,但这绝不是唯一的解决方案(找到适合您的方法)

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

希望这能回答您的一些问题


1
投票

使应用程序具有容错能力的一种好方法是使用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 = 20s,并且足够聪明地知道一台服务器是否宕机,它会切换到下一个在线的服务器,而不仅仅是这个。 请检查此官方nginx网站以获取有关它的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.