调度算法及状态页
HAProxy调度算法
HAProxy 静态调度算法
balance: 指明对后端服务器的调度算法,配置在listen或backend
静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、链接数和相应速度等,且无法实时修改权重,只能重启后生效。
static-rr:基于权重的轮询调度,不支持权重的运行时调整及后端服务器慢启动,其后端主机数量没有限制
first:根据服务器在列表中的位置,自上而下进行调度,但是其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务,因此会忽略服务器的权重设置
HAProxy 动态调度算法
动态算法:基于后端服务器 状态进行调度适当调整,比如优先调度至当前负载较低的服务器,且权重可以在haproxy运行时动态调整无需重启。
- roundrobin:基于权重的轮询动态调度算法,支持权重的运行时调整,不等于lvs 的rr,支持慢启动即新加的服务器会逐渐增加转发数,每个后端backend中最多支持4095个server,此为默认调度算法,server 权重设置 weight
- leastconn: 加权的最少连接的动态,支持权重的运行时调整和慢启动,即当前后端服务器连接最少的优先调度,比较适合长连接的场景使用,比如MySQL等场景
source
source:源地址hash,基于用户源地址hash并将请求转发到后端服务器,默认为静态即取模方式,但是可以通过hash-type支持的选项更改,后续同一个源地址请求将被转发至同一个后端web服务器,比较适用于session保持等场景。
- map-based:取模法,基于服务器权重的hash数组取模,该hash是静态的即不支持在线调整权重,不支持慢启动,其对后端服务器调度均衡,缺点是当服务器的总权重发生变化时,即有服务器上线或下线,都会因权重发生变化而导致调度结果整体改变。
- consistent:一致性哈希,该hash是动态的,支持在线调整权重,支持慢启动,优点在于当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动,该算法很容易导致后端服务器负载不均衡,但是比较适合session保持
一致性hash算法
所谓取模运算,就是计算两个数相除之后的余数,10%7=3, 7%4=3
uri
基于对用户请求的uri做hash并将请求转发到后端指定服务器
map-based:取模法
consistent:一致性哈希
uri: uniform resource identifier,统一资源标识符,是一个用于标识某一互联网资源名称的字符串
url_param
对用户请求的url中的
<params>部分中的参数name作hash计算,并由服务器总权重相除以后派发至某挑出的服务器;通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个Backend Serverhdr
hdr(<name>):针对用户每个http头部(header)请求中的指定信息做hash,此处由<name>指定的http首部将会被取出并做hash计算,然后由服务器总权重相除以后派发至某挑出的服务器,假如无有效的值,则会被轮询调度
hdr( Cookie、 User-Agent、host )rdp-cookie
rdp-cookie对远程桌面的负载,使用cookie保持会话
rdp-cookie(<name>)算法小结
roundrobin——–>tcp/http 动态
leastconn———–>tcp/http 动态
static-rr————–>tcp/http 静态
first——————–>tcp/http 静态
- 取决于hash\_type是否consistent source—————->tcp/http Uri———————->http url\_param———->http hdr———————>http rdp-cookie———>tcp
四层与七层的区别
在四层负载设备中,把client发送的报文目标地址(原来是负载均衡设备的IP地址),根据均衡设备设置的选择web服务器的规则选择对应的web服务器IP地址,这样client就可以直接跟此服务器建立TCP连接并发送数据
七层负载均衡服务器起了一个代理服务器的作用,服务器建立一次TCP连接要三次握手,而client要访问webserver要先与七层负载设备进行三次握手后建立TCP连接,把要访问的报文信息发送给七层负载均衡;然后七层负载均衡再根据设置的均衡规则选择特定的webserver,然后通过三次握手与此台webserver建立TCP连接,然后webserver把需要的数据发送给七层负载均衡设备,负载均衡设备再把数据发送给client;所以,七层负载均衡设备起到了代理服务器的作用
七层IP 透传
四层IP 透传
Cookie 配置
示例
配置HAProxy状态页
配置
说明
stats enable
stats hide-version
stats refresh <delay>stats uri <prefix>stats realm <realm>stats auth <user>:<passwd>\`stats admin { if
小结
1、了解调度算法,HTTP推荐使用浏览器cookie的方式,既保留session又能负载均衡
2、四层与七层IP透传的区别,使用变量传递,在日志中显示
3、haproxy状态页,可管理/查看后端服务
Loading...
keepalived