haproxy概念
是一款高性能的负载均衡软件。
因为其专注于负载均衡这一些事情,
因此与nginx比起来在负载均衡这件事情上做更好,更专业。
特点
•支持tcp / http 两种协议层的负载均衡,使得其负载均衡功能非常丰富。
•支持8种左右的负载均衡算法,尤其是在http模式时,有许多非常实在的负载均衡算法,适用各种需求。
•性能非常优秀,基于事件驱动的链接处理模式及单进程处理模式(和Nginx类似)让其性能卓越。
•拥有一个功能出色的监控页面,实时了解系统的当前状况。
•功能强大的ACL支持,给用户极大的方便。
处理模式
单进程处理模式
所有客户端连接全部都由同一个服务进程来处理,目标就是等待连接,来一个分配一个,主要消耗cpu。
多线程处理模式
多线程模式消耗内存,会限制并发而且多线程需要进程间通信,也会消耗相当多的cpu资源。
下面进入本次实验
环境
client:192.168.26.142
haproxy:192.168.26.152
web1:192.168.26.153
web2:192.168.26.154
解析ip
拷贝hosts文件到其他机器
haproxy机器安装haproxy,web机器安装httpd
haproxy: yum install -y haproxy
web1: yum install -y httpd
web2: yum install -y httpd
给web机器主页面,启动httpd
web1: echo web1 > /var/www/html/index.html
web1: systemctl start httpd && systemctl enable httpd
web2: echo web2 > /var/www/html/index.html
web2: systemctl start httpd && systemctl enable httpd
配置haproxy
# vim /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local3 info
maxconn 4096
uid nobody
gid nobody
daemon
nbproc 1
defaults
log global
mode http
maxconn 2048
retries 3
option redispatch
stats uri /haproxy
stats auth ahuige:123
contimeout 5000
clitimeout 50000
srvtimeout 50000
frontend http-in
bind 0.0.0.0:80
mode http
log global
option httplog
option httpclose
acl html url_reg -i \.html$
use_backend html-server if html
default_backend html-server
backend html-server
mode http
balance roundrobin
option httpchk GET /index.html
cookie SERVERID insert indirect nocache
server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
server html-B web2:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
gloab:全局配置
log:日志配置
maxconn:最大连接限制(优先级低)
uid:用户
gid:组用户
deamon:守护进程运行
nbproc :haproxy进程数
defaults:针对(listen和backend块进行设置没如果块中没设置,则使用默认设置)默认配置
log:日志使用全局配置
mode:模式7层LB
maxconn:最大连接数(优先级中)
retries:健康检查。3次连接失败就认为服务不可用
option:服务不可用后的操作,重定向到其他服务器
stats:状态模块功能开启
stats auth:状态模块认证(用户名qianfeng密码123)
contimeout : 定义haproxy将客户端请求转发至后端服务器,所等待的超时时长
clitimeout:haproxy作为客户,和后端服务器之间空闲连接的超时时间,到时候发送fin指令
srvtimeout :haproxy作为服务器,和用户之间空闲连接的超时时间,到时候发送fin指令
frontend:前端配置块。面对用户侧
bind:面对用户监听地址和端口
mode:http模式的LB
log:日志使用全局配置
option httplog:默认日志格式非常简陋,仅包括源地址、目标地址和实例名称,而“option httplog参数将会使得日志格式变得丰富许多,其通常包括但不限于HTTP请求、连接计时器、会话状态、连接数、捕获的首部及cookie、“frontend”、“backend”及服务器名称,当然也包括源地址和端口号等。
option http close: 每次请求完毕后,关闭http通道
acl html url_reg -i \.html$ :1. 访问控制列表名称html。规则要求访问以html结尾的url时
use_backend html-server if html :2.如果满足acl html规则,则推送给后端服务器 html-server
default_backend html-server 3:默认的后端服务器是 html-server
backend html-server:后端服务器名称为 html-server
mode http:模式为7层代理
balance roundrobin:算法为轮训
option httpchk GET /index.html :允许用http协议检查server 的健康
cookie SERVERID insert indirect nocache:轮询的同时,根据插入的cookie SERVERID 的值来做会话保持,将相同的用户请求,转发给相同的真实服务器。
server html-A web1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5:cookie 3 服务器ID,避免rr算法将客户机请求转发给其他服务器 ,对后端服务器的健康状况检查间隔为2000毫秒,连续2次健康检查成功,则认为是有效的,连续5次健康检查失败,则认为服务器宕机
server html-B web2:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
关于haproxy时间格式配置说明
一些包含了值的参数表示时间,如超时时长。这些值一般以毫秒为单位,但也可以使用其它的时间单位后缀。
us: 微秒(microseconds),即1/1000000秒;
ms: 毫秒(milliseconds),即1/1000秒;
s: 秒(seconds);
m: 分钟(minutes);
h:小时(hours);
d: 天(days);
systemctl start haproxy.service
测试
测试haproxy状态
浏览器访问192.168.26.152/haproxy
输入用户名密码
ahuige
123