52.haproxy负载均衡

haproxy负载均衡

HAProxy 简介

HAProxy 是一个使用 C 语言编写的开源软件,提供高可用性负载均衡 以及基于 TCPHTTP 的应用程序代理功能。

核心特点:

  • 高性能:适用于负载巨大的 Web 站点,支持会话保持和七层处理。
  • 高并发:采用事件驱动、单一进程模型,能高效支持数万并发连接。
  • 安全集成:可简单安全地整合进现有架构,保护后端 Web 服务器不直接暴露于网络。

知名用户:GitHub, Bitbucket, Stack Overflow, Reddit, Tumblr, Twitter, 亚马逊 AWS 等。

负载均衡类型

根据 OSI 模型,负载均衡可分为不同层次:

层次 名称 工作原理 代表产品
二层 数据链路层负载均衡 基于虚拟 MAC 地址,分配至实际 MAC 地址响应。 -
三层 网络层负载均衡 基于虚拟 IP 地址,分配至实际 IP 地址响应。 -
四层 传输层负载均衡 基于 IP + Port 进行请求转发。 F5, LVS, HAProxy, Nginx
七层 应用层负载均衡 基于 URL、HTTP 头、主机名等应用层信息进行转发。 HAProxy, Nginx, Apache

说明 :HAProxy 同时支持高效的四层(TCP)七层(HTTP) 负载均衡。

HAProxy 安装

可以使用yum直接进行安装

复制代码
yum -y install haproxy

但是我们通常会使用源码安装,这样更灵活

首先安装依赖环境

复制代码
[root@ha ~]# yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel gcc-c++ zlib-devel lua

跟mysql一样,我们要创建一个haproxy的用户

复制代码
[root@ha ~]# useradd -r -M -s /sbin/nologin haproxy

使用源码安装需要源码包,解压源码包

复制代码
[root@ha ~]# tar -xzf haproxy-2.1.3.tar.gz

安装

复制代码
[root@ha ~]# cd haproxy-2.1.3/
[root@ha haproxy-2.1.3]# make clean
[root@ha haproxy-2.1.3]# make -j $(grep 'processor' /proc/cpuinfo |wc -l) \
> TARGET=linux-glibc  \
> USE_OPENSSL=1  \
> USE_ZLIB=1  \
> USE_PCRE=1  \
> USE_SYSTEMD=1
[root@ha haproxy-2.1.3]# make install PREFIX=/usr/local/haproxy
[root@ha haproxy-2.1.3]# cp haproxy  /usr/sbin/

设置内核参数

复制代码
[root@ha haproxy-2.1.3]# vim /etc/sysctl.conf 
[root@ha haproxy-2.1.3]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1

配置haproxy服务

复制代码
[root@ha ~]# mkdir /etc/haproxy
[root@ha ~]# vim /etc/haproxy/haproxy.cfg

global			#全局配置
    log 127.0.0.1 local0  info
    #log loghost local0 info
    maxconn 20480
#chroot /usr/local/haproxy
    pidfile /var/run/haproxy.pid
    #maxconn 4000
    user haproxy
    group haproxy
    daemon
#---------------------------------------------------------------------
#common defaults that all the 'listen' and 'backend' sections will
#use if not designated in their block
#---------------------------------------------------------------------
defaults		#默认参数,可以被用到frontend,backend,Listen组件,本次使用listen组件
    mode http
    log global
    option dontlognull
    option httpclose
    option httplog
    #option forwardfor
    option redispatch
    balance roundrobin
    timeout connect 10s
    timeout client 10s
    timeout server 10s
    timeout check 10s
    maxconn 60000
    retries 3
#--------------统计页面配置------------------
listen admin_stats	fronted和backend的组合体
    bind 0.0.0.0:8189
    stats enable
    mode http
    log global
    stats uri /haproxy_stats
    stats realm Haproxy\ Statistics
    stats auth admin:admin
    #stats hide-version
    stats admin if TRUE
    stats refresh 30s
#---------------web设置-----------------------
listen webcluster
    bind 0.0.0.0:80
    mode http
    #option httpchk GET /index.html
    log global
    maxconn 3000
    balance roundrobin
    cookie SESSION_COOKIE insert indirect nocache
server rs1 192.168.100.10:80 check
server rs2 192.168.100.20:80 check

配置文件由五部分组成,逻辑关系如下:

  1. global:全局配置,与操作系统和进程相关的参数。
  2. defaults :为后续组件(frontend, backend, listen)提供默认参数。
  3. frontend:定义前端虚拟服务,用于接收客户端请求。
  4. backend:定义后端真实服务器集群。
  5. listenfrontendbackend 的组合体,常用于监控

全局配置详细解析
复制代码
global
    log 127.0.0.1 local0 info    # 定义日志输出和级别
    maxconn 20480                # 全局最大连接数
    user haproxy                 # 运行用户
    group haproxy                # 运行用户组
    daemon                       # 以后台守护进程方式运行
    pidfile /var/run/haproxy.pid # PID 文件位置

defaults
    mode http                    # 默认模式(http/tcp)
    log global                   # 继承全局日志设置
    option dontlognull          # 不记录健康检查空日志
    option httpclose            # 关闭 HTTP 连接(不支持 keep-alive)
    option httplog              # 启用 HTTP 请求日志
    option redispatch           # 连接失败时重定向到其他服务器
    balance roundrobin          # 默认负载均衡算法:轮询
    timeout connect 10s         # 连接后端服务器超时时间
    timeout client 10s          # 客户端响应超时时间
    timeout server 10s          # 服务器端响应超时时间
    maxconn 60000               # 默认最大连接数
    retries 3                   # 3次失败判定服务器不可用

frontend http_80_in		#前端配置
    bind 0.0.0.0:80             # 监听所有 IP 的 80 端口
    mode http
    option forwardfor           # 向后端传递客户端真实 IP(X-Forwarded-For)
    default_backend wwwpool     # 指定默认后端服务器组

backend wwwpool		后端配置
    mode http
    balance source              # 负载均衡算法:源 IP 哈希
    option httpchk GET /index.html # 定义健康检查方法
    server web1 192.168.100.10:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3
    server web2 192.168.100.20:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3

listen admin_stats		监听配置
    bind 0.0.0.0:8189           # 监控页面访问端口
    stats enable                # 启用统计报告
    stats uri /haproxy_stats    # 统计页面的 URL 路径
    stats realm "Haproxy Statistics" # 认证提示信息
    stats auth admin:admin      # 登录用户名和密码
    stats refresh 30s           # 页面自动刷新间隔

配置haproxy的服务单元,然后启动

复制代码
[root@ha ~]# vim /usr/lib/systemd/system/haproxy.service

[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg   -c -q
ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg  -p /var/run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

[root@ha ~]# systemctl daemon-reload
[root@ha ~]# systemctl restart haproxy

查看


相关推荐
silence2503 小时前
CentOS 下使用 LVM 扩展根分区空间的完整流程
linux·运维·centos
toooooop83 小时前
linux centos 脚本批量启动宝塔服务(二)
linux·运维·centos
9毫米的幻想4 小时前
【Linux系统】—— 进程切换&&进程优先级&&进程调度
linux·运维·服务器·c++·学习·算法
CIb0la4 小时前
介绍一套体系化的工作流程或学习方法:标准化输出
运维·笔记·学习·学习方法
维尔切4 小时前
Apache Tomcat 部署与配置
java·linux·运维·tomcat·apache
yaoxtao4 小时前
ubuntu22.04配置ip
linux·运维·服务器
2501_920047035 小时前
docker概念、安装与基本使用
运维·docker·容器
失因5 小时前
LVS 负载均衡技术
运维·负载均衡·lvs
sszdzq5 小时前
docker安装canal-server(v.1.1.8)【mysql->rabbitMQ】
运维·docker·容器