HAProxy 负载均衡器
HAProxy 负载均衡器
一、HAProxy 简介
HAProxy是一个使用C语言编写的自由开源软件,提供高可用性、负载均衡以及基于TCP和HTTP的应用程序代理功能。
特性概述:
- 适用于高负载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 安装
[root@yyh1 ~]# yum -y install haproxy
1.2、源码安装
1.安装编译环境
[root@yyh1 ~]# yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel gcc-c++ zlib-devel lua
2.创建用户
[root@yyh1 ~]# useradd -r -M -s /sbin/nologin haproxy
3.编译安装
[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 内核参数
[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 服务
[root@yyh1 haproxy-2.1.3]# mkdir /etc/haproxy
[root@yyh1 haproxy-2.1.3]# vim /etc/haproxy/haproxy.cfg
内容如下
globallog 127.0.0.1 local0 info#log loghost local0 infomaxconn 20480
#chroot /usr/local/haproxypidfile /var/run/haproxy.pid#maxconn 4000user haproxygroup haproxydaemon
#---------------------------------------------------------------------
#common defaults that all the 'listen' and 'backend' sections will
#use if not designated in their block
#---------------------------------------------------------------------
defaultsmode httplog globaloption dontlognulloption httpcloseoption httplog#option forwardforoption redispatchbalance roundrobintimeout connect 10stimeout client 10stimeout server 10stimeout check 10smaxconn 60000retries 3
#--------------统计页面配置------------------
listen admin_statsbind 0.0.0.0:8189stats enablemode httplog globalstats uri /haproxy_statsstats realm Haproxy\ Statisticsstats auth admin:admin#stats hide-versionstats admin if TRUEstats refresh 30s
#---------------web设置-----------------------
listen webclusterbind 0.0.0.0:80mode http#option httpchk GET /index.htmllog globalmaxconn 3000balance roundrobincookie SESSION_COOKIE insert indirect nocacheserver rs1 192.168.100.20:80 checkserver rs2 192.168.100.30:80 check
4、启动 haproxy,配置 haproxy.service 服务单元文件
[root@yyh1 ~]# 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@yyh1 ~]# systemctl daemon-reload
5、配置日志信息
[root@yyh1 ~]# vim /etc/rsyslog.conf
打开UDP和TCP服务
6、重启服务
[root@yyh1 ~]# systemctl restart rsyslog
[root@yyh1 ~]# systemctl enable rsyslog
[root@yyh1 ~]# systemctl restart haproxy
[root@yyh1 ~]# systemctl enable haproxy
7、测试访问并查看日志
发现负载均衡轮询
查看日志
[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可以指定具体使用后端的backendbackend
:后端服务集群的配置,真实服务器,一个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)
globallog 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)
defaultsmode http # 所处理的类别(7层代理http,4层代理tcp)log global # 引入global定义的日志格式option dontlognull # 不记录健康检查日志信息option httpclose # 每次请求完毕后主动关闭http通道,haproxy不支持keep-alive模式option httplog # 日志类别为http日志格式#option forwardfor # 如果后端服务器需要获取客户端的真实ip,需要配置的参数,可以从http header中获取客户端的ipoption redispatchbalance roundrobin # 设置默认负载均衡方式,轮询方式timeout connect 10s # 默认连接超时时间timeout client 10s # 默认客户端超时时间timeout server 10s # 默认服务器超时时间timeout check 10s # 设置超时检查超时时间 maxconn 60000 # 最大连接数retries 3 # 3次连接失败就认为服务器不可用,也可以通过后面设置
6、前端虚拟节点配置(frontend)
frontend http_80_in bind 0.0.0.0:80 # 设置侦听端口,即haproxy提供的web服务端口,和lvs的vip类似mode http log global option httpclose option httplog option forwardfordefault_backend wwwpool # 设置请求默认转发的后端服务池
7、定义后端服务集群配置(backend)
backend wwwpool # 定义wwwpool服务器组mode httpoption redispathoption abortonclosebalancer 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)
listen admin_stats # frontend和backend的组合体,监控组的名称,按需自定义名称bind 0.0.0.0:8189 # 侦听端口stats enable # 开启监控mode httplog globalstats uri /haproxy_stats # 监控页面的url访问路径stats realm Haproxy\ Statistics # 监控页面的提示信息stats auth admin:admin # 监控页面的用户和密码#stats hide-version # 隐藏统计页面上的haproxy版本信息stats admin if TRUE # 手工启用/禁用,后端服务器haproxystats refresh 30s # 每个30秒自动刷新监控页面
五、常用命令与验证
- 检查配置文件语法:
haproxy -f /etc/haproxy/haproxy.cfg -c
- 重新加载配置:
systemctl reload haproxy
- 查看监控页面:
http://<IP>:8189/haproxy_stats