如何设置Nginx负载均衡

来自菜鸟教程
跳转至:导航、​搜索

关于负载均衡

负载平衡是一种有用的机制,可以将传入流量分布在多台有能力的虚拟专用服务器上。通过将处理机制分配给多台机器,为应用程序提供冗余——确保容错和提高稳定性。 用于负载平衡的循环算法将访问者发送到一组 IP 中的一个。 在其最基本的级别上,轮询相当容易实现,它在不考虑服务器响应时间和访问者地理区域等更细微的因素的情况下分配服务器负载。

设置

本教程中的步骤要求用户在您的 VPS 上具有 root 权限。 您可以在 用户教程 中查看如何设置它。

在设置 nginx 负载平衡之前,您应该在您的 VPS 上安装 nginx。 您可以使用 apt-get 快速安装它:

sudo apt-get install nginx

上游模块

为了设置循环负载均衡器,我们需要使用 nginx 上游模块。 我们会将配置合并到 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

只要您拥有所有虚拟专用服务器,您现在应该会发现负载平衡器将开始将访问者平均分配到链接服务器。

指令

上一节介绍了如何在多个虚拟服务器之间平均分配负载。 但是,这可能不是处理数据的最有效方式的原因有很多。 我们可以使用几个指令来更有效地引导网站访问者。

重量

开始更精确地将用户分配给服务器的一种方法是为某些机器分配特定的权重。 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 的两倍,而权重为 4 的 backend3 将处理的流量是 backend2 的两倍,是 backend 1 的四倍。

哈希

IP 哈希允许服务器根据其 IP 地址响应客户端,每次访问时将访问者发送回相同的 VPS(除非该服务器已关闭)。 如果已知服务器处于非活动状态,则应将其标记为关闭。 所有应该路由到停机服务器的 IP 然后被定向到备用 IP。

下面的配置提供了一个示例:

upstream backend {
  ip_hash;
  server   backend1.example.com;
  server   backend2.example.com;
  server   backend3.example.com  down;
 }

最大失败

根据默认的循环设置,即使服务器没有响应,nginx 也会继续向虚拟专用服务器发送数据。 Max failed 可以通过使无响应的服务器在设定的时间内不工作来自动防止这种情况。

有两个与最大失败相关的因素:max_fails 和 fall_timeout。 Max failed 是指在服务器被视为不活动之前,尝试连接到服务器的最大失败次数。 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;

看更多

这是对简单循环负载平衡的简短概述。 此外,还有其他方法可以加速和优化服务器:

埃特尔·斯维尔德洛夫