赞
踩
HAProxy 是一款提供高可用性、负载均衡以及基于 TCP(第四层)和 HTTP(第七层)应用的代理软件,它具有以下特点和功能:
一、特点
高性能
可靠性高
灵活的配置
二、工作原理
客户端请求
负载均衡决策
请求转发
响应返回
- yum install haproxy -y
- #查看版本
- haproxy -v
- HAProxy version 2.9.9-ad75c48 2024/06/14 - https://haproxy.org/
- Status: stable branch - will stop receiving fixes around Q1 2025.
- Known bugs: http://www.haproxy.org/bugs/bugs-2.9.9.html
- Running on: Linux 3.10.0-1160.el7.x86_64 #1 SMP Tue Aug 18 14:50:17 EDT 2020
- x86_64
- vim /etc/haproxy/haproxy.cfg
-
- log 127.0.0.1 local2
- chroot /var/lib/haproxy
- pidfile /var/run/haproxy.pid
- maxconn 100000
- user haproxy
- group haproxy
- daemon
- # turn on stats unix socket
- stats socket /var/lib/haproxy/haproxy.sock1 mode 600 level admin process 1
- stats socket /var/lib/haproxy/haproxy.sock2 mode 600 level admin process 2 #启用多个文件
-
- #nbproc 2 #启用多进程
- #cpu-map 1 0
- #cpu-map 2 1
- nbthread 2
-
- systemctl restart haproxy.service
HAProxy通过固定参数 balance 指明对后端服务器的调度算法 balance参数可以配置在listen或backend选项中。 HAProxy的调度算法分为静态和动态调度算法 有些算法可以根据参数在静态和动态算法中相互转换。
静态算法:按照事先定义好的规则轮询公平调度,不关心后端服务器的当前负载、连接数和响应速度 等,且无法实时修改权重(只能为0和1,不支持其它值),只能靠重启HAProxy生效。
static-rr:基于权重的轮询调度 不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其它值) 不支持端服务器慢启动 其后端主机数量没有限制,相当于LVS中的 wrr
慢启动是指,服务器慢慢的加载处理任务
不支持慢启动和权重的热处理
while true;do curl 172.25.254.100 ; sleep 0.1;done
看会不会被调度到20上
1. 基于权重的轮询动态调度算法,
2. 支持权重的运行时调整,不同于lvs中的rr轮训模式,
3. HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数),
4. 其每个后端backend中最多支持4095个real server,
5. 支持对real server权重动态调整,
6. roundrobin为默认调度算法,此算法使用广泛
其它算法即可作为静态算法,又可以通过选项成为动态算法
源地址hash,基于用户源地址hash并将请求转发到后端服务器,后续同一个源地址请求将被转发至同一个后端web服务器。此方式当后端服务器数据量发生变化时,会导致很多用户的请求转发至新的后端服务器,默认为静态方式,但是可以通过hash-type支持的选项更改这个算法一般是在不插入Cookie的TCP模式下使用,也可给拒绝会话cookie的客户提供最好的会话粘性,适用于session会话保持但不支持cookie和缓存的场景源地址有两种转发客户端请求到后端服务器的服务器选取计算方式,分别是取模法
和一致性hash
- listen webserver 80
- bind *:80
- mode http
- balance source
- server webserver1 172.25.254.10:80 weight 1 check inter 3 fa11 3 rise 5
- server webserver2 172.25.254.20:80 weight 1 check inter 3s fall 3 rise 5
- for N in {1..5}; do curl 172.25.254.100; done
- server - 172.25.254.10
- server - 172.25.254.10
- server - 172.25.254.10
- server - 172.25.254.10
- server - 172.25.254.10
取模法 map-based:取模法,对source地址进行hash计算,再基于服务器总权重的取模,最终结果决定将此请 求转发至对应的后端服务器。 此方法是静态的,即不支持在线调整权重,不支持慢启动,可实现对后端服务器均衡调度 缺点是当服务器的总权重发生变化时,即有服务器上线或下线,都会因总权重发生变化而导致调度结果 整体改变hash-type 指定的默值为此算法
不能改变不权重,只能是使用或者不用
- listen stats
- mode http
- bind *:80
- balance source
- hash-type consistent
- server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 1
- server wed2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
- listen stats
- mode http
- bind *:80
- balance uri
- server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 1
- server wed2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
- listen stats
- mode http
- bind *:80
- balance uri
- hash-type consistent
- server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 1
- server wed2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
- listen stats
- mode http
- bind *:80
- balance uri
- balance url_param webcluster
- server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 1
- server wed2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
测试
- curl 172.25.254.100/index3.html name=webcluster
- 172.25.254.10 index
- listen stats
- mode http
- bind *:80
- balance hdr(User-Agent)
- server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 1
- server wed2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
- listen stats
- mode http
- bind *:80
- balance hdr(User-Agent)
- hash-type consistent
- server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 1
- server wed2 172.25.254.20:80 check inter 2 fall 3 rise 5 weight 1
为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地址hash 调度算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式使用较少, 已经被session 共享服务器代替
四层穿透
- listen webserver 80
- bind *:80
- mode tcp
- balance roundrobin
- server webserver1 172.25.254.10:80 weight 1 check inter 3 fa11 3 rise 5
- server webserver2 172.25.254.20:80 weight 1 check inter 3s fall 3 rise 5
七层穿透
- listen webserver_80
- option forwardfor
- bind *:80
- mode http
- balance roundrobin
- server web1 172.25.254.10:80 check inter 2 fall 3 rise 5 weight 1
- server wed2 172.25.254.20:80 send-proxy check inter 2 fall 3 rise 5 weigh
- frontend webcluster
- bind *:80
- mode http
- acl test hdr_dom(host) -i wwW.timinglee.com
- use_backend webcluster-host if test
- default_backend default-host
- backend webcluster-host
- mode http
- server web1 172.25.254.10:80 check inter 2 fall 2 rise 5
- backend default-host
- mode-http
- server web2 172.25.254.20:80 check inter 2 fall 2 rise 5
- #做本地解析
- vim /etc/hosts
- 172.25.254.100 www.timing.com
- yum install mariadb-server-galera.x86_64 -y
- systemctl start mariadb.service
- vim /etc/my.cnf.d/mariadb-server.cnf
- [mysqtdl]
- server-id=1
- datadir=/var/lib/mysgl
- socket=/var/lib/mysql/mysql.sock
- Log-error=/var/log/mariadb/mariadb.logpid-file=/run/mariadb/mariadb.pid
- vim /etc/my.cnf.d/mariadb-server.cnf
- [mysqtdl]
- server-id=2
- datadir=/var/lib/mysgl
- socket=/var/lib/mysql/mysql.sock
- Log-error=/var/log/mariadb/mariadb.logpid-file=/run/mariadb/mariadb.pid
- listen dbserver
- bind *:3306
- mode tcp
- balance static-rr
- server db1 172.25.254.10:3306
- server db2 172 35.354 20:3306 check inter 3 falt 3 rise s
- [root@node10 ~]# mysql -ulee -plee -h 172.25.254.100 -e "show variables like
- 'hostname'"
- +---------------+-------+
- | Variable_name | Value |
- +---------------+-------+
- | hostname | rs2 |
- +---------------+-------+
- [root@node10 ~]# mysql -ulee -plee -h 172.25.254.100 -e "show variables like
- 'hostname'"
- +---------------+-------+
- | Variable_name | Value |
- +---------------+-------+
- | hostname | rs1 |
- +---------------+-------+
- [root@node10 ~]# mysql -ulee -plee -h 172.25.254.100 -e "select @@server_id"
- +-------------+
- | @@server_id |
- +-------------+
- | 1 |
- +-------------+
- [root@node10 ~]# mysql -ulee -plee -h172.25.254.100 -e "select @@server_id"
- +-------------+
- | @@server_id |
- +-------------+
- | 2 |
- +-------------+
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。