我们日常中最常见的三种nginx的负载均衡策略应当为(轮询、权重、ip绑定),这其中的区别体现在upstream代码块中,以下是upstream代码块示例(轮询)。

upstream alias {
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
}

upstream代码块中可以填服务部署的服务器列表,upstream后面的名称是自己填写,我个人倾向于称它为服务器别名,命名好之后可以直接在server代码块中调用。

轮询

顾名思义,轮询就是将请求轮流转发给所有的服务器。

upstream alias {
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
}
server {
	listen       80;
	server_name  localhost;
	location / {
		proxy_pass http://alias;
	}
}

如上述代码所示,nginx要将请求转发至 127.0.0.1的8080和8081端口,第一次nginx随机选择一台服务器发送请求,第二次就会选择另外一台。ABABAB,如此循环。服务器性能服务相同时,通常都是采用此策略。

权重

将请求按照一定的比例转发给不同的服务器。

upstream alias {
	server 127.0.0.1:8080 weight=3;
	server 127.0.0.1:8081 weight=2;
}
server {
	listen       80;
	server_name  localhost;
	location / {
		proxy_pass http://alias;
	}
}

上述代码中,我们设置的权重是3和2,也就代表着请求将会以 3:2 的比例转发给两台服务器。值得一提的是,nginx的权重机制属于轮询权重,也就是先给A发3次请求,然后给B发2次请求。适用于性能不同的服务器,如A服务器性能较强,或者开启的服务较少,则可以将更多的请求转发给A服务器。

ip绑定

顾名思义,就是将请求方的ip和服务器进行绑定。

upstream alias {
	server 127.0.0.1:8080;
	server 127.0.0.1:8081;
	ip_hash;
}
server {
	listen       80;
	server_name  localhost;
	location / {
		proxy_pass http://alias;
	}
}

在upstream代码块里加上 ip_hash; 代码,即代表使用ip绑定策略。举个例子,当用户使用某一ip访问服务器,nginx将请求转发至8080,则代表该请求ip的后续所有请求都将会被转发至8080服务进行处理。
这种策略多用于带会话请求的场景,如用户的登录信息保存在session当中,如果换服务器则拿不到对应的session,会需要重新登录,使用ip_hash能保证用户请求的时同一台服务器。

总结:nginx的上述三种策略基本可以满足绝大部分应用场景,还有一些扩展的策略需要引入三方的一些类似于插件的东西,此处就不一一赘述。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐