网站搜索

如何在 Linux 中使用 Nginx 作为 HTTP 负载均衡器


在设置多个应用程序服务器以实现冗余时,负载平衡是一种常用的机制,用于在一组后端服务器之间有效分配传入的服务请求或网络流量。

负载平衡有几个优点,包括通过冗余提高应用程序可用性、提高可靠性和可扩展性(当流量增加时可以添加更多服务器)。它还带来了应用程序性能的提高和许多其他好处。

推荐阅读:保护、强化和提高 Nginx Web 服务器性能的终极指南

Nginx 可以部署为高效的 HTTP 负载均衡器,在一组应用程序服务器之间分配传入的网络流量和工作负载,在每种情况下将响应从所选服务器返回到应用程序服务器。合适的客户。

Nginx支持的负载均衡方式有:

  • round-robin – 以循环方式将请求分发到应用程序服务器。当没有指定方法时默认使用它,
  • 最少连接 – 将下一个请求分配给不太繁忙的服务器(活动连接数最少的服务器),
  • ip-hash – 哈希函数用于根据客户端的 IP 地址确定下一个请求应选择哪个服务器。此方法允许会话持久性(将客户端绑定到特定的应用程序服务器)。

此外,您可以使用服务器权重来影响更高级的 Nginx 负载平衡算法。 Nginx 还支持健康检查,如果服务器的响应因错误而失败,则将服务器标记为失败(在可配置的时间内,默认为 10 秒),从而避免选择该服务器服务器用于后续传入请求一段时间。

本实用指南展示了如何使用 Nginx 作为 HTTP 负载均衡器,在两台服务器之间分发传入的客户端请求,每台服务器都有同一应用程序的实例。

出于测试目的,每个应用程序实例都带有标签(在用户界面上)以指示其运行的服务器。

测试环境搭建

Load Balancer: 192.168.58.7
Application server 1: 192.168.58.5
Application server 2: 192.168.58.8

在每个应用程序服务器上,每个应用程序实例都配置为使用域 howtoingapp.lan 进行访问。假设这是一个完全注册的域,我们将在 DNS 设置中添加以下内容。

A Record   		@   		192.168.58.7

此记录告诉客户端请求域应定向到何处,在本例中为负载均衡器 (192.168.58.7)。 DNS A 记录仅接受 IPv4 值。或者,客户端计算机上的 /etc/hosts 文件也可用于测试目的,其中包含以下条目。

192.168.58.7  	tecmintapp.lan

在 Linux 中设置 Nginx 负载平衡

在设置 Nginx 负载平衡之前,您必须使用您的发行版的默认包管理器在服务器上安装 Nginx,如下所示。

sudo apt install nginx   [On Debian/Ubuntu]
sudo yum install nginx   [On CentOS/RHEL]   

接下来,创建一个名为 /etc/nginx/conf.d/loadbalancer.conf 的服务器块文件(提供您选择的名称)。

sudo vi /etc/nginx/conf.d/loadbalancer.conf

然后将以下配置复制并粘贴到其中。由于未定义负载平衡方法,因此此配置默认为循环。

 
upstream backend {
        server 192.168.58.5;
        server 192.168.58.8;
    }
	
    server {
        listen      80 default_server;
        listen      [::]:80 default_server;
        server_name tecmintapp.lan;

        location / {
	        proxy_redirect      off;
	        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_pass http://backend;
	}
}

在上面的配置中,proxy_pass 指令(应在位置内指定,在本例中为 /)用于将请求传递到使用word backend,在upstream指令中(用于定义一组服务器)。此外,请求将使用加权循环平衡机制在服务器之间分配。

要采用最少连接机制,请使用以下配置

upstream backend {
        least_conn;
        server 192.168.58.5;
        server 192.168.58.8;
    }

要启用 ip_hash 会话持久机制,请使用:

upstream backend {
	ip_hash;
        server 192.168.58.5;
        server 192.168.58.8;
    }

您还可以使用服务器权重影响负载平衡决策。使用以下配置,如果有 6 个来自客户端的请求,则应用程序服务器 192.168.58.5 将分配 4 个请求,其中 2 个请求将发送到 192.168.58.8

upstream backend {
        server 192.168.58.5	weight=4;
        server 192.168.58.8;
    }

保存文件并退出。然后通过运行以下命令确保添加最近的更改后 Nginx 配置结构正确。

sudo nginx -t

如果配置正常,请重新启动并启用 Nginx 服务以应用更改。

sudo systemctl restart nginx
sudo systemctl enable nginx

在 Linux 中测试 Nginx 负载平衡

要测试 Nginx 负载平衡,请打开 Web 浏览器并使用以下地址进行导航。

http://tecmintapp.lan

网站界面加载后,记下已加载的应用程序实例。然后不断刷新页面。在某些时候,应用程序应该从第二个服务器加载,指示负载平衡。

您刚刚学习了如何在 Linux 中将 Nginx 设置为 HTTP 负载均衡器。我们希望通过下面的反馈表了解您对本指南的看法,尤其是关于使用 Nginx 作为负载均衡器的看法。有关更多信息,请参阅有关使用 Nginx 作为 HTTP 负载均衡器的 Nginx 文档。