综合技术

如何使用nginx配置负载均衡

微信扫一扫,分享到朋友圈

如何使用nginx配置负载均衡
0

负载均衡是扩展应用程序并提高其性能和冗余的绝佳方法。Nginx是一种流行的Web服务器软件,可以配置为简单但功能强大的负载均衡器,以提高服务器资源的可用性和效率。在负载平衡配置中,nginx充当在多个单独服务器上工作的分布式Web应用程序的单个入口点。


本文介绍如何使用nginx为云服务器配置负载均衡。作为先决条件,您需要至少安装两台主机并安装Web服务器软件,以便了解负载均衡器的优势。

安装nginx

目前,最新版本的CentOS,Debian和Ubuntu都提供nginx软件包,可以使用命令快速安装nginx。

#Debian和Ubuntu 
sudo apt-get update 
#然后安装Nginx开源版 
sudo apt-get install nginx
#CentOS 
#安装额外的软件包存储库 
sudo yum install epel-release
#更新存储库并安装Nginx 
sudo yum update 
sudo yum install nginx

安装玩抽,进入nginx主配置文件夹。

cd /etc/nginx/

根据您的操作系统不同,Web服务器配置文件将位于两个位置之一。

Ubuntu和Debian遵循在 /etc/nginx/sites-available/, 中存储虚拟主机文件的规则,这些规则 通过符号链接启用到 /etc/nginx/sites-enabled/。您可以使用以下命令启用任何新的虚拟主机文件。

sudo ln -s /etc/nginx/sites-available/vhost /etc/nginx/sites-enabled/vhost

CentOS用户可以在/etc/nginx/conf.d/下找到其主机配置文件,加载了任何 .conf 类型的虚拟主机文件。

检查您是否可以找到至少默认配置,然后重新启动nginx。

sudo systemctl restart nginx

通过在Web浏览器中打开负载均衡器服务器的IP地址来测试服务器是否回复HTTP请求。当您看到nginx的默认欢迎页面时,安装成功。


如果您在加载页面时遇到问题,请检查防火墙是否阻止了您的连接。例如,在CentOS 7上,默认防火墙规则不允许HTTP流量,请使用以下命令启用它。

sudsudo firewall-cmd --add-service=http --permanent 
sudo firewall-cmd --reload

然后尝试重新加载浏览器。

将nginx配置为负载均衡器

安装并测试nginx后,您可以开始配置它以实现负载平衡。从本质上讲,您需要做的就是设置nginx,其中包含要监听的连接类型以及重定向位置的说明。要实现此目的,请使用您喜欢的任何文本编辑器创建新的配置文件,例如使用 vi

sudo vi /etc/nginx/conf.d/load-balancer.conf

load-balancer.conf中, 您需要定义以下两个段: 上游服务器 ,请参阅下面的示例。

#定义要包含在负载均衡方案中的服务器。  
#最好使用服务器的私有IP以获得更好的性能和安全性。 
http {
    upstream backend {
       server 10.1.0.101;
       server 10.1.0.102;
       server 10.1.0.103;
    }
  
    #该服务器接受到端口80的所有流量并将其传递给上游。
    #请注意,上游名称和proxy_pass需要匹配。
    server {
       listen 80;
        location / {
           proxy_pass http://backend;
       }
    }
 }

然后保存文件并退出编辑器。

接下来,您需要禁用先前在安装后测试的默认服务器配置。同样取决于您的操作系统,这部分略有不同。

在Debian和Ubuntu系统上,您需要从 启用站点的 文件夹中删除 默认 符号链接。

sudo rm /etc/nginx/sites-enabled/default

CentOS的主机不使用相同的链接,而是简单地将重命名 default.confconf.d / 目录下的东西,不是结束 的.conf ,例如:

sudo mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.disabled

然后使用以下命令重新启动nginx。

sudo systemctl restart nginx

检查nginx是否成功启动。如果重新启动失败,请查看刚刚创建的 /etc/nginx/conf.d/load-balancer.conf ,以确保没有错误类型或缺少分号。

在Web浏览器中输入负载均衡器的公共IP地址时,您现在应该被传递到其中一个后端服务器。

负载均衡方法

如果没有定义其他方法,默认情况下使用nginx进行负载均衡会使用循环算法,如上面的第一个示例所示。使用循环方案,将根据您在 load-balancer.conf 文件中设置的顺序轮流选择每个服务器。这平衡了短期操作的请求数量。

基于最少连接的负载平衡是另一种简单的方法。顾名思义,此方法将请求定向到当时具有最少活动连接的服务器。对于请求有时可能需要更长时间才能完成的应用程序,它比循环法更有效。

要启用最少连接平衡方法,请将参数 least_conn 添加到 上游 部分,如下例所示。

upstream backend {
    least_conn;
    server 10.1.0.101;
     server 10.1.0.102;
    server 10.1.0.103;
 }

虽然循环和最少连接平衡方案是公平的并且有其用途,但是它们不能提供会话持久性。如果您的Web应用程序要求用户随后被定向到与之前连接相同的后端服务器,则应使用IP哈希方法。IP哈希使用访问者IP地址作为密钥来确定应选择哪个主机来为请求提供服务。这允许访问者每次被定向到同一服务器,被授予服务器可用且访问者的IP地址未被更改。

要使用此方法,请将 ip_hash 添加到 上游 段,如下面的示例所示。

upstream backend {
    ip_hash;
    server 10.1.0.101;
    server 10.1.0.102;
    server 10.1.0.103;
 }

在不同主机之间的可用资源不相等的服务器设置中,可能希望某些服务器优先于其他服务器。定义服务器权重允许您使用nginx进一步微调负载平衡。负载均衡器中权重最高的服务器最常选择。

upstream backend {
    server 10.1.0.101 weight=4;
    server 10.1.0.102 weight=2;
    server 10.1.0.103;
 }

例如,在上面显示的配置中,第一个服务器的选择频率是第二个服务器的两倍,与第三个服务器相比,它再次获得两倍的请求。

启用HTTPS的负载均衡

为您的网站启用HTTPS是保护访问者及其数据的好方法。如果您尚未在网络主机上实施加密,我们强烈建议您查看我们的指南, 了解如何在 nginx 上安装Let’s Encrypt

在负载均衡器中使用加密比您想象的要容易。您需要做的就是在负载均衡器配置文件中添加另一个服务器部分,该文件使用SSL侦听端口443上的HTTPS流量,并为上游段设置proxy_pass,就像上一个示例中的HTTP一样。

再次打开配置文件进行编辑。

sudo vi /etc/nginx/conf.d/load-balancer.conf

然后将以下服务器段添加到文件末尾。

server {
    listen 443 ssl;
    server_name domain_name;
    ssl_certificate /etc/letsencrypt/live/domain_name/cert.pem;
    ssl_certificate_key /etc/letsencrypt/live/domain_name/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    location / {
       proxy_pass http://backend;
    }
 }

然后保存文件,退出编辑器并再次重新启动nginx。

sudo systemctl restart nginx

健康检查

为了知道哪些服务器可用,nginx的反向代理实现包括被动服务器健康检查。如果服务器无法响应请求或回复错误,nginx将注意服务器已失败,并将尝试避免一段时间转发到该服务器的连接。

通过将参数 max_fails 设置为服务器行,可以在负载均衡器配置文件中定义特定时间段内连续不成功的连接尝试次数。默认情况下,如果未指定 max_fails ,则将此值设置为1.(可选)将 max_fails 设置为0将禁用对该服务器的运行状况检查。

如果将 max_fails 设置为大于1的值,则后续失败必须在特定时间范围内发生,以便无法计数。此时间范围由参数 fail_timeout 指定,该参数还定义服务器应被视为失败的时间。默认情况下, fail_timeout 设置为10秒。

在服务器标记失败并且 fail_timeout 设置的时间已过后,nginx将开始使用客户端请求正常探测服务器。如果探测返回成功,则服务器再次标记为实时并且正常包含在负载平衡中。

upstream backend {
    server 10.1.0.101 weight=5;
    server 10.1.0.102 max_fails=3 fail_timeout=30s;
    server 10.1.0.103;
 }

使用运行状况检查可以根据需要通过启动或关闭主机来使服务器后端适应当前需求。在高流量期间启动其他服务器可以在新资源自动供负载均衡器使用时轻松提高应用程序性能。

结论

如果您希望提高Web应用程序的性能和可用性,那么设置负载均衡器绝对值得考虑。使用nginx进行负载均衡功能强大且设置相对简单,并且与简单的加密解决方案(例如Let’s Encrypt客户端)一起使用,它为您的Web场提供了一个很好的前端。

虽然使用多个主机可以保护您的Web服务具有冗余,但负载均衡器本身仍然可以留下单点故障。您可以通过在多个负载平衡器之间设置浮动IP来进一步提高高可用性。

阅读原文...


微信扫一扫,分享到朋友圈

如何使用nginx配置负载均衡
0

Avatar

An evergreen list of advanced JS questions + their explanations

上一篇

This Week’s Top Stories | 14th June

下一篇

评论已经被关闭。

插入图片

热门分类

往期推荐

如何使用nginx配置负载均衡

长按储存图像,分享给朋友