nginx负载均衡

1.什么是负载均衡?
2.为什么需要使用负载均衡?
3.负载均衡实现的场景?
	四层负载均衡:   转发   改写数据包   源IP  源端口  目标IP  目标端口  真实的目标IP 目标端口
	七层负载均衡:   代理   代为办理
4.七层负载均衡与四层负载均衡区别?
	七层负载均衡效率没有四负载均衡高。
	四层负载均衡没有七层负载均衡支持的功能多,比如  url匹配  设置头部信息
	
	负载均衡是基于代理实现的一种形式
	
5.七层负载均衡配置示例?
[root@lb01 conf.d]# cat proxy_web.oldxu.com.conf 
upstream web {
	server 172.16.1.7:80;
	server 172.16.1.8:80;
}

server {
	listen 80;
	server_name web.oldxu.com;

	location / {
		proxy_pass http://web;
		include proxy_params;
	}
}


[root@lb01 conf.d]# cat /etc/nginx/proxy_params 
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;


#后端web配置 (为了区分,将两台web的站点配置的不一样,以便测试效果)
[root@web01 conf.d]# cat web.oldxu.com.conf 
server {
	listen 80;
	server_name web.oldxu.com;

	location / {
		root /html;
		index index.html;
	}
}

6.七层负载均衡整合集群架构示例
	blog
	zh
7.七层负载均衡调度算法、后端状态?
	1.负载均衡如何分配流量?
		1.强与弱
		2.平均
调度算法		概述
轮询			按时间顺序逐一分配到不同的后端服务器(默认)
机器的配置一致 				(web集群  硬件环境 一致)

weight
加权轮询,weight值越大,分配到的访问几率越高
机器硬件不一致的情况下使用  (硬件  pc机)

ip_hash		 每个请求按访问IP的hash结果分配,这样来自同一IP的固定访问一个后端服务器
解决问题:  	  能解决会话保持的问题	
带来新的问题:	 会造成后端负载不均衡

url_hash		按照访问URL的hash结果来分配请求,是每个URL定向到同一个后端服务器
least_conn		最少链接数,那个机器链接数少   就分发

7.七层负载均衡后端状态?
状态				   概述
down				当前的server暂时不参与负载均衡
backup				预留的备份服务器
max_fails			允许请求失败的次数
fail_timeout		经过max_fails失败后, 服务暂停时间
max_conns			限制最大的接收连接数

a	max_fails=2	fail_timeout=10s	运维
b	max_fails=2	fail_timeout=10s	运维
c	backup;		开发  运维
d	down;		离职
  • 企业案例
	使用nginx负载均衡时,如何将后端请求超时的服务器流量平滑的切换到另一台上。
	如果后台服务连接超时,Nginx是本身是有机制的,如果出现一个节点down掉的时候,,将请求转移到其他的节点上,但是,如果后台服务连接没有down掉,但是返回错误异常码了如:504、502、500,应该如何处理。
	可以在负载均衡添加如下配置proxy_next_upstream http_500 | http_502 | http_503 | http_504 |http_404;意思是,当其中一台返回错误码404,500...等错误时,可以分配到下一台服务器程序继续处理,提高平台访问成功率。
	
	
	nginx本身是有剔除机制,  指的是 后端的nginx没有正常工作
	proxy_next_upstream nginx是正常工作,只不过后端的php或者其他程序出现问题  502

server {
    listen 80;
    server_name xuliangwei.com;

    location / {
        proxy_pass http://node;
        proxy_next_upstream error timeout http_500 http_502 http_503 http_504;
    }
}


posted @   老王教你学Linux  阅读(104)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示