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
相关推荐
什么半岛铁盒2 小时前
C++项目:仿muduo库高并发服务器-------Channel模块实现
linux·服务器·数据库·c++·mysql·ubuntu
倔强的石头_2 小时前
【金仓数据库产品体验官】Windows 安装 KingbaseES V9R1C10 与 Oracle 兼容特性实战
数据库
VueVirtuoso2 小时前
前后端部署 + Nginx 配置 + Cloudflare 全攻略(通俗易懂版)
运维·nginx
QQ12958455042 小时前
服务器跨域问题CORS的解决
运维·服务器
小白银子2 小时前
零基础从头教学Linux(Day 42)
linux·运维·服务器·网络·nginx
DDC楼宇自控与IBMS集成系统解读3 小时前
园区3D可视化数字孪生管理平台与 IBMS 智能化集成系统:打造智慧园区新范式
运维·3d可视化·楼宇自控系统·数字孪生管理平台·ibms集成系统·3d可视化数字孪生管理平台·智能化集成系统
望获linux3 小时前
【Linux基础知识系列:第一百四十篇】理解SELinux与系统安全
linux·运维·服务器·数据库·chrome·macos
初学者_xuan3 小时前
零基础新手小白快速了解掌握服务集群与自动化运维(七)Nginx模块--Nginx反向代理与缓存功能(二)
运维·nginx·自动化
Java-xy²3 小时前
AlmaLinux release 9.6服务器离线安装MySQL8.0.27详细步骤
运维·服务器·adb