快速掌握Haproxy原理架构

文章目录

一、原理架构

四层tcp代理 :Haproxy仅在客户端和服务器之间双向转发流量,可用于邮件服务内部协议通信服务器、Mysql服务等;
七层应用代理 :Haproxy会分析应用层协议,并且能通过运行、拒绝、交换、增加、修改或者删除请求(request)或者回应(reponse)里指定内容来控制协议。可用于HTTP代理或https代理。

二、无负载均衡

简单的无负载均衡Web应用环境, 用户会直接接入Web服务器,即kevin.com且其中不存在负载均衡机制。如果单一Web服务器发生故障,用户将无法接入该服务器。另,若多位用户同时访问该服务器,且其无法处理该负载,则会出现响应缓慢或者无法接入的情况。

三、四层负载均衡的工作流程

  1. 客户机向负载均衡设备发送请求,源地址为客户机的IP地址,目的地址为整个集群的VIP地址
  2. 交换机转发客户机请求
  3. Lvs(可以是其他)负载均衡服务器利用自带的算法(rr 或者wlc)进行算法调度,将请求转发到后端的某一台真实的web服务器
  4. 请求报文的原地址仍然是客户机的IP地址,目的地址为集群的VIP地址,但Mac地址被LVS负载均衡服务器更改为后端的真实服务器MAC地址
  5. 后端的真实服务器发出相应,源地址为集群的VIP地址,目的地址为客户端IP地址,不通过LVS负载均衡服务器(报文仍然要经过交换机)直接与客户机发生联系,回应客户机发出的HTTP请求

四、七层负载均衡工作流程

  1. 客户机发出请求给负载均衡服务器,建立TCP连接,源地址为客户机IP地址,目的地址为集群的VIP地址
  2. Nginx(那Nginx举例)负载均衡设备利用自带的算法(wrr,ip_hash等)进行调度,建立TCP连接,将客户机的请求发送到后面的某一台真实的web服务器上面,此时源地址为客户机IP地址,目的地址为某一台真实服务器的IP地址
  3. Nginx负载均衡设备向后端的某台真实服务器发出请求
  4. 真实web服务器发出响应,此时源地址为真实服务器的IP地址,目的地址客户机的IP地址
  5. 报文经过Nginx七层负载均衡设备时,源地址被还原为集群VIP地址,目的地址为客户端IP地址
  6. 负载均衡服务器将结果发送给客户机

四层负载均衡设备的优势 面对大流量的冲击时,只是单方面经过四层设备,负担小,处理速度快,不容易成为网站或系统瓶颈。

七层负载均衡设备在分流的过程中能够对应用层协议进行深度识别,带来更精细划分,在加上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 管控台了。

相关推荐
致奋斗的我们1 个月前
HAProxy高级功能及配置
linux·数据库·mysql·青少年编程·负载均衡·web·haproxy
致奋斗的我们1 个月前
HAProxy介绍与编译安装
linux·汇编·数据库·mysql·青少年编程·haproxy·openeurler
_Eden_2 个月前
Haproxy介绍及学习
linux·学习·haproxy
景天科技苑2 个月前
【Prometheus】Prometheus如何监控Haproxy
prometheus·haproxy·监控haproxy·prometheus数据采集·haproxy告警文件编写
soragui3 个月前
【HAProxy】如何在Ubuntu下配置HAProxy服务器
linux·haproxy
童安格粉丝3 个月前
centos7使用haproxy+keepalived搭建负载均衡调度器--yum方式
运维·nginx·centos·负载均衡·keepalived·haproxy
运维&陈同学5 个月前
【HAProxy08】企业级反向代理HAProxy高级功能之自定义日志格式与IP透传
linux·运维·nginx·云原生·负载均衡·lvs·haproxy·反向代理
运维&陈同学5 个月前
【HAProxy06】企业级反向代理HAProxy调度算法之其他算法
运维·nginx·云计算·负载均衡·lvs·haproxy·反向代理
运维&陈同学5 个月前
【HAProxy05】企业级反向代理HAProxy调度算法之静态算法与动态算法
linux·运维·算法·nginx·云原生·负载均衡·lvs·haproxy