HAProxy 负载均衡器

HAProxy 负载均衡器

一、HAProxy 简介

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

特性概述:
  • 适用于高负载Web站点,支持会话保持与七层处理
  • 单进程事件驱动模型,支持数万并发连接
  • 可轻松集成至现有架构,保护后端服务器不直接暴露于网络
  • 被GitHub、Bitbucket、Stack Overflow、Reddit、Twitter等知名网站及AWS广泛使用

二、负载均衡类型

层级 类型 说明 常见产品
二层 MAC层负载均衡 基于虚拟MAC地址分配至实际MAC地址
三层 IP层负载均衡 基于虚拟IP地址分配至实际IP地址
四层 TCP层负载均衡 基于IP+端口进行转发 F5、LVS、Nginx、HAProxy
七层 HTTP层负载均衡 基于URL、IP或主机名进行转发 HAProxy、Nginx、Apache、MySQL Proxy

三、HAProxy 安装

1.1、YUM 安装
bash 复制代码
[root@yyh1 ~]# yum -y install haproxy
1.2、源码安装
1.安装编译环境
bash 复制代码
[root@yyh1 ~]# yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel gcc-c++ zlib-devel lua
2.创建用户
bash 复制代码
[root@yyh1 ~]# useradd -r -M -s /sbin/nologin haproxy
3.编译安装
bash 复制代码
[root@yyh1 ~]# tar -xzvf haproxy-2.1.3.tar.gz
[root@yyh1 ~]# cd haproxy-2.1.3/
[root@yyh1 haproxy-2.1.3]# make clean
[root@yyh1 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@yyh1 haproxy-2.1.3]# make install PREFIX=/usr/local/haproxy
[root@yyh1 haproxy-2.1.3]# cp haproxy /usr/sbin/
2、设置 Linux 内核参数
bash 复制代码
[root@yyh1 haproxy-2.1.3]# vim /etc/sysctl.conf 
[root@yyh1 haproxy-2.1.3]# sysctl -p
net.ipv4.ip_nonlocal_bind = 1
net.ipv4.ip_forward = 1
3、配置 haproxy 服务
bash 复制代码
[root@yyh1 haproxy-2.1.3]# mkdir /etc/haproxy
[root@yyh1 haproxy-2.1.3]# vim /etc/haproxy/haproxy.cfg

内容如下

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
    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
    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.20:80 check
    server rs2 192.168.100.30:80 check
4、启动 haproxy,配置 haproxy.service 服务单元文件
bash 复制代码
[root@yyh1 ~]# vim /usr/lib/systemd/system/haproxy.service
bash 复制代码
[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
bash 复制代码
[root@yyh1 ~]# systemctl daemon-reload
5、配置日志信息
bash 复制代码
[root@yyh1 ~]# vim /etc/rsyslog.conf

打开UDP和TCP服务

6、重启服务
bash 复制代码
[root@yyh1 ~]# systemctl restart rsyslog
[root@yyh1 ~]# systemctl enable rsyslog
[root@yyh1 ~]# systemctl restart haproxy
[root@yyh1 ~]# systemctl enable haproxy
7、测试访问并查看日志

发现负载均衡轮询

查看日志

bash 复制代码
[root@yyh1 ~]# tail -f /var/log/haproxy.log
8、登录 haproxy 监控页面

四、 haproxy.cfg 配置文件详解

haproxy 的配置文件由两部分组成:全局设定和对代理的设定,共分为五段:global,defaults,frontend,backend,listen

1、配置文件结构
  • global:全局配置,主要用于定义全局参数,属于进程级的配置,通常和操作系统配置有关
  • defaults:配置默认参数,这些参数可以被用到frontend,backend,Listen组件
  • frontend:接收请求的前端虚拟节点,frontend可以指定具体使用后端的backend
  • backend:后端服务集群的配置,真实服务器,一个backend对应一个或者多个实体服务器
  • listen:fronted和backend的组合体,比如haproxy实例状态监控部分配置。Haproxy1.3之前的唯一配置方式
2、时间单位
  • us:微秒,即1/1000000秒
  • ms:毫秒,即1/1000秒
  • s:秒
  • m:分钟
  • h:小时
  • d:天
3、日志级别对照表
级别 代码 说明
emerg 0 系统不可用
alert 1 需立即处理的事件
crit 2 关键事件
err 3 错误事件
warning 4 警告事件
notice 5 普通重要事件
info 6 信息事件
debug 7 调试信息
4、全局配置(global)
cfg 复制代码
global
    log 127.0.0.1 local0  info		# 定义haproxy日志输出设置
    #log loghost local0 info		# 定义haproxy日志级别
    maxconn 20480					# 定义最大连接数
#chroot /usr/local/haproxy			# chroot运行路径
    pidfile /var/run/haproxy.pid	# haproxy进程PID文件
    #maxconn 4000       
    user haproxy					# 运行haproxy用户,可用uid代替
    group haproxy					# 运行haproxy用户组,可用gid代替
	daemon							# 以后台形式运行haproxy
5、默认配置(defaults)
cfg 复制代码
defaults
     mode http				# 所处理的类别(7层代理http,4层代理tcp)
    log global				# 引入global定义的日志格式
    option dontlognull		# 不记录健康检查日志信息
    option httpclose		# 每次请求完毕后主动关闭http通道,haproxy不支持keep-alive模式
    option httplog			# 日志类别为http日志格式
    #option forwardfor		# 如果后端服务器需要获取客户端的真实ip,需要配置的参数,可以从http header中获取客户端的ip
    option redispatch
    balance roundrobin		# 设置默认负载均衡方式,轮询方式
    timeout connect 10s		# 默认连接超时时间
    timeout client 10s		# 默认客户端超时时间
    timeout server 10s		# 默认服务器超时时间
    timeout check 10s		# 设置超时检查超时时间 
    maxconn 60000			# 最大连接数
    retries 3				# 3次连接失败就认为服务器不可用,也可以通过后面设置
6、前端虚拟节点配置(frontend)
cfg 复制代码
frontend http_80_in 
	bind 0.0.0.0:80				# 设置侦听端口,即haproxy提供的web服务端口,和lvs的vip类似
	mode http	
	log  global   
 	option httpclose  
    option httplog  
	option forwardfor
	default_backend  wwwpool	# 设置请求默认转发的后端服务池
7、定义后端服务集群配置(backend)
cfg 复制代码
backend  wwwpool			# 定义wwwpool服务器组
	mode  http
	option  redispath
	option  abortonclose
	balancer  source		# 负载均衡的方式,源哈希算法
	cookie  SERVERID		# 允许插入serverid到cookie中,serverid后面可以定义
	option  httpdchk  GET  /test.html		#心跳测试
	server  web1  10.1.1.2:80  cookie  2 weight  3  check  inter 2000  rise 2 fall 3 maconn 8
8、页面监控(listen)
cfg 复制代码
listen admin_stats					# frontend和backend的组合体,监控组的名称,按需自定义名称
    bind 0.0.0.0:8189				# 侦听端口
    stats enable					# 开启监控
    mode http
    log global
    stats uri /haproxy_stats		# 监控页面的url访问路径
    stats realm Haproxy\ Statistics	# 监控页面的提示信息
    stats auth admin:admin			# 监控页面的用户和密码
    #stats hide-version				# 隐藏统计页面上的haproxy版本信息
    stats admin if TRUE				# 手工启用/禁用,后端服务器haproxy
    stats refresh 30s				# 每个30秒自动刷新监控页面

五、常用命令与验证

  • 检查配置文件语法:haproxy -f /etc/haproxy/haproxy.cfg -c
  • 重新加载配置:systemctl reload haproxy
  • 查看监控页面:http://<IP>:8189/haproxy_stats
相关推荐
大树8823 分钟前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠27 分钟前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质1 小时前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
bush41 小时前
嵌入式linux学习记录十四、术语
linux·嵌入式
载数而行5201 小时前
Linux 11 动态监控指令top
linux
Inhand陈工2 小时前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智2 小时前
ARP代理--工作原理
运维·网络·arp·arp代理
麦聪聊数据2 小时前
数据服务化时代:企业数据能力输出的核心路径
数据库
不会C语言的男孩2 小时前
Linux 系统编程 · 第 8 章:进程基础
linux·c语言
shushangyun_2 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化