关于负载均衡
负载平衡是一种有用的机制,可以在多个功能强大的虚拟专用服务器之间分配传入流量。通过将处理机制分配给多台计算机,可以为应用程序提供冗余 - 确保容错和提高稳定性。用于负载平衡的循环算法将访问者发送到一组 IP 中的一个。在最基本的层面上,循环法相当容易实现,它分配服务器负载,而无需考虑服务器响应时间和访问者地理区域等更细微的因素。
Setup
本教程中的步骤要求用户拥有 VPS 的 root 权限。您可以在中查看如何设置用户教程.
在设置 nginx 负载均衡之前,您应该在 VPS 上安装 nginx。您可以使用 apt-get 快速安装它:
sudo apt-get install nginx
上游模块
为了设置循环负载均衡器,我们需要使用 nginxupstream 模块。我们将把配置合并到 nginx 设置中。
继续打开您网站的配置(在我的示例中,我将仅使用通用默认虚拟主机):
sudo nano /etc/nginx/sites-available/default
我们需要将负载均衡配置添加到该文件中。
首先我们需要包含上游模块,如下所示:
upstream backend {
server backend1.example.com;
server backend2.example.com;
server backend3.example.com;
}
然后我们应该在配置中进一步引用该模块:
server {
location / {
proxy_pass http://backend;
}
}
重启nginx:
sudo service nginx restart
只要您拥有所有虚拟专用服务器,您现在应该会发现负载平衡器将开始将访问者平均分配到链接服务器。
指令
上一节介绍了如何在多个虚拟服务器之间平均分配负载。然而,有很多原因导致这可能不是最有效的数据处理方式。我们可以使用多种指令来更有效地引导网站访问者。
Weight
开始更精确地将用户分配给服务器的一种方法是为某些机器分配特定的权重。 Nginx 允许我们分配一个数字,指定应定向到每个服务器的流量比例。
包含服务器权重的负载平衡设置可能如下所示:
upstream backend {
server backend1.example.com weight=1;
server backend2.example.com weight=2;
server backend3.example.com weight=4;
}
默认权重为 1。如果权重为 2,backend2.example 将发送两倍于 backend1 的流量,而 backend3 如果权重为 4,将处理两倍于 backend2 的流量,四倍于 backend 1.
Hash
IP 哈希允许服务器根据客户端的 IP 地址响应客户端,从而将访问者每次访问时发送回同一个 VPS(除非该服务器已关闭)。如果已知服务器处于非活动状态,则应将其标记为关闭。所有原本应该路由到故障服务器的 IP 都会被定向到另一台备用服务器。
下面的配置提供了一个示例:
upstream backend {
ip_hash;
server backend1.example.com;
server backend2.example.com;
server backend3.example.com down;
}
最大失败次数
根据默认的循环设置,即使服务器没有响应,nginx 也会继续向虚拟专用服务器发送数据。最大故障可以通过使无响应的服务器在设定的时间内不工作来自动防止这种情况。
有两个因素与最大失败次数相关:max_fails 和fall_timeout。最大失败次数是指在服务器被视为不活动之前尝试连接到服务器的最大失败次数。
Fall_timeout 指定服务器被视为不工作的时间长度。一旦时间到期,将再次开始尝试到达服务器。默认超时值为 10 秒。
示例配置可能如下所示:
upstream backend {
server backend1.example.com max_fails=3 fail_timeout=15s;
server backend2.example.com weight=2;
server backend3.example.com weight=4;
See More
这是简单循环负载平衡的简短概述。此外,还有其他方法可以加速和优化服务器:
- 如何将 Nginx 配置为 Apache 的前端代理
- 如何在 Ubuntu 12.04 上使用 Apache 安装和配置 Varnish
- 如何在 Ubuntu 12.04 上安装和使用 Memcache
埃特尔·斯维尔德洛夫