Nginx HTTP 负载均衡
一、负载均衡
负载均衡是由多台服务器以对称的方式组成一个服务器稽核,每台服务器都具有等价的地位,都可以对外提供服务而无须其他服务器的辅助。通过某种负载分担技术,将外部发送过来的请求均匀分配到对此结构中的某一台服务器上,而接收到请求的服务器独立的回应客户的请求。负载均衡能够平均分配客户请求到服务器阵列,借此快速获取重要数据,解决大量并发访问的服务器问题。这种集群技术可以用较少的投资获取大型主机的性能。
二、反向代理
反向代理是指以代理服务器来接收InterNet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回Internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。
通常的代理服务器只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中。当一个代理服务器能够代理外部网络上的主机访问内部网络是,这种代理服务的方式称为反向代理服务。
三、常见的WEB负载均衡方法
1. 用户手工选择方式
在页面中提供不同线路、不同服务器的按钮,让用户自行选择来点击对应的按钮来实现负载均衡
2. DNS轮询方式
DNS负载均衡采用的是简单的轮询算法,不能区分服务器的差异,不能反映服务器当前的运行状态,不能做到为性能较好的服务器多分配请求,甚至会出现客户请求集中在某一台服务器上的情况
3. 四/七层负载均衡设备
3.1 硬件四/七层负载均衡交换机
3.2 软件四层负载均衡
3.3 软件七层负载均衡
软件七层负载均衡大多基于HTTP反向代理方式,代表产品由Nginx等。
四、Nginx的负载均衡
1. 轮询模式
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除
upstream shopb-tomcat7 {
server 172.21.4.126:2002;
server 172.21.4.126:2003;
}
2. 加权轮询:Weight模式
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况
upstream shopb-tomcat7 {
server 172.21.4.126:2002 weight=3;
server 172.21.4.126:2003 weight=2;
}
3. ip hash模式
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题
upstream shopb-tomcat7 {
ip_hash;
server 172.21.4.126:2000;
server 172.21.4.127:2000;
}
ip_hash是有缺陷的,在一些情况下不可使用
1) nginx部署最前端的服务器
2) nginx还使用了其他方式的负载均衡
3) 不适合CDN网络,不适合前端还有代理的情况
4. Fair模式(第三方插件)
Fair模式比上面的负载均衡算法更加智能,这种算法可以一句页面大小和加载时间长短智能的进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。
Nginx本身是不支持fair的,需要下载Nginx的upstream_fair模块
upstream shopb-tomcat7 {
server 172.21.4.126:2000;
server 172.21.4.127:2000;
fair;
}
5. cookie sticky模式(第三方插件)
使用sticky_cookie_insert启用会话亲缘关系,这会导致来自同一客户端的请求被传递到一组服务器的同一台服务器,与ip_hash的不同是,它是基于cookie来判断的。
upstream shopb-tomcat7 {
server 172.21.4.126:2000;
server 172.21.4.126:2001;
sticky expires=1s domain=172.21.4.126 path=/;
}
语法: expires:设置浏览器中保持cookie的时间
domain:定义cookie的域
path:为cookie定义路径