Nginx 负载均衡

发布于 2024-02-19 22:21:01 字数 3531 浏览 28 评论 0

作用于应用层(HTTP) 或者传输层(TCP)。

http {
	upstream backend {
		server 192.0.2.10;
		server 192.0.2.11;
	}
	server {
		listen 80;
		location / {
			proxy_pass  http://backend ;
		}
	}
}

默认为 round-robin 策略。

  • 负载局衡器的负载均衡--DNS
> dig A example.com
; <<>> DiG 9.7.3-P3 <<>> A example.com
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 287 IN A 208.0.113.36
example.com. 287 IN A 208.0.113.34
example.com. 287 IN A 208.0.113.38
  • 不同形式的 server
upstream backend {
	# IP Address with Port
	server 192.0.2.10:443;
	
	# Hostname
	server app1.example.com;
	
	# Unix Socket
	server unix:/u/apps/my_app/current/tmp/unicorn.sock
}

Health Checks

  • max_fails 最大失败次数
upstream backend {
	server app1.example.com max_fails=2;
	server app2.example.com max_fails=100;
}
  • fail_timeout 失败超时的时间
upstream backend {
	server app1.example.com max_fails=2 fail_timeout=5;
	server app2.example.com max_fails=100 fail_timeout=50;
}
  • proxy_next_upstream 控制导致请求失败的错误条件,并增加 max_fails 计数器。
location / {
	proxy_next_upstream http_502 http_503 http_504;
	proxy_pass  http://backend ;
}

移除不可用的服务实例

upstream backend {
	server app1.example.com;
	server app2.example.com down;
}

作用和注释掉这行没太大的区别。

Slow Start

upstream backend {
	server app1.example.com slow_start=60s;
	server app2.example.com;
}

dynamic DNS Resolution

http {
	resolver 8.8.8.8;
	upstream backend {
		server loadbalancer.east.elb.amazonaws.com resolve;
	}
}

负载均衡策略

  • Weighted Round Robin (Default)
  • Least Connections
  • IP Hash(sticky sessions) 如果增加或者删除 server 数量,该算法会失效。
    建议使用 down 标记删除的 server,但是增加 server 的话似乎没有解决方案,因为 hash 会变化。
  • Hash。可以对$uri 进行 hash

C10K 问题

1.提升 nginx 配置

worker_processes auto;
events {
	worker_connections 16384;
}
http {
	sendfile on;
	tcp_nopush on;
	keepalive_timeout 90;
	server {
		listen *:80 backlog=2048 reuseport;
		listen *:443 ssl backlog=2048 reuseport;
		ssl_session_cache shared:SSL:20m;
		ssl_session_timeout 10m;
		ssl_session_tickets on;
		ssl_stapling on;
		ssl_stapling_verify on;
		ssl_trusted_certificate /etc/nginx/cert/trustchain.crt;
		resolver 8.8.8.8 8.8.4.4 valid=300s;
	}
}

2.调整 linux 内核

nano /etc/sysctl.conf
# the size of the kernel queue for accepting new TCP connections
net.core.somaxconn=10000

TCP Load Balancing

stream {
	server {
		listen *:80;
		proxy_pass backend;
	}
	upstream backend {
		server app01;
		server app02;
		server app03;
	}
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

海之角

暂无简介

0 文章
0 评论
869 人气
更多

推荐作者

苍风燃霜

文章 0 评论 0

悸初

文章 0 评论 0

撧情箌佬

文章 0 评论 0

森罗

文章 0 评论 0

lyn1245

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文