HAProxy调度、ACL控制和负载均衡以及LNMT实现动静分离

HAProxy调度、ACL控制和负载均衡以及LNMT实现动静分离,第1张

四层负载均衡指的是负载均衡设备通过报文中的目标IP地址和端口负载均衡算法,选择到达目的的内部服务器,其主要工作在OSI七层模型的第四层(传输层)。四层负载均衡对数据包只是起一个数据转发的作用,并不会干预客户端与服务器之间应用层的通信

七层负载均衡,也被称为“内容交换”,指的是负载均衡设备通过报文中的应用层信息(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软件


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/6247049.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-03-19
下一篇 2023-03-19

发表评论

登录后才能评论

评论列表(0条)

保存