Haproxy介绍
Haproxy是一个开源的高性能的反向代理或者说是负载均衡服务软件之一,它支持双机热备、虚拟主机、基于TCP和HTTP应用代理等功能。
其配置简单,而且拥有很好的对服务器节点的健康检查功能(相当于keepalived健康检查),当其代理的后端服务器出现故障时,
Haproxy会自动的将该故障服务器摘除,当服务器的故障恢复后Haproxy还会自动将RS服务器添加
Haproxy特别使用与那些访问量很大。但又需要会话保持或七层应用的业务。Haproxy运行在普通的服务器硬件上,仅仅进行简单的优化就可以支持数以万计的并发连接。
并且它的运行模式使得它可以很简单安全的整合到各种网站的架构中,同时使得应用服务器不会暴露到网络中。
Haproxy软件引入了frontend,backend的功能,frontend(acl规则匹配)可以运维管理人员根据任意HTTP请求头做规则匹配,
然后把请求定向到相关的backend(server pools等待前端把请求转过来的服务器组)。通过frontend和backup,
我们可以很容易的实现haproxy的7层代理功能,haproxy是一款不可多得的优秀代理服务软件
Haproxy支持两种主要代理模式:第一个是4层tcp代理(例如:可用于邮件服务内部协议通信服务器、Mysql服务等)。
第二个是7层代理(如HTTP代理)。在4层tcp代理模式下,Haproxy仅在客户端和服务器之间双向转发流量。
但是在7层模式下Haproxy会分析应用层协议,并且能通过运行、拒绝、交换、增加、修改或者删除请求(request)或者回应(reponse)里指定内容来控制协议。
主服务器配置(从服务器与主服务器配置相同再此只拿主举栗子)
配置HAproxy
由于CentOS7之前版本自带的lua版本比较低并不符合HAProxy要求的lua最低版本(5.3)的要求,因此需要编译安装较新版本的lua环境,然后才能编译安装HAProxy
下载lua依赖包
[root@localhost ~]# yum install gcc libtermcap-devel ncurses-devel libevent-devel readline-devel -y
下载lua安装包
[root@localhost ~]# wget http://www.lua.org/ftp/lua-5.4.4.tar.gz
[root@localhost ~]# tar zxvf lua-5.4.4.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/lua-5.4.4/
[root@localhost lua-5.4.4]# make linux test
[root@localhost lua-5.4.4]# src/lua -v
Lua 5.4.4 Copyright (C) 1994-2022 Lua.org, PUC-Rio
编译安装HAproxy
下载haproxy所需的依赖包
[root@localhost ~]# yum -y install gcc gcc-c++ make bzip2-devel openssl-devel pcre-devel systemd-devel
下载并解压haproxy
[root@localhost ~]# tar zxvf haproxy-2.7.3.tar.gz -C /usr/src/
[root@localhost ~]# cd /usr/src/haproxy-2.7.3/
[root@localhost haproxy-2.7.3]# make ARCH=x86_64 TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_CPU_AFFINITY=1 USE_LUA=1 LUA_INC=/usr/src/lua-5.4.4/src/ LUA_LIB=/usr/src/lua-5.4.4/src/ PREFIX=/usr/local/haproxy
[root@localhost haproxy-2.7.3]# make install PREFIX=/usr/local/haproxy
[root@localhost haproxy-2.7.3]# ls /usr/local/haproxy/
doc sbin share
[root@localhost ~]# ln -sv /usr/local/haproxy/sbin/haproxy /usr/bin/
[root@localhost ~]# haproxy -v
HAProxy version 2.7.3-1065b10 2023/02/14 - https://haproxy.org/
Status: stable branch - will stop receiving fixes around Q1 2024.
Known bugs: http://www.haproxy.org/bugs/bugs-2.7.3.html
Running on: Linux 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64
编写HAproxy配置文件
[root@localhost ~]# mkdir /usr/local/haproxy/conf
[root@localhost ~]# vim /usr/local/haproxy/conf/haproxy.cfg
global
log 127.0.0.1 local2 info
maxconn 4096
user haproxy
group haproxy
daemon
#nbproc 1
stats socket /var/run/haproxy.stat mode 600 level admin
defaults
log global
mode http
maxconn 2048
retries 3
option redispatch
timeout connect 5000
timeout client 50000
timeout server 50000
option abortonclose
stats uri /admin?stats
stats realm Private lands
stats auth admin:123123
stats hide-version
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 192.168.100.1:80 weight 1 cookie 3 check inter 2000 rise 2 fall 5
server html-B 192.168.100.3:80 weight 1 cookie 4 check inter 2000 rise 2 fall 5
准备HAProxy系统启动文件
[root@localhost ~]# vim /usr/lib/systemd/system/haproxy.service
[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target
[Service]
ExecStartPre=/usr/bin/haproxy -f /usr/local/haproxy/conf/haproxy.cfg -c -q
ExecStart=/usr/bin/haproxy -Ws -f /usr/local/haproxy/conf/haproxy.cfg -p /var/lib/haproxy/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID
LimitNOFILE=100000
[Install]
WantedBy=multi-user.target
[root@localhost ~]# systemctl enable haproxy.service --now
[root@localhost ~]# netstat -anptu | grep haproxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 3455/haproxy
udp 0 0 0.0.0.0:60507 0.0.0.0:* 3455/haproxy
[root@localhost ~]# firewall-cmd --add-port=80/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
搭建keepalived
[root@localhost ~]# yum -y install keepalived.x86_64
keepalived master配置文件
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_1
}
vrrp_instance VI_1 {
state MASTER
interface ens33
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.200
}
}
keepalived backup配置文件
[root@localhost ~]# vim /etc/keepalived/keepalived.conf
global_defs {
router_id LVS_2
}
vrrp_instance VI_1 {
state BACKUP
interface ens33
virtual_router_id 51
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.100.200
}
}
[root@localhost ~]# systemctl enable keepalived.service --now
查看master上的VIP
[root@localhost ~]# ip a
![](https://img-blog.csdnimg.cn/img_convert/726914665880c49dc15c15e84b3d7999.png)
配置后端web服务器
web1
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /var/www/html/index.html
web1
[root@localhost ~]# systemctl start httpd
web2
[root@localhost ~]# yum -y install httpd
[root@localhost ~]# vim /var/www/html/index.html
web2
[root@localhost ~]# systemctl start httpd
访问测试(建议使用linux测试)
访问HAproxy master VIP地址
![](https://img-blog.csdnimg.cn/img_convert/9d652e3a0ca4aa9c09c7e97cc5e7a6bb.png)