Nginx负载均衡概念
我们知道客户端访问服务器资源的大概流程是:客户端发送多个请求到服务器,服务器收到请求后,进行处理相关请求,有一些请求可能要与数据库进行交互,服务器处理完毕后,再将结果返回给客户端。
但是我们应该能够想得到,随着业务飞涨,服务器访问量增多、并发量大的时候,就很容易造成服务器由于压力过大,处理不过来,导致服务器崩溃。
而如果解决服务器资源紧张的问题,第一个能够想到的无非就是加大服务器的硬件配置,如加大CPU、内存等配置。但是这种方法会造成金钱消耗过大不说,也会随着业务量会不断扩大硬件配置,有诸多限制。
有没有其它方法应对这种情况呢?此时集群的解决方案出来了,单个服务器没有办法处理这么多请求,就增加服务器数量进行处理,即通过将客户端请求转发到多台服务器上进行处理。相对于将客户端请求转发到单台服务器进行处理,这种方法是将客户端请求改为转发到多台服务器上,也就是将负载分发到了不同的服务器,起到了缓解服务器资源的作用,被称为负载均衡。
Nginx负载均衡配置实例
一、配置实例1
本实例主要是演示Nginx常用也是最简单的负载均衡配置,通过小试牛刀让大家加深对负载均衡的理解。实验拓扑如下图所示:
如拓扑所示:客户端要访问资源链接如下:
http://www.haodaolinux.com:8090/linux/linux.html
通过配置Nginx负载均衡服务器 ,它会将客户端请求平均转发到真实服务器站点1 和真实服务器站点2上。
1、环境准备
需要声明为了实验顺利进行,减少排查时间。以下实验关闭了防火墙服务进行,如果不关防火墙,可以自行添加相关的端口策略。
(1)客户端主机配置好域名解析,使得在客户端主机浏览器上通过访问www.haodaolinux.com,能够直接解析到192.168.3.199,我客户端在windows环境,现在通过修改相关配置文件,配置IP与域名的映射关系,配置如下:
1)基于 C:\Windows\System32\drivers\etc\hosts 文件进行解析;
通过修改C:\Windows\System32\drivers\etc\hosts文件,追加如下信息,具体配置如下:
192.168.3.199 www.haodaolinux.com
确保客户端ping通www.haodaotomcat.com,如下图所示:
(2)真实服务器站点1和真实服务器站点2的tomcat环境准备好,这里准备两个tomcat服务器,对应端口分别为8888和9999,主要是安装配置tomcat相关操作,如我配置好相关操作,能够访问到的真实服务器站点如下:
(3)负载均衡服务器环境准备,这里主要是准备并且配置好负载均衡服务器,使得负载均衡服务器能够将客户端请求平均转发给真实服务器站点1和真实服务器站点2。具体配置如下所示:
1)修改nginx配置文件nginx.conf ,在nginx.conf文件中的http块中添加、修改server{}标签相关配置。如下所示:
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
upstream haodaoserver {
server 192.168.3.199:8888;
server 192.168.3.199:9999;
}
server {
listen 8090;
server_name 192.168.3.199;
charset utf-8;
#access_log logs/host.access.log main;
location / {
proxy_pass http://haodaoserver;
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}</code></pre>
主要改动点如下所示:
![](http://static.51tbox.com/static/2024-11-22/col/5d10fe7a3fc2b13118c4f87eec0aa4d2/16f4d801ae5545bba064095ced304a41.png.jpg)
2、检查nginx配置文件语法,确认语法无误,命令如下:
nginx -t
3、重启nginx服务
nginx -s stop
nginx
二、验证实验配置结果
通过浏览器访问站点地址,验证实验结果:
1、打开浏览器,地址栏输入如下站点地址
http://www.haodaolinux.com:8090/linux/linux.html
返回结果,如下图所示:
![](http://static.51tbox.com/static/2024-11-22/col/5d10fe7a3fc2b13118c4f87eec0aa4d2/e4539aa7aa0d467199be41d1d80ec892.png.jpg)
2、刷新浏览器,返回结果,如下图所示:
![](http://static.51tbox.com/static/2024-11-22/col/5d10fe7a3fc2b13118c4f87eec0aa4d2/fddeb015ecc74145b44258c86e82e63f.png.jpg)
由此可见,负载均衡服务器将客户端请求平均分摊转发给了两个不同端口号的tomcat服务器进行处理。
但是负载均衡服务器是根据什么策略进行转发客户端请求的呢?
Nginx负载均衡转发策略
-------------
Nginx负载均衡是通过配置好转发策略,然后根据策略进行客户端请求的转发的,具体有以下几种常见策略。
1、轮询策略
该转发策略是将每一个客户端请求按照时间顺序逐一分配到不同的真实服务器,这也是默认采用的一种转发策略,如我们实验中实际没有指定是采用哪种转发策略,所以就是采用了轮询策略。
但是要记住,如果某一个真实服务器挂掉了,负载均衡就会该该挂掉的服务器剔除,不进行请求的转发。
2、weight策略
即权重策略,weight默认权重为1,数字越大说明权重越大,也就是权重越大,被分配的客户端请求也就越多。
具体配置位置如下所示:
upstream haodaoserver {
server 192.168.3.199:8888 weight=3;
server 192.168.3.199:9999 weight=10;
}
3、ip_hash策略
即ip_hash策略,将每一个客户端请求按照访问IP的hash结果进行分配,这种情况下,每一个客户端就固定访问一个真实服务器,很好解决了session问题。
具体配置位置如下所示:
upstream haodaoserver {
ip_hash;
server 192.168.3.199:8888;
server 192.168.3.199:9999;
}
4、fair策略
该策略是根据真实服务器的响应时间来分配请求,哪个服务器响应时间短,就优先给它分配。
具体配置位置如下所示:
upstream haodaoserver {
server 192.168.3.199:8888;
server 192.168.3.199:9999;
fair;
}
结语
---
本文带大家实战了在nginx环境下,配置负载均衡的实验。负载均衡,在实际工作中是必不可少的,以上仅是针对其默认策略进行实验,大家感兴趣可以自己配置其它转发策略。