Nginx实现七层负载均衡
为什么要使用负载均衡
1.解决web服务器单点故障,让web服务器做成一个集群
2.将请求平均下发给后端的web服务器
LB :Load Balance
SLB : Server Load Balance
阿里云 :SLB
腾讯云 :CLB
ucloud :ULB
AWS :ELB
软件
-nginx
-HAproxy
-LVS
硬件
-F5
四层负载均衡和七层负载均衡的区别
1.一个是四层(传输层),一个是七层(应用层)
2.四层传输速度要比七层块
3.四层无法识别域名,七层可以识别域名
负载均衡实现场景
Nginx要实现负载均衡要用到proxy_pass代理模块配置。
Nginx负载均衡与Nginx代理不同地方在于,nginx的一个location仅能代理一台服务器,而nginx负载均衡则是将客户端请求代理转发至一组upstream虚拟服务池。
负载均衡配置语法
Syntax: upstream name { ... }
Default: —
Context: http
uostream backend {
server xxx;
server xxx;
}
官方案例配置
模块名 后端主机池:(根据域名来取名)
upstream backend {
server backend1.example.com weight=5;
server backend2.example.com:8080;
server unix:/tmp/backend3;
server backup1.example.com:8080 backup;
server backup2.example.com:8080 backup;
}
server {
location / {
proxy_pass http://backend;
}
}
配置负载均衡
环境准备
主机名
WanIP
LanIP
角色
应用
lb01
10.0.0.5
172.16.1.5
负载均衡
nginx
web01
10.0.0.7
172.16.1.7
web网站
nginx、php
web02
10.0.0.8
172.16.1.8
web网站
nginx、php
编辑nginx配置文件
[root@web01 conf.d]
server{
listen 888;
server_name lb.zh.com;
root /code/lb;
index index.html;
}
server{
listen 888;
server_name lb.zh.com;
root /code/lb;
index index.html;
}
[root@web01 conf.d]
[root@web02 conf.d]
[root@web02 conf.d]
[root@web01 conf.d]
配置负载均衡
[root@ib01 conf.d]
upstream lb.zh.com {
server 172.16.1.7:888;
server 172.16.1.8:888;
}
server{
listen 80;
server_name lb.zh.com;
location /{
proxy_pass http://lb.zh.com;
}
}
负载均衡常见典型故障
如果后台服务器连接超时,nginx是本身有机制的,如果出现一个节点down掉的时候,Nginx是会根据你具体负载均衡的设置,将请求转移到其他的节点上,但是,如果后台服务器连接没有down掉,但是返回错误异常错误码,这个时候你需要加一个负载均衡的设置,如下:proxy_next_upstream http_500 | http_502 | http_503 | http_504 |http_404;意思是,当其中一台返回错误码时,可以分配到下一台服务器程序继续处理,提高平台访问成功率
upstream lb.zh.com {
server 172.16.1.7:888;
server 172.16.1.8:888;
}
server{
listen 80;
server_name lb.zh.com;
location /{
proxy_pass http://lb.zh.com;
proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
}
}
负载均衡调度算法
调度算法
概述
轮询(rr)
nginx做负载均衡默认使用轮询的调度算法:将请求下发到后端的web服务器
加权轮询(wrr)
增减权重,根据服务器的配置,给轮询加上权重
源Ip(ip_hash)
根据用户的ip,将同一ip地址的请求下发到同一台服务器上
源url(url_hash)
根据用户访问的URL,将同一URL的请求下发到同一台服务器上
最小连接数(least_conn)
哪台服务器的连接数最少,就将请求下发到该服务器上
调度算法配置文件
upstream lb.zh.com {
server 172.16.1.7:888 weight=5;
server 172.16.1.8:888;
}
upstream lb.zh.com {
ip_hash;
server 172.16.1.7:888;
server 172.16.1.8:888;
}
负载均衡后端配置
upstream lb.zh.com {
server 172.16.1.7:888 down;
server 172.16.1.8:888;
}
upstream lb.zh.com {
server 172.16.1.7:888 backup;
server 172.16.1.8:888;
}
max_fails :负载均衡访问后端,最大错误数,到该指定次数后,不在给该服务器发送请求
fail_timeout :配合max_fails使用,规定不发请求的时间段
upstream lb.zh.com {
server 172.16.1.7:888 max_fails=3 fail_timeout=10s;
server 172.16.1.8:888 max_faols=3 fail_timeout=10s;
}
upstream lb.zh.com {
server 172.16.1.7:888 max_fails=3 fail_timeout=10s max_conns=100;
server 172.16.1.8:888 max_faols=3 fail_timeout=10s;
}
nginx负载均衡健康检查模块
[root@ib01 nginx-1.22.0]
[root@ib01 ~]
[root@ib01 opt]
[root@ib01 opt]
[root@ib01 opt]
[root@ib01 opt]
[root@ib01 opt]
[root@ib01 opt]
[root@ib01 opt]
[root@ib01 opt]
[root@ib01 opt]
[root@ib01 app]
include /app/nginx-1.22.0/conf/conf.d/*.conf;
[root@ib01 app]
upstream lb.zh.com {
server 172.16.1.7:888 max_fails=3 fail_timeout=10s max_conns=100;
server 172.16.1.8:888 max_fails=3 fail_timeout=10s;
check interval=3000 rise=2 fall=3 timeout =1000 type =tcp;
}
server{
listen 80;
server_name lb.zh.com;
location /{
proxy_pass http://lb.zh.com;
}
location /ooo{
check_status;
}
}
[root@ib01 app]
[root@ib01 app]
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)