Nginx从入门到实战(六):负载均衡

一、简单示例

1.准备2台tomcat服务器,端口分别为8087,8088。在其中webapps下新建fzjh目录,里面存放index.html(内容分别为"fzjh 8087!"和“fzjh 8088!”)用于测试。

2.配置nginx负载均衡

# 配置要负载的真实服务器列表
upstream myFzjh {
	server 192.168.1.117:8087;
	server 192.168.1.117:8088;
}
server {
	listen       80;
	server_name  192.168.1.117;

location / {
	# 统一代理入口
    proxy_pass http://myFzjh;
    root   html;
    index  index.html index.htm;
}
...其余省略...

3.重启nginx,查看效果如下:
Nginx从入门到实战(六):负载均衡_第1张图片

二、多种策略

1.轮询(默认)

上述示例其实就是默认配置,8087和8088两台服务器按顺序依次循环执行,多台类似。每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器 down 掉,能自动剔除

2.权重(weight)

weight 代表权重,默认为 1(1的话和轮询的效果一致),权重越高被分配的客户端越多

指定轮询几率,weight 和访问比率成正比,用于后端服务器性能不均的情况。

注意:配置1,2和配置2,4的效果是一样的。访问几率的计算方式是:某一台的访问几率 = 该台权重值/总权重值。

配置方式如下:

# 配置要负载的真实服务器列表
upstream myFzjh {
	server 192.168.1.117:8087 weight=1;
	server 192.168.1.117:8088 weight=3;
}
server {
	listen       80;
	server_name  192.168.1.117;

location / {
	# 统一代理入口
    proxy_pass http://myFzjh;
    root   html;
    index  index.html index.htm;
}
...其余省略...

执行效果就是执行8087一次,执行8088三次,再执行8087一次,执行8088三次,以此类推。效果如下:

在这里插入图片描述

3.ip_hash

hash算法地址:https://www.linuxidc.com/Linux/2014-02/96869.htm

每个请求按访问ip 的 hash 结果分配,这样每个访客固定访问一个后端服务器,

优点:可以解决session 的一致性问题。例如:

Ip_hash机制缺陷:

(1).nginx不是最前端的服务器

ip_hash要求nginx一定是最前端的服务器,否则nginx得不到正确ip,就不能根据ip作hash. Eg: 使用的是squid为最前端.那么nginx取ip时只能得到squid的服务器ip地址,用这个地址来作分流肯定是错乱的

(2).nginx的后端还有其它负载均衡

假如nginx后端还有其它负载均衡,将请求又通过另外的方式分流了,那么某个客户端的请求肯定不能定位到同一台session应用服务器上,这么算起来,nginx后端只能直接指向应用服务器,或者再搭一人squid,然后指向应用服务器. 最好 的办法是用location作一次分流,将需要session的部分请求通过ip_hash分流,剩下的走其它后端去.

# 配置要负载的真实服务器列表
upstream myFzjh {
	# 一般放到列表最面
	ip_hash;
	server 192.168.1.117:8087 weight=1;
	server 192.168.1.117:8088 weight=2;
}
server {
	listen       80;
	server_name  192.168.1.117;

location / {
	# 统一代理入口
    proxy_pass http://myFzjh;
    root   html;
    index  index.html index.htm;
}
...其余省略...

4.fair

fair是一个第三方的策略,按后端服务器的响应时间来分配请求,响应时间短的优先分配。

如:

# 配置要负载的真实服务器列表
upstream myFzjh {
	server 192.168.1.117:8087 weight=1;
	server 192.168.1.117:8088 weight=2;
	# 一般放到列表最后面
	fair;
}
server {
	listen       80;
	server_name  192.168.1.117;

location / {
	# 统一代理入口
    proxy_pass http://myFzjh;
    root   html;
    index  index.html index.htm;
}
...其余省略...

5.url_hash

是一个第三方的策略,具体可以参考官网的说明:https://docs.nginx.com/nginx/admin-guide/load-balancer/http-load-balancer/

END

你可能感兴趣的:(nginx,负载均衡,轮询,权重,fair+ip_hash)