七层负载均衡,也被称为“内容交换”,指的是负载均衡设备通过报文中的应用层信息(URL、HTTP头部等信息)和负载均衡算法,选择到达目的的内部服务器。
1、抗负载能力强。抗负载能力强、性能高,能达到F5硬件的60%;对内存和cpu资源消耗比较低
2、工作在网络4层,通过vrrp协议转发(仅作分发之用),具体的流量由linux内核处理,因此没有流量的产生。
2、稳定性、可靠性好,自身有完美的热备方案;(如:LVS+Keepalived)
3、应用范围比较广,工作在四层,所以不用考虑要处理的具体应用,可以对所有应用做负载均衡;
4、不支持正则处理,不能做动静分离。
5、支持负载均衡算法:rr(轮循)、wrr(带权轮循)、lc(最小连接)、wlc(权重最小连接)
6、配置复杂,对网络依赖比较大,稳定性很高。
1、工作在网络的7层之上,可以针对http应用做一些分流的策略,比如针对域名、目录结构;
2、Nginx对网络的依赖比较小,理论上能ping通就就能进行负载功能;
3、Nginx安装和配置比较简单,测试起来比较方便;
4、也可以承担高的负载压力且稳定,一般能支撑超过1万次的并发;
5、对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测。
6、Nginx对请求的异步处理可以帮助节点服务器减轻负载;
7、Nginx仅能支持http、https和Email协议,适用范围较小。
8、不支持Session的直接保持,但能通过ip_hash来解决。
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、Ip-hash(Ip哈希)
10、Nginx还能做Web服务器即Cache功能。
1、支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
2、能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3、支持url检测后端的服务器出问题的检测会有很好的帮助。
4、更多的负载均衡策略比如:动态加权轮循(Dynamic Round Robin),加权源地址哈希(Weighted Source Hash),加权URL哈希和加权参数哈希(Weighted Parameter Hash)已经实现
5、单纯从效率上来讲HAProxy会比Nginx有更出色的负载均衡速度。
6、HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
9、支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
10、不能做Web服务器即Cache
虚拟机Server(CentOS 7系统)即作为nginx服务器又作为Tomcat服务器,适配两个网卡端口,外网IP:192.168.10.199,内网IP:192.168.163.200,客户端发来的请求首先经由nginx处理,如果为静态内容则直接由nginx响应,如果为动态内容,则由nignx反代至后端的Tomcat服务器组并做负载均衡.
proxy_pass属于ngx_http_proxy_module,次模块可以将请求发送到一台服务器上
proxy_pass放在location标签中,可使用http
# location /poy{
# proxy_pass http://10.0.0.90
# }
参数:
proxy_set_header,(当后端web服务器上有多个虚拟主机,需要使用header来区分代理的主机名)获取用户的主机名或者真是IP,以及代理者的IP地址
server {
listen 80
server_name www.linuea123.com
location / {
root html
index index.html index.htm
proxy_pass http://backend
proxy_set_header Host $host
}
获取用户的真是iP,截获客户请求地址(nginx开启即可,appche需要在LogFormat ""%{X-Forwareded-for}i\添加)
proxy_set_header Host $host
proxy_set_header X-Forwarded-For $remote_addr 获取用户的真是iP,截获客户请求地址
client_body_buffer_size:用于指导客户端请求主题缓冲区大小,用户访问先保存到本地在传递给用户
proxy_connect_timeout:表示与后端服务器连接的超时时间,既发起握手等待响应的超时时间
proxy_send_timeoit:表示后端服务数据返回最短时间,超过则断开
proxy_read_timeout:设置nginx从代理的后端服务器获取信息
proxy_buffer_size:设置缓存区大小,默认缓冲大小指令:proxy_buffers设置
# location /poy{
# proxy_pass http://10.0.0.90
# proxy_set_header Host $host
# }
proxy.conf如下:
proxy_redirect off
proxy_set_header Host $host
proxy_set_header X-Real-IP $remote_addr
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
proxy_connect_timeout 90
proxy_send_timeout 90
proxy_read_timeout 90
proxy_buffer_size 4k
proxy_buffers 4 32k
proxy_busy_buffers_size 64k
proxy_temp_file_write_size 64k
目录和扩展名分离测试(还有浏览器的分离):
upstream jingtai {
server 10.0.1.10:80 weight=5 max_fails=10 fail_timeout=10s
server 10.0.1.11:80 weight=5 max_fails=10 fail_timeout=10s
}
upstream dongtai {
server 10.0.2.10:80 weight=5 max_fails=10 fail_timeout=10s
server 10.0.2.11:80 weight=5 max_fails=10 fail_timeout=10s
}
server {
listen 80
server_name www.linuxea.com
location / {
root html
index index.html index.htm
proxy_pass http://dongtai
proxy_set_header Host $host
proxy_set_header X-Real-IP $remote_addr
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
proxy_connect_timeout 90
proxy_send_timeout 90
proxy_read_timeout 90
proxy_buffer_size 4k
proxy_buffers 4 32k
proxy_busy_buffers_size 64k
proxy_temp_file_write_size 64k
}
location /image/ {
proxy_pass http://jingtai
###################扩展名分离#######################
#location ~ .* (gif|jpg|jpeg|png|bmp|swf|css|js)$ {
# proxy_pass http://jingtai
# include proxy.conf
#}
#location ~ .*. (php|php3|php5.3)$ {
# proxy_pass httpd://jingtai
# include proxy.conf
#}
#################if#################################
#if($request_uri ~* ".*\.(jsp|jsp*|do|do*)$")
#{
# proxy_pas httpd://jingtai
#}
##################android&iphone####################
# listen 80
# server_name app.linuxea.com
# location / {
# if (http_user_agent ~* "android")
# {
# proxy_pass http://android
#}
# if (http_user_agent ~* "iphone")
#{
# proxu_pass http:/iphone
#}
# proxy_pass http://pc
# include proxy.conf
#}
###################proxy如下##########################
proxy_redirect off
proxy_set_header Host $host
proxy_set_header X-Real-IP $remote_addr
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
proxy_connect_timeout 90
proxy_send_timeout 90
proxy_read_timeout 90
proxy_buffer_size 4k
proxy_buffers 4 32k
proxy_busy_buffers_size 64k
proxy_temp_file_write_size 64k
}
location /dongtai/ {
proxy_pass http://dongtai
proxy_redirect off
proxy_set_header Host $host
p2roxy_set_header X-Real-IP $remote_addr
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
proxy_connect_timeout 90
proxy_send_timeout 90
proxy_read_timeout 90
proxy_buffer_size 4k
proxy_buffers 4 32k
proxy_busy_buffers_size 64k
proxy_temp_file_write_size 64k
}
}
proxy参数
proxy_set_header Host $host用户请求的header传递给后端访问
p2roxy_set_header X-Real-IP $remote_addr接收客户端ip,通过X-forwared给后端
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for
代理和web超时响应参数如下:
proxy_connect_timeout 60
proxy_send_timeout 30
proxy_read_timeout 30
内存和磁盘缓冲参数如下:
proxy_buffer_size 4k
proxy_buffers 4 32k
proxy_busy_buffers_size 64k
proxy_temp_file_write_size 64k
Linux的负载均衡常用的有三种技术:中国人搞出来的大神级产品 LVS Linux Virtual Server,俄罗斯的Nginx,来发法国的HAProxy。都是基于Linux的开源免费的负载均衡软件。
1. 抗负载能力强,性能高,能达到F5的60%,对内存和CPU资源消耗比较低
2. 工作在网络4层,通过VRRP协议(仅作代理之用),具体的流量是由linux内核来处理,因此没有流量的产生。
3. 稳定,可靠性高,自身有完美的热备方案(Keepalived+lvs)
4. 不支持正则处理,不能做动静分离。
5. 支持多种负载均衡算法:rr(轮询),wrr(带权轮询)、lc(最小连接)、wlc(带权最小连接)
6. 配置相对复杂,对网络依赖比较大,稳定性很高。
7. LVS工作模式有4种:
(1) nat 地址转换
(2) dr 直接路由
(3) tun 隧道
(4) full-nat
1. 工作在网络7层,可以针对http应用做一些分流的策略,比如针对域名,目录结构
2. Nginx对网络的依赖较小,理论上能ping通就能进行负载功能
3. Nginx安装配置比较简单,测试起来很方便
4. 也可以承担较高的负载压力且稳定,nginx是为解决c10k问题而诞生的
5. 对后端服务器的健康检查,只支持通过端口来检测,不支持通过url来检测
6. Nginx对请求的异步处理可以帮助节点服务器减轻负载压力
7. Nginx仅能支持http、https和Email协议,这样就在适用范围较小。
8. 不支持Session的直接保持,但能通过ip_hash来解决。对Big request header的支持不是很好。
9. Nginx还能做Web服务器即Cache功能。
1.支持两种代理模式:TCP(四层)和HTTP(七层),支持虚拟主机;
2.能够补充Nginx的一些缺点比如Session的保持,Cookie的引导等工作
3.支持url检测后端的服务器出问题的检测会有很好的帮助。
4.更多的负载均衡策略比如:动态加权轮循(DynamicRoundRobin),加权源地址哈希(Weighted SourceHash),加权URL哈希和加权参数哈希(WeightedParameterHash)已经实现
5.单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度。
6.HAProxy可以对Mysql进行负载均衡,对后端的DB节点进行检测和负载均衡。
7.支持负载均衡算法:Round-robin(轮循)、Weight-round-robin(带权轮循)、source(原地址保持)、RI(请求URL)、rdp-cookie(根据cookie)
8.不能做Web服务器即Cache。
1. 负载能力
lvs抗负载能力最强,因为仅作分发不处理请求,相当于只作转发不做进一步处理直接在内核中完成,对系统资源消耗低(LVS DR模式);
nginx和haproxy相对来说会弱,但是日PV2000万也没什么问题,因为不仅接受客户端请求,还与后端upstream节点进行请求并获取响应,再把响应返回给客户端,对系统资源和网络资源消耗高;
注:建议如果公司网站流量日PV在2000万以上,并发在7,8万以上才考虑用lvs+keepalived架构
2. 功能性
lvs仅支持4层tcp负载均衡,haproxy可以支持4层tcp和7层http负载均衡,nginx可以支持7层http负载均衡(新版本也支持7层负载均衡);
nginx功能强大,配置灵活,可做web静态站点,静态缓存加速,动静分离,并支持域名,正则表达式,Location匹配,rewrite跳转,配置简单直观明了,还可以结合etc或consule做发布自动化上下线等等;
haproxy相对nginx的7层负载均衡会弱一些,灵活性不足,个人建议一般用haproxy做TCP负载均衡更合适一些;
3. 运维复杂度
lvs相对来说部署架构更复杂一些,lvs对网络是有要求,lvs必须与real server在同一个网段,也更费资源,需要多2台服务器成本;
nginx和haproxy部署架构更简单,对网络也没要求,更便于后续维护;
像对于大型的,需要进行高并发的网站或者对网络不太严格的时候,可以使用nginx;
对于大型的Web服务器的时候可以使用haproxy;
对性能有严格要求的时候可以使用lvs,就单纯从负载均衡的角度来说,lvs也许会成为主流,更适合现在大型的互联网公司。
注:lvs,nginx,haproxy要实现高可用,都需要借助keepalived软件
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)