首页 > Linux操作系统 > Linux操作系统 > 使用nginx进行负载均衡
我使用了三台 VPS 服务器,同一网段的,用来搭建网站,推荐你们也可以使用 3A 服务器
1. nginx 负载均衡介绍
nginx 应用场景之一就是负载均衡。在访问量较多的时候,可以通过负载均衡,将多个请求分摊到多台服务器上,相当于把一台服务器需要承担的负载量交给多台服务器处理,进而提高系统的吞吐率;另外如果其中某一台服务器挂掉,其他服务器还可以正常提供服务,以此来提高系统的可伸缩性与可靠性。
下图为负载均衡示例图,当用户请求发送后,首先发送到负载均衡服务器,而后由负载均衡服务器根据配置规则将请求转发到不同的web 服务器上。

2. nginx 负载均衡策略
以下截图为nginx 官网文档

nginx 内置负载均衡策略主要分为三大类,分别是轮询、最少连接和 ip hash
最少连接
请求分配给活动连接数最少的服务器,哪台服务器连接数最少,则把请求交给哪台服务器,由nginx 统计服务器连接数
ip hash
基于客户端ip 的分配
2.1 轮询
以循环方式分发对应用服务器的请求,将请求平均分发到每台服务器上。
2.1.1 普通轮询方式
该方式是默认方式,轮询适合服务器配置相当,无状态且短平快的服务使用。另外在轮询中,如果服务器挂掉,会自动剔除该服务器。
http {
# 定义转发分配规则
upstream myapp1 {
server srv1.com; # 要转发到的服务器,如ip、ip:端口号、域名、域名:端口号
server srv2.com:8088;
server 192.168.0.100:8088;
}
server {
listen 80; # nginx监听的端口
location / {
# 使用myapp1分配规则,即刚自定义添加的upstream节点
# 将所有请求转发到myapp1服务器组中配置的某一台服务器上
proxy_pass http://myapp1;
}
}
}
2.1.2 权重轮询方式
如果在 upstream 中配置的 server 参数后追加 weight 配置,则会根据配置的权重进行请求分发。此策略可以与 least_conn 和 ip_hash 结合使用,适合服务器的硬件配置差别比较大的情况。
# 定义转发分配规则
upstream myapp1 {
server srv1.com weight=1; # 该台服务器接受1/6的请求量
server srv2.com:8088 weight=2; # 该台服务器接受2/6的请求量
server 192.168.0.100:8088 weight=3; # 该台服务器接受3/6的请求量;
}
2.2 最少连接
轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn 这种方式就可以达到更好的负载均衡效果,适合请求处理时间长短不一造成服务器过载的情况。
# 定义转发分配规则
upstream myapp1 {
least_conn; # 把请求分派给连接数最少的服务器
server srv1.com;
server srv2.com:8088;
server 192.168.0.100:8088;
}
2.3 ip hash
这个方法确保了相同的客户端的请求一直发送到相同的服务器,这样每个访客都固定访问一个后端服务器。如用户需要分片上传文件到服务器下,然后再由服务器将分片合并,这时如果用户的请求到达了不同的服务器,那么分片将存储于不同的服务器目录中,导致无法将分片合并,该场景则需要使用ip hash 策略。
需要注意的是,ip_hash 不能与 backup 同时使用,另外当有服务器需要剔除,必须手动 down 掉,此模式适合有状态服务,比如 session 。
# 定义转发分配规则
upstream myapp1 {
ip_hash; # #保证每个请求固定访问一个后端服务器
server srv1.com;
server srv2.com:8088;
server 192.168.0.100:8088;
}
3. nginx 负载均衡搭建示例
该示例使用一台nginx 作为负载均衡服务器,两台 tomcat 作为 web 服务器;可以把三个服务均在一台机器进行搭建,也可以使用虚拟机虚拟三台机器,然后进行测试。教程这里就只在一台机器进行搭建,采用默认的权重方式进行配置。
3.1 tomcat 配置
将两台tomcat 解压出来,配置完毕相应的端口,然后在 webapps 目录下创建 test 目录,然后在 test 目录中创建 index.html 文件,随便写入一些内容,两台 tomcat 中 test 目录下的 index.html 文件内容要区分开来,例如写入 1111111 / 222222222 ,如下图所示。


3.2 nginx 配置
首先进行nginx 的安装,安装教程可以参考
https://blog.csdn.net/guo_ridgepole/article/details/124438127
安装完毕后,进入nginx 目录下的 conf 目录,编辑 nginx.conf 文件,修改内容为在 http 节点下增加
upstream tomcat { # 该部分内容与 server 节点同级
server tomcat服务的ip:tomcat服务的端口号;
server tomcat服务的ip:tomcat服务的端口号;
}
server 节点下的 location / 节点中,把默认的
location / {
root html;
index index.html index.htm;
}
修改为
location / {
proxy_pass http://tomcat;
}
然后启动 两台tomcat 与 nginx 服务,在浏览器输入 nginx 服务的地址 : 端口,不停刷新页面,就可以看到每次请求的服务器发生了改变。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70022313/viewspace-2917232/ ,如需转载,请注明出处,否则将追究法律责任。