负载均衡haproxy

  • 程序环境:
    主程序:/usr/sbin/haproxy
    配置文件:/etc/haproxy/haproxy.cfg
    Unit file:/usr/lib/systemd/system/haproxy.service

  • 配置段:
    global:全局配置段
    进程及安全配置相关的参数
    性能调整相关参数
    Debug参数

  • proxies:代理配置段
    defaults:为frontend, backend, listen提供默认配置
    frontend:前端,相当于nginx中的server {}
    backend:后端,相当于nginx中的upstream {}
    listen:同时拥有前端和后端配置

haproxy反向代理后端服务器httpd

1)修改haproxy配置文件,启动

[root@Centos7 ~]#vim /etc/haproxy/haproxy.cfg 

listen web
  mode tcp
  bind 192.168.8.101:80
  server web1 192.168.8.103:80 check
  server web2 192.168.8.104:80 check

启动

[root@haproxy ~]#systemctl start haproxy

2)安装httpd,启动

[root@centos ~]#yum install httpd -y

[root@centos ~]#systemctl start httpd

3)测试

[root@centos ~]#while : ;do curl 192.168.8.101 ;sleep 0.5 ;done

192.168.8.103

192.168.8.103

192.168.8.104

192.168.8.103

192.168.8.104

haproxy调度算法

HAProxy 静态调度算法
  • balance:指明对后端服务器的调度算法,配置在listen或backend

  • 静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、链接数和相应速度等,且无法实时修改权重,只能重启后生效。

  • static-rr:基于权重的轮询调度,不支持权重的运行时调整及后端服务器慢启动,其后端主机数量没有限制

  • first:根据服务器在列表中的位置,自上而下进行调度,但是其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务,因此会忽略服务器的权重设置。

HAProxy 动态调度算法
  • 动态算法:基于后端服务器状态进行调度适当调整,比如优先调度至当前负载较低的服务器,且权重可以在haproxy运行时动态调整无需重启。

  • roundrobin:基于权重的轮询动态调度算法,支持权重的运行时调整,不等于lvs 的rr,支持慢启动即新加的服务器会逐渐增加转发数,每个后端backend中最多支持4095个server,此为默认调度算法,server 权重设置weight

  • leastconn:加权的最少连接的动态,支持权重的运行时调整和慢启动,即当前后端服务器连接最少的优先调度,比较适合长连接的场景使用,比如MySQL等场景。

HAProxy 调度算法-source
  • source:源地址hash,基于用户源地址hash并将请求转发到后端服务器,默认为静态即取模方式,但是可以通过hash-type支持的选项更改,后续同一个源地址请求将被转发至同一个后端web服务器,比较适用于session保持/缓存业务等场景。

  • map-based:取模法,基于服务器权重的hash数组取模,该hash是静态的即不支持在线调整权重,不支持慢启动,其对后端服务器调度均衡,缺点是当服务器的总权重发生变化时,即有服务器上线或下线,都会因权重发生变化而导致调度结果整体改变,hash(o)modn 。

  • source:源地址hash,基于用户源地址hash并将请求转发到后端服务器,默认为静态即取模方式,但是可以通过hash-type支持的选项更改,后续同一个源地址请求将被转发至同一个后端web服务器,比较适用于session保持/缓存业务等场景。

  • consistent:一致性哈希,该hash是动态的,支持在线调整权重,支持慢启动,优点在于当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动。

HAProxy 调度算法-uri
  • uri:基于对用户请求的uri做hash并将请求转发到后端指定服务器
  • map-based:取模法
  • consistent:一致性哈希
uri调度算法示例:

listen web_prot_http_nodes
bind 192.168.7.101:80
mode http #不支持tcp,会切换到tcp的roundrobin负载模式
balance uri
hash-type consistent
log global
option forwardfor
server 192.168.7.101 192.168.7.101:8080 check inter 3000 fall 3 rise 5
server 192.168.7.102 192.168.7.102:8080 check inter 3000 fall 3 rise 5

HAProxy 调度算法-url_param
  • url_param:
    对用户请求的url中的部分中的参数name作hash计算,并由服务器总权重相除以后派发至某挑出的服务器;通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个Backend Server
url_param调度算法示例:

listen web_prot_http_nodes
bind 192.168.7.101:80
mode http #不支持tcp,会切换到tcp的roundrobin负载模式
balance url_param name #基于参数name做hash
hash-type consistent
log global
option forwardfor
server 192.168.7.101 192.168.7.101:8080 check inter 3000 fall 3 rise 5
server 192.168.7.102 192.168.7.102:8080 check inter 3000 fall 3 rise 5

HAProxy 调度算法-hdr
  • hdr():针对用户每个http头部(header)请求中的指定信息做hash,此处由指定的http首部将会被取出并做hash计算,然后由服务器总权重相除以后派发至某挑出的服务器,假如无有效的值,则会被轮询调度
HAProxy 调度算法-rdp-cookie
  • rdp-cookie对远程桌面的负载,使用cookie保持会话
  • rdp-cookie()

四层与七层的区别:

  • 四层:
  • 在四层负载设备中,把client发送的报文目标地址(原来是负载均衡设备的IP地址),根据均衡设备设置的选择web服务器的规则选择对应的web服务器IP地址,这样client就可以直接跟此服务器建立TCP连接并发送数据。
image.png
  • 七层:
  • 七层负载均衡服务器起了一个代理服务器的作用,服务器建立一次TCP连接要三次握手,而client要访问webserver要先与七层负载设备进行三次握手后建立TCP连接,把要访问的报文信息发送给七层负载均衡;然后七层负载均衡再根据设置的均衡规则选择特定的webserver,然后通过三次握手与此台webserver建立TCP连接,然后webserver把需要的数据发送给七层负载均衡设备,负载均衡设备再把数据发送给client;所以,七层负载均衡设备起到了代理服务器的作用。
基于cookie实现session会话保持
listen web
  mode http
  option forwardfor
  bind 192.168.8.101:80
 
  cookie NAME insert

  server web1 192.168.8.103:80 cookie web1 check
  server web2 192.168.8.104:80 cookie web2 check

基于域名匹配的 acl 访问控制
listen web
  mode http
  rspidel server.*
  option forwardfor

  rspadd server:HAProxy

  bind 192.168.8.101:80

  acl test_host hdr_dom(host) www.xingyu.com

  acl test_host1 hdr_dom(host) www.xingyu.vip

  use_backend test_host if test_host

  use_backend test_host1 if test_host1

 # server web1 192.168.8.103:80  check 
 # server web2 192.168.8.104:80  check 

backend test_host
   mode http
   server web3 192.168.8.103:80 check


backend test_host1
   mode http
   server web4 192.168.8.104:80 check

你可能感兴趣的:(负载均衡haproxy)