快速掌握Haproxy原理架构
文章目录
- 一、原理架构
- 二、无负载均衡
- 三、四层负载均衡的工作流程
- 四、七层负载均衡工作流程
- 五、基础属性
- mode 属性
- retries 属性
- maxconn 属性
- clitimeout 属性
- servtimeout 属性
- states uri 属性
一、原理架构
四层tcp代理:Haproxy仅在客户端和服务器之间双向转发流量,可用于邮件服务内部协议通信服务器、Mysql服务等;
七层应用代理:Haproxy会分析应用层协议,并且能通过运行、拒绝、交换、增加、修改或者删除请求(request)或者回应(reponse)里指定内容来控制协议。可用于HTTP代理或https代理。
二、无负载均衡
简单的无负载均衡Web应用环境, 用户会直接接入Web服务器,即kevin.com且其中不存在负载均衡机制。如果单一Web服务器发生故障,用户将无法接入该服务器。另,若多位用户同时访问该服务器,且其无法处理该负载,则会出现响应缓慢或者无法接入的情况。
三、四层负载均衡的工作流程
- 客户机向负载均衡设备发送请求,源地址为客户机的IP地址,目的地址为整个集群的VIP地址
- 交换机转发客户机请求
- Lvs(可以是其他)负载均衡服务器利用自带的算法(rr 或者wlc)进行算法调度,将请求转发到后端的某一台真实的web服务器
- 请求报文的原地址仍然是客户机的IP地址,目的地址为集群的VIP地址,但Mac地址被LVS负载均衡服务器更改为后端的真实服务器MAC地址
- 后端的真实服务器发出相应,源地址为集群的VIP地址,目的地址为客户端IP地址,不通过LVS负载均衡服务器(报文仍然要经过交换机)直接与客户机发生联系,回应客户机发出的HTTP请求
四、七层负载均衡工作流程
- 客户机发出请求给负载均衡服务器,建立TCP连接,源地址为客户机IP地址,目的地址为集群的VIP地址
- Nginx(那Nginx举例)负载均衡设备利用自带的算法(wrr,ip_hash等)进行调度,建立TCP连接,将客户机的请求发送到后面的某一台真实的web服务器上面,此时源地址为客户机IP地址,目的地址为某一台真实服务器的IP地址
- Nginx负载均衡设备向后端的某台真实服务器发出请求
- 真实web服务器发出响应,此时源地址为真实服务器的IP地址,目的地址客户机的IP地址
- 报文经过Nginx七层负载均衡设备时,源地址被还原为集群VIP地址,目的地址为客户端IP地址
- 负载均衡服务器将结果发送给客户机
四层负载均衡设备的优势 面对大流量的冲击时,只是单方面经过四层设备,负担小,处理速度快,不容易成为网站或系统瓶颈。
七层负载均衡设备在分流的过程中能够对应用层协议进行深度识别,带来更精细划分,在加上HTTP协议,实现的功能会更多。四层负载均衡无法对七层业务实现按内容转发,限制了适用范围。
五、基础属性
要想在集群中使用 HaProxy 组件,就需要在将 HaProxy 组件安装完毕后,根据实际的业务场景去配置我们的 HaProxy 组件,以更好地服务于我们的集群环境。
那么,配置 HaProxy 都有哪些基础属性呢,下面就让我们来看一些在 HaProxy 组件中,最基础的配置属性。
mode 属性
该属性同时位于 defaults 配置项和 listen_rabbitmq_cluster 配置项下,其主要作用是用来声明我们当前 RabbitMQ 集群节点中,HaProxy 所采用的代理模式,我们可以根据我们的实际业务需要来选择采用哪种代理模式,支持采用 tcp 或 http 协议的代理模式。
retries 属性
该属性位于 defaults 配置项下,其主要作用是用来声明,RabbitMQ 集群中,HaProxy 在集群间通信的一个尝试次数,如果超过这个尝试次数,集群的某一节点没有返回响应,那么,HaProxy 就会认为该节点不可用。
maxconn 属性
该属性位于 defaults 配置项下,其主要作用是用来声明,当前节点中所允许接入到 HaProxy 中的最大连接数,这个最大连接数应该根据实际的业务场景去设置,不能设置的过大或过小,一般都被设置为 2000 。
clitimeout 属性
该属性位于 defaults 配置项下,其主要作用是用来声明,当前节点中客户端的一个空闲时间,单位为秒,如果客户端的空闲时间超过了这一约束,则 HaProxy 就会发起重连机制,重新连接集群各节点。
servtimeout 属性
该属性位于 defaults 配置项下,其主要作用是用来声明,当前节点所在服务器的一个连接超时时间,单位也为秒,如果我们连接服务器所消耗的时间超过了这一限制,那么 HaProxy 也会发起重连机制,重新连接集群各节点。
states uri 属性
该属性位于 listen stats 配置项下,其主要用来声明,在 HaProxy 组件中提供的集群监控 web 管控台的一个地址,往往会集合位于同一配置项下的 bind 属性来一起使用,通过bind 绑定访问 ip 和端口号,通过 states uri 来绑定访问路径,这样我们就可以使用这个地址来访问 HaProxy 提供的集群 web 管控台了。