例如,我在同一个网络中有两个服务器,具有相同的代码/软件。如果主服务器出现故障,我希望第二个服务器成为主服务器。
我听说了以下几种方法:
上述方法的优缺点是什么?实现这一目标的最佳做法是什么?
发布于 2017-01-05 15:15:18
我对鲤鱼不太熟悉,但我可以尝试在剩下的两种选择中提供帮助:
Robin为您提供负载平衡,但是如果服务器失败,它仍然会接收请求(这也会失败)。
即: DNS www.example.com同时指向x.1和x.2
如果x.2死了,DNS仍将被解析为x2,而客户端仍将尝试从x2请求,因此这使您在停机期间请求的失败率达到一半(不太好)
即使您在停机期间将DNS更改为仅指向x.1;DNS传播将花费很长时间,并且仍然会释放请求。
老实说,在堆栈前面放置一个负载平衡器(代理服务器)是唯一的方法。
我真的很喜欢HAProxy,但这绝不是唯一的解决方案(找到适合你的方法)
代理服务器以高可用性(HA)的形式向您提供了对应用程序堆栈的更多控制
您可以在2到N后端服务器之间加载平衡,并释放任意数量的服务器,并且仍然在运行。
您可以安排一天中任何时候的停机时间来进行维护或部署,而不影响客户端。
内置的健康检查轮询后端服务器,根据需要将它们从负载中取出,并在它们恢复后将它们放回原处。
HA负载平衡的缺点通常是为了保持会话正确或特殊情况的路由而必须设置的规则的数量。是的,它可以变得很复杂,但是在社区中有很多支持的,而且它很容易学习。HA负载平衡的另一个缺点是,代理服务器本身成为一个单一的故障点,但这可以很容易地通过心跳和第二个代理服务器来克服。
希望这能回答你的一些问题
发布于 2018-03-10 07:18:25
让应用程序容错的一个好方法是使用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官方网站。
https://stackoverflow.com/questions/41460621
复制相似问题