高性能高可用方案Nginx (三)Upstream(负载均衡)

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介:

1、理论部分

1.1、nginx的负载均衡

nginx的负载均衡由upstream模块实现

1.2、nginx的模块

1.2.1、nginx的模块分类

nginx模块分为三大类:

1)handler

2)filter

3)upstream(上游)

1.2.2、模块的作用

handler&filter - 用于完成单机工作

upstream - 用于跨越单机限制,完成网络数据接收、处理和转发

1.2.3、upstream的意义

为nginx提供跨越单机的横向处理扩展能力,使nginx摆脱只能作为终端节点,而具备网络应用级别的拆分、封装和整合的战略功能。

1.3、upstream的使用方法

1.3.1、定义upstream组和调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
http {
   upstream myproject {
     server 127.0.0.1:8000 weight=3;
     server 127.0.0.1:8001;
     server 127.0.0.1:8002;
     server 127.0.0.1:8003;
   }
 
   server {
     listen 80;
     server_name www.domain.com;
     location / {
       proxy_pass http: //myproject ;
     }
   }
}

1.3.2、upstream的分配方式

1)round robin(默认)

轮询,每个请求按照时间顺序逐一分配,如果后端服务器宕机,会自动剔除。

2)weight

加权轮询,用于解决后端服务器性能不均的情况。

定义方法:

1
2
3
4
upstream cmdschoolSer {
server 10.168.0.185 weight=10;
server 10.168.0.186 weight=10;
}

3)ip_bash

每个请求按照访问ip的bash结果分配,故访客固定访问一个后端服务器,可以解决session长期保持问题。

定义方法:

1
2
3
4
5
upstream cmdschoolSer {
ip_hash;
server 10.168.0.185:8080;
server 10.168.0.186:8080;
}

4)fair(第三方)

按后端服务器的响应时间分配,响应时间短的优先分配。

定义方法:

1
2
3
4
5
upstream cmdschoolSer {
fair;
server 10.168.0.185:8080;
server 10.168.0.186:8080;
}

5)url_bash(第三方)

定义方法:

1
2
3
4
5
6
upstream cmdschoolSer {
server 10.168.0.185:8080;
server 10.168.0.186:8080;
hash  $request_uri;
hash_method crc32;
}

6)tips

1
2
3
4
5
6
7
upstream cmdschoolSer { #定义负载均衡设备的ip及设备状态
ip_hash;
server 10.168.0.185:8080 down;
server 10.168.0.185:8081 weight=2;
server 10.168.0.186:8080;
server 10.168.0.186:8081 backup;
}

1.3.3、设备的状态

1)down

表示当前server暂时不参与负载

2)weight

数值越大权重越大(默认1)

3)max_fails

允许请求失败的次数,超过失败次数,返回proxy_next_upstream模块定义的错误(默认1)

4)fail_timeout

max_fails次失败后,暂停的时间

5)backup

其他所有非backup机器down或者忙的时候,请求backup机器(压力最轻)

2、实验部分

2.1、实验信息

2.1.1、实验基础

你已经做完以下实验:

http://cmdschool.blog.51cto.com/2420395/1703299

2.1.2、主机信息

lbSer

ip address=10.168.0.183

hostname=lbSer


proxySer:

ip address=10.168.0.185

hostname=proxySer


tomcatSer:

ip address=10.168.0.188

hostname=tomcatSer


client:

ipaddress=10.168.0.8

hostname=client

2.1.3、yum包安装

In lbSer

1
2
yum -y  install  http: //nginx .org /packages/centos/6/noarch/RPMS/nginx-release-centos-6-0 .el6.ngx.noarch.rpm
yum -y  install  nginx

2.2、配置部分

In lbSer

2.2.1、step

vim编辑/etc/nginx/nginx.conf

将原来http{}部分删除,替换为如下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
http {
   upstream cmdschool {
     server 10.168.0.185:81;
     server 10.168.0.185:82;
   }
 
   server {
     listen 80;
     server_name www.cmdschool.org;
     location / {
       proxy_pass http: //cmdschool ;
     }
   }
}

2.2.2、step

启动服务并设置为开机启动

1
2
/etc/init .d /nginx  restart
chkconfig nginx on

2.2.3、step

vim编辑/etc/sysconfig/iptables

增加如下代码:

1
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

2.2.4、step

重启防火墙

1
  /etc/init .d /iptables  restart

In client

2.2.5、step

测试负载均衡

1
2
3
4
curl http: //10 .168.0.182
curl http: //10 .168.0.182
curl http: //10 .168.0.182
curl http: //10 .168.0.182

----------------------------------------------------------

理论部分参阅资料:

1)官方:

http://www.nginx.org

2)Tengine:

http://tengine.taobao.org


实验部分参阅资料:

1)Nginx官方下载路径:

http://nginx.org/en/download.html

2)Nginx+Tomcat负载均衡配置(Upstream模块)

https://www.nginx.com/resources/wiki/start/topics/examples/loadbalanceexample/

http://tengine.taobao.org/book/chapter_5.html

http://www.cnblogs.com/xiaogangqq123/archive/2011/03/04/1971002.html

http://onlyzq.blog.51cto.com/1228/557848/

http://developer.51cto.com/art/201407/446626.htm

http://www.myhack58.com/Article/sort099/sort0102/2011/31642.htm









本文转自 tanzhenchao 51CTO博客,原文链接:http://blog.51cto.com/cmdschool/1703509,如需转载请自行联系原作者

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
目录
相关文章
|
9月前
|
负载均衡 网络协议 算法
一文读懂什么是Nginx?它能否实现IM的负载均衡?
Nginx(及其衍生产品)是目前被大量使用的服务端反向代理和负载均衡方案,从某种意义上来讲,Nginx几乎是低成本、高负载Web服务端代名词。 如此深入人心的Nginx,很多人也想当然的认为,在IM或消息推送等场景下是否也能使用Nginx来解决负载均衡问题? 另外,即时通讯网的论坛和QQ群里也经常有人问起,Nginx是否能支持TCP、UDP、WebSocket的负载
262 4
|
负载均衡 算法 搜索推荐
Nginx 常用的负载均衡算法
【10月更文挑战第17天】在实际应用中,我们需要根据具体的情况来选择合适的负载均衡算法。同时,还可以结合其他的优化措施,如服务器健康检查、动态调整权重等,来进一步提高负载均衡的效果和系统的稳定性。
364 59
|
负载均衡 算法 安全
slb高性能
【11月更文挑战第4天】
173 3
|
6月前
|
负载均衡 前端开发 应用服务中间件
Tomcat的负载均衡和动静分离(与nginx联动)
总的来说,负载均衡和动静分离是提高Web应用性能的两个重要手段。通过合理的配置和使用,我们可以让Web应用更好地服务于用户。
213 21
|
6月前
|
负载均衡 Java 应用服务中间件
Tomcat与Nginx的负载均衡与动静分离技巧
总的来说,Tomcat和Nginx各有各的优点,在负载均衡和动静分离这两方面它们都有很好的应用。灵活使用这两个工具能够让Web应用具有更好的扩展性和用户体验。
198 14
|
6月前
|
负载均衡 前端开发 JavaScript
LVS-DR模式、keepalived、Nginx与Tomcat合作,打造动静分离,高效负载均衡与高可用性
为了采用这样的架构,你需要对LVS-DR、Keepalived、Nginx与Tomcat有一定的理解和掌握,同时也需要投入一些时间去研究和配置,但是一旦你把它运行起来,你将会发现,这一切都是值得的。
270 11
|
8月前
|
负载均衡 算法 应用服务中间件
Nginx长连接负载均衡详细说明以及案例
本文详细介绍了Nginx长连接负载均衡的配置与原理。长连接(Keepalive)允许客户端和服务器保持连接,减少建立和关闭连接的开销。Nginx支持多种负载均衡算法,如轮询、IP哈希等。通过在Nginx配置文件中使用`upstream`模块和`keepalive`指令,可以实现长连接负载均衡,从而提高系统的性能和响应速度。示例配置展示了如何设置后端服务器组、长连接数及HTTP/1.1协议,确保连接复用,降低延迟。
517 5
|
8月前
|
负载均衡 应用服务中间件 nginx
如何使用nginx实现负载均衡?
如何使用nginx实现负载均衡?
|
负载均衡 监控 应用服务中间件
除了 Nginx,还有以下一些常见的负载均衡工具
【10月更文挑战第17天】这些负载均衡工具各有特点和优势,在不同的应用场景中发挥着重要作用。选择合适的负载均衡工具需要综合考虑性能、功能、稳定性、成本等因素。
1883 56