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

当涉及为了冗余设置多个应用服务器时,负载均衡是一种常用机制,可以高效地将传入的服务请求或网络流量分布到一组后端服务器中。

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

推荐阅读: 安全、加固和提高Nginx Web服务器性能的终极指南

Nginx 可以部署为高效的HTTP负载均衡器,以在一组应用服务器之间分布传入的网络流量和工作负载,并从所选服务器返回响应给适当的客户端。

Nginx 支持的负载均衡方法包括:

  • round-robin – 以循环方式将请求分发到应用服务器。如果未指定方法,则默认使用此方法。
  • least-connected – 将下一个请求分配给负载较低的服务器(具有最少活动连接数的服务器),
  • 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

在每个应用服务器上,每个应用实例都配置为使用域名tecmintapp.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指令(应在位置/内指定,在本例中)用于将请求传递给使用单词backend引用的HTTP代理服务器,在上游指令中(用于定义一组服务器)。此外,请求将使用加权轮循平衡机制在服务器之间分配。

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

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;
    }

您还可以使用服务器权重来影响负载均衡决策。使用以下配置,如果有六个来自客户端的请求,则应用服务器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负载均衡,请打开一个网页浏览器,使用以下地址进行导航。

http://tecmintapp.lan

一旦网站界面加载完成,请注意加载的应用实例。然后持续刷新页面。在某个时刻,应用应该从第二个服务器加载,表明负载均衡生效。

Check Nginx Load Balancing in Linux

您刚刚学会如何在Linux上将Nginx设置为HTTP负载均衡器。我们想了解您对这篇指南的看法,特别是关于使用Nginx作为负载均衡器的看法,请通过下方的反馈表单告诉我们。有关更多信息,请参阅关于将Nginx用作HTTP负载均衡器的Nginx文档。

Source:
https://www.tecmint.com/use-nginx-as-http-load-balancer-in-linux/