超级不详细的HAProxy笔记

目录

一、 HAProxy 简介

二、 核心概念

1. 组件

2. 工作模式

三、配置文件详解

四、编译安装 HAProxy

1、解决lua 环境

2、编译安装HAProxy

3、haproxy启动脚本

4、创建自定义的配置文件

5、启动haproxy

 6、查看haproxy的状态页面

五、启动本地和远程日志实验

六、haproxy+Nginx 负载均衡实验 

1.web1和web2的配置

2.haproxy服务器的配置

3.客户端测试

七、HAProxy 实现 MySQL 服务四层负载

 1.配置haproxy配置文件

2.在后端服务器上安装和配置mariadb服务

3.测试

八、HAProxy-ACL 案例

ACL配置选项:

1.域名匹配

2.基于源ip或子网调度访问

3.基于源地址的访问控制

4.匹配浏览器类型

5.基于文件后缀名实现动静分离

九、HAProxy+Keepalived 高可用负载均衡实验

1、实验拓扑

​编辑2、实验步骤

2.1、主备服务器安装Keepalived、haproxy

2.2、配置Keepalived

2.3、配置haproxy

2.4、web端配置

3、测试


一、 HAProxy 简介

HAProxy(High Availability Proxy)是一款开源的高性能 TCP/HTTP 负载均衡器和反向代理,广泛用于提升应用的可用性、性能和安全性。支持:

  • 四层(TCP)和七层(HTTP)负载均衡

  • 会话保持、SSL 终止、健康检查、流量控制等功能

  • 高并发(C10k 问题优化)和低延迟

二、 核心概念

1. 组件

  • Frontend(前端):定义监听的端口和协议,接收客户端请求。

  • Backend(后端):定义一组服务器(Server)及负载均衡【流量分发】策略。

  • Server:后端真实服务器(如 Web 服务器、数据库)。

  • 访问控制列表ACL(Access Control List):根据请求属性(如 URL、Header、IP)定义条件,用于动态路由或安全控制。

2. 工作模式

  • TCP 模式(Layer 4):基于 IP 和端口转发。

  • HTTP 模式(Layer 7):解析 HTTP 头部,支持高级路由。

三、配置文件详解

HAProxy 的配置文件(路径:/etc/haproxy/haproxy.cfg)由两大部分组成,分别是global和proxies部分

  • global:全局配置段

进程及安全配置相关的参数
性能调整相关参数
Debug参数

  • proxies:代理配置段

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

以下是一个简单的配置文件实例 :

#全局设置
global
    log /dev/log local0
    maxconn 50000           # 全局最大连接数
    user haproxy            # 运行用户
    group haproxy
    daemon                  # 后台模式

#默认设置
defaults
    mode http               # 默认模式(http/tcp)
    log global
    option httplog          # 记录HTTP日志
    timeout connect 5s      # 连接后端超时
    timeout client 30s      # 客户端空闲超时
    timeout server 30s      # 后端服务器响应超时

#前端配置
frontend http-in
    bind *:80
    acl is_static path_beg -i /static/   # 定义ACL规则:路径以/static开头
    use_backend static_servers if is_static
    default_backend app_servers          # 默认后端

#后端配置
backend app_servers
    balance roundrobin       # 负载均衡算法
    server s1 192.168.1.10:8080 check maxconn 100
    server s2 192.168.1.11:8080 check backup  # 标记为备份服务器

backend static_servers
    server static1 192.168.1.20:80 check

四、编译安装 HAProxy

1、解决lua 环境

[root@localhost ~]# tar xvf  lua-5.3.5.tar.gz -C /usr/local/src
[root@localhost ~]# cd /usr/local/src/lua-5.3.5
[root@localhost lua-5.3.5]# ls
doc  Makefile  README  src
[root@localhost lua-5.3.5]# make linux test
[root@localhost lua-5.3.5]# src/lua -v
Lua 5.3.5  Copyright (C) 1994-2018 Lua.org, PUC-Rio

2、编译安装HAProxy

[root@localhost ~]# yum -y install gcc openssl-devel pcre-devel systemd-devel
[root@localhost ~]# tar xf haproxy-3.0.8.tar.gz  -C /usr/local/src
[root@localhost ~]# cd /usr/local/src/haproxy-3.0.8/
[root@localhost haproxy-3.0.8]# cat INSTALL          #参考INSTALL文件进行编译安装
[root@localhost haproxy-3.0.8]# make TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1 USE_ZLIB=1 USE_SYSTEMD=1 USE_LUA=1 LUA_INC=/usr/local/src/lua-5.3.5/src  LUA_LIB=/usr/local/src/lua-5.3.5/src
[root@localhost haproxy-3.0.8]# make install PREFIX=/apps/haproxy   #安装路径
[root@localhost haproxy-3.0.8]# ln -s /apps/haproxy/sbin/haproxy /usr/sbin/  #创建软链接
[root@localhost haproxy-3.0.8]# tree /apps/haproxy/ #查看生成的文件
/apps/haproxy/
├── doc
│   └── haproxy
│       ├── 51Degrees-device-detection.txt
│       ├── architecture.txt
│       ├── configuration.txt
│       ├── cookie-options.txt
│       ├── DeviceAtlas-device-detection.txt
│       ├── intro.txt
│       ├── linux-syn-cookies.txt
│       ├── lua.txt
│       ├── management.txt
│       ├── netscaler-client-ip-insertion-protocol.txt
│       ├── network-namespaces.txt
│       ├── peers.txt
│       ├── peers-v2.0.txt
│       ├── proxy-protocol.txt
│       ├── regression-testing.txt
│       ├── seamless_reload.txt
│       ├── SOCKS4.protocol.txt
│       ├── SPOE.txt
│       └── WURFL-device-detection.txt
├── sbin
│   └── haproxy
└── share
    └── man
        └── man1
            └── haproxy.1
6 directories, 21 files
[root@localhost haproxy-3.0.8]# which haproxy
/usr/sbin/haproxy
[root@localhost haproxy-3.0.8]# haproxy -v
HAProxy version 3.0.8-6036c31 2025/01/29 - https://haproxy.org/
Status: long-term supported branch - will stop receiving fixes around Q2 2029.
Known bugs: http://www.haproxy.org/bugs/bugs-3.0.8.html
Running on: Linux 4.18.0-553.el8_10.x86_64 #1 SMP Fri May 24 13:05:10 UTC 2024 x86_64

3、haproxy启动脚本

但是现在还缺少配置文件,无法启动haproxy

4、创建自定义的配置文件

[root@localhost haproxy-3.0.8]#  mkdir  /etc/haproxy
[root@localhost haproxy-3.0.8]# vim /etc/haproxy/haproxy.cfg 
global
    maxconn 100000
    chroot /apps/haproxy
    stats socket /var/lib/haproxy/haproxy.sock mode 600 level admin
    #uid 99
    #gid 99
    user  haproxy
    group haproxy
    daemon
    #nbproc 4
    #cpu-map 1 0
    #cpu-map 2 1
    #cpu-map 3 2
    #cpu-map 4 3
    pidfile /var/lib/haproxy/haproxy.pid
    log 127.0.0.1 local2 info

defaults
    option http-keep-alive
    option  forwardfor
    maxconn 100000
    mode http
    timeout connect 300000ms
    timeout client  300000ms
    timeout server  300000ms

listen stats
    mode http
    bind 0.0.0.0:9999
    stats enable
    log global
    stats uri     /haproxy-status
    stats auth    haadmin:123456

5、启动haproxy

[root@localhost haproxy-3.0.8]#  mkdir  /var/lib/haproxy
[root@localhost haproxy-3.0.8]#  chown  -R 99.99 /var/lib/haproxy/ 
[root@localhost haproxy-3.0.8]#  useradd -r -s /sbin/nologin -d /var/lib/haproxy haproxy
[root@localhost haproxy-3.0.8]# systemctl restart haproxy   #还是启动失败,需要关掉SELINUX和防火墙
Job for haproxy.service failed because the control process exited with error code.
See "systemctl status haproxy.service" and "journalctl -xe" for details.
[root@localhost haproxy-3.0.8]# getenforce
Enforcing
[root@localhost haproxy-3.0.8]# setenforce 0
[root@localhost haproxy-3.0.8]# systemctl stop  firewalld
[root@localhost haproxy-3.0.8]# systemctl restart haproxy

 6、查看haproxy的状态页面

浏览器访问:http://192.168.8.161:9999/haproxy-status

五、启动本地和远程日志实验

在上面的基础上 下载rsyslog,然后进行配置

#开启远程主机日志
[root@localhost ~]# yum install rsyslog -y
[root@localhost ~]# vim /etc/rsyslog.conf 
module(load="imudp") # needs to be done just once   
input(type="imudp" port="514")
local2.*                   /var/log/haproxy.log 
[root@localhost ~]# systemctl restart rsyslog
[root@localhost ~]# systemctl restart haproxy
[root@localhost ~]# 

浏览器访问:http://192.168.8.161:9999/haproxy-status,观察本机和远程主机生成的日志

六、haproxy+Nginx 负载均衡实验 

1.web1和web2的配置

下载Nginx并配置静态网页

2.haproxy服务器的配置

在haproxy的配置文件中加入以下配置:

还可以使用listen替换上面的frontend和backend的配置方式,可以简化设置通常只用于TCP协议的应用

 重启服务:systemctl  restart  haproxy

3.客户端测试

七、HAProxy 实现 MySQL 服务四层负载

注意:如果使用frontend和backend,一定在frontend和backedn段中都指定mode tcp

 1.配置haproxy配置文件

#或者使用frontend和backend实现
frontend mysql
        bind :3306
        mode tcp                            #必须指定tcp模式
        default_backend mysqlsrvs
backend mysqlsrvs
        mode tcp                            #必须指定tcp模式
        balance leastconn
        server mysql1 192.168.8.156:3306
        server mysql2 192.168.8.157:3306

2.在后端服务器上安装和配置mariadb服务

3.测试

八、HAProxy-ACL 案例

访问控制列表(ACL,Access Control Lists)是一种基于包过滤的访问控制技术,它可以根据设定的条件对经过服务器传输的数据包进行过滤(条件匹配),即对接收到的报文进行匹配和过滤,基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内容进行匹配并执行进一步操作,比如允许其通过或丢弃。

ACL配置选项:

acl   <aclname>  <criterion>   [flags]     [operator]    [<value>]
acl      名称      匹配规范      匹配模式     具体操作符     操作对象类型

定义ACL匹配规范,即:判断条件

hdr string,提取在一个HTTP请求报文的首部
hdr([<name> [,<occ>]]):完全匹配字符串,header的指定信息,<occ> 表示在多值中使用的值的出现次数
hdr_beg([<name> [,<occ>]]):前缀匹配,header中指定匹配内容的begin
hdr_end([<name> [,<occ>]]):后缀匹配,header中指定匹配内容end
hdr_dom([<name> [,<occ>]]):域匹配,header中的domain name
hdr_dir([<name> [,<occ>]]):路径匹配,header的uri路径
hdr_len([<name> [,<occ>]]):长度匹配,header的长度匹配
hdr_reg([<name> [,<occ>]]):正则表达式匹配,自定义表达式(regex)模糊匹配
hdr_sub([<name> [,<occ>]]):子串匹配,header中的uri模糊匹配

ACL匹配模式 

-i 不区分大小写
-m 使用指定的pattern匹配方法
-n 不做DNS解析
-u 禁止acl重名,否则多个同名ACL匹配或关系

1.域名匹配

haproxy服务器配置子配置文件:

web端配置静态页面:

测试:

2.基于源ip或子网调度访问

测试:

3.基于源地址的访问控制

拒绝指定IP或者IP范围访问

测试:

4.匹配浏览器类型

匹配客户端浏览器,将不同类型的浏览器调动至不同的服务器组

测试:

5.基于文件后缀名实现动静分离

测试:

九、HAProxy+Keepalived 高可用负载均衡实验

1、实验拓扑

2、实验步骤

2.1、主备服务器安装Keepalived、haproxy

2.2、配置Keepalived

主服务器:

备服务器 :

[root@master ~]# scp /etc/keepalived/keepalived.conf 192.168.8.162:/etc/keepalived/

启动Keepalived:

2.3、配置haproxy

主服务器:

备服务器:无需改动,只需要远程传送即可

启动haproxy:

2.4、web端配置

web1和web2配置静态页面

3、测试

验证VIP绑定:

主服务器关掉haproxy或Keepalived:

观察备服务器是否接管VIP:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值