负载均衡是扩展应用程序并提高其性能和冗余的绝佳方法,Nginx是一种流行的Web服务器软件,可以配置为简单且功能强大的负载均衡器,以提高服务器资源的可用性和效率。在负载均衡配置中,nginx充当在多个单独服务器上工作的分布式Web应用程序的单个入口点。
本指南介绍如何使用nginx为云服务器设置负载均衡。作为先决条件,您需要至少安装两台主机并安装Web服务器软件。
安装nginx
按照您喜欢的方式设置服务器,添加用户,运行更新等之后,使用以下方法安装nginx。
#Debiansudo nano /etc/apt/sources.list#将以下内容添加到列表末尾http://nginx.org/packages/debian/jessie nginxdeb-src http://nginx.org/packages/ debian / jessie nginx#保存文件,退出编辑器,然后运行以下命令sudo aptitude updatesudo aptitude install nginx
#Ubuntunginx = stablesudo add-apt-repository ppa:nginx / $ nginxsudo apt-get updatesudo apt-get install nginx
#CentOSsudo vi /etc/yum.repos.d/nginx.repo#在文件中输入以下内容[nginx]name = nginx repobaseurl = http://nginx.org/packages/centos/$releasever/$basearch/gpgcheck = 0enabled = 1
#Save并退出,然后使用下面的命令sudo yum updatesudo 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 service nginx restart
通过在Web浏览器中打开负载均衡器服务器的公共IP地址来测试服务器是否回复HTTP请求。当您看到nginx的默认欢迎页面时,则表示安装成功。
如果在加载页面时遇到问题,请检查防火墙是否阻止了该连接。例如,在CentOS 7上,默认防火墙规则不允许HTTP traffic,请使用以下命令启用它。
sudo firewall-cmd --add-service = http--permanent sudo firewall-cmd –reload
然后尝试重新加载浏览器。
将nginx配置为负载均衡器的方法
安装并测试nginx后,可以开始配置以实现负载均衡。从本质上讲,您需要做的就是设置nginx,其中包含要监听的连接类型以及重定向位置的说明。要实现此目的,请使用您喜欢的任何文本编辑器创建新的配置文件,例如使用nano:
sudo nano /etc/nginx/conf.d/load-balancer.conf
在load-balancer.conf中,您需要定义以下两个段:upstream and server,请参阅下面的示例。
#定义要包含在负载均衡方案中的服务器。
#最好使用服务器的私有IP以获得更好的性能和安全性。
upstream backend{ server 10.1.0.101; server 10.1.0.102; server 10.1.0.103;}
#这个服务器接受所有通信端口80,并将其传递到upstream。
#请注意,upstream名称和proxy_pass需要匹配。
server { listen 80; location / { proxy_pass http:// backend; }}
然后保存文件并退出编辑器。
接下来,您需要禁用先前在安装后测试的默认服务器配置,同样取决于操作系统。
在Debian和Ubuntu系统上,您需要从启用站点的文件夹中删除默认符号链接。
sudo rm / etc / nginx / sites-enabled / default
CentOS的主机不使用相同的链接,而不是简单的更名default.conf在conf.d /目录下的东西,例如:
sudo mv /etc/nginx/conf.d/default.conf/etc/nginx/conf.d/default.conf.disabled
然后使用以下命令重新启动nginx。
sudo service nginx restart
检查nginx是否成功启动,如果重新启动失败,请查看刚刚创建的 /etc/nginx/conf.d/load-balancer.conf,以确保没有错误类型或缺少分号。
在Web浏览器中输入负载均衡器的公共IP地址时,现在应该将其传递给其中一台后端服务器。
负载均衡方法
如果没有定义其他方法,默认情况下使用nginx进行负载均衡会使用循环算法,如上面的第一个示例所示。使用循环方案,将根据您在load-balancer.conf 文件中设置的顺序轮流选择每个服务器。这平衡了短期操作的请求数量。
基于最少连接的负载平衡是另一种简单的方法。顾名思义,此方法将请求定向到当时具有最少活动连接的服务器。对于请求有时可能需要更长时间才能完成的应用程序,它比循环法更有效。
要启用最少连接平衡方法,请将参数least_conn添加到upstream部分,如下例所示。
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 -parameter 添加到upstream,如下面的示例所示。
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的负载均衡
在负载均衡器配置文件中添加另一个服务器部分,该文件使用SSL侦听端口443上的HTTPS流量,并为upstream设置proxy_pass,就像上一个示例中的HTTP一样。
再次打开配置文件进行编辑。
sudo nano /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; location / { proxy_pass http:// backend; }}
然后保存文件,退出编辑器并再次使用重新启动nginx
sudo service nginx restart
结论
如果您希望提高Web应用程序的性能和可用性,那么设置负载均衡绝对值得考虑。虽然使用多个主机可以保护Web服务具有冗余,但负载均衡本身仍然可以留下单点故障。您可以通过在多个负载平衡器之间设置浮动IP来进一步提高高可用性。