title: HAProxy基础学习笔记
date: 2018-11-05 11:53:00
tags:
- HAProxy
- 学习笔记
HAProxy代理软件基础学习笔记
基础知识
- HAProxy是使用C语言编写的,提供负载均衡,以及基于TCP和HTTP的应用程序代理。它支持Client-HAProxy,HAProxy-Server的全程SSL链接;
- HAProxy采用单线程事件驱动型非阻塞引擎,支持较大的并发数链接,具有较高的性能和稳定性;多线程或多进程受内存、系统调度、锁的限制,很少能处理数千并发链接。事件驱动型因为有更好的资源和事件管理的用户空间实现所有任务,所以可以处理较大并发数链接。 1
- HAProxy适用于负载大的Web站点,支持数以万计的并发连接,它的运行模式可以简单安全的整合到当前的架构中,使Web服务器不被暴露到网络中;
- HAProxy还提供基于Web的统计信息页面,用于展现健康状态和数据流量;
- HAProxy常见的架构形式如下:2
核心功能
- 负载均衡
- 提供2种负载均衡模式:TCP伪四层和HTTP七层
- 健康检查
- 支持TCP和HTTP两种健康检查模式
- 会话保持
- 对尉氏县会话共享的应用集群,可以通过Insert\Reweite\Prefix Cookie多种Hash方式实现会话保持
- SSL
- 可以解析HTTPS协议,并能够将请求解密为HTTP后后端传输
- 监控与统计
- 提供基于Web的统计信息页面
安装
-
下载HAProxy压缩包,版本号是1.8.14
- 下载地址:https://www.haproxy.org
-
将下载的压缩包上传到服务器中,解压 3
tar -xzvf haproxy-1.8.14.tar.gz cd haproxy-1.8.14 uname -r # 获取系统内核版本信息 make TARGET=linux310 ARCH=x86_64 PREFIX=/usr/local/haproxy -j 20 # TRAGET 指定操作系统内核版本 ;ARCH 指定操作系统位数; PREFIX指定安装路径;使用参数-j 可以指定用于编译的线程数目 make install
-
完成安装
-
准备配置文件
cd /usr/local/haproxy mkdir conf cd conf touch haproxy.cfg # haproxy的配置文件 user add -r -s /bin/nologin haproxy
-
准备启动脚本
cd ~/haproxy-1.8.14/example cp haproxy.init /etc/init.d/haproxy chmod +x haproxy vi haproxy # 分别修改HAProxy配置文件目录和sbin目录 HAP_HOME=/usr/local/haproxy BIN=${HAP_HOME}/sbin CFG=${HAP_HOME}/conf/${BASENAME}.cfg # 如果出现“第26行,期待一元表达式”的提示信息,修改NETWORK字段 [ ${NETWORKING}x = "no"x ] && exit 0
配置
- 配置文件分为2大段:全局配置(Global),代理配置(Proxies)
全局配置
- 全局配置建议不做修改,包含的字段有:
- 进程与安全配置相关的参数;
- 性能配置参数;
- Debug配置参数;
- 用户列表参数;
- peers参数;
- Mailers参数
代理配置
- 代理配置又分为3部分,分别是defaults,frontend,backend,listen。
- defaults
- 默认参数的配置,在该部分内配置的参数,会被自动引用到之后的frontend,backend,listen,某些参数属于公用的配置,既可以在defaults中配置,也可以在frontend,backend,listen中配置,两者都配置的以后者为准,defaults中的配置会被覆盖;
- frontend
- 负责配置接受用户请求的虚拟前段节点,类似于nginx配置文件中的server{}字段;
- backend
- 负责配置集群后端服务器集群的配置,用来定义一组真实服务器,用来处理用户发出的请求,类似于nginx配置中的upstream{}字段;
- listen
- 用来配置前段和haproxy后端
- defaults
配置文件5 6
global
log 127.0.0.1 local0 # 全局日志文件配置条目,最多可定义2个
log 127.0.0.1 local1 notice
chroot /var/lib/haproxy # 切换根目录,将haproxy运行在/var/lib/haproxy,增加其安全性
# stats socket /run/haproxy/admin.sock mode 660 level admin
# stats timeout 30s
user haproxy # 指定运行用户和组
group haproxy
daemon # 设定haproxy以后台方式运行
maxconn 45000 #每个进程每秒最大处理的连接数
# maxsslconn # 设定每个进程所能接受的ssl最大并发连接数
defaults
log global # 继承全局日志
mode http # 设置haproxy默认的运行模式,默认为http,支持tcp、http,tcp常用于ssl\ssh\smtp等服务
option httplog
option dontlognull # 不记录上级负载均衡发送的用于检测状态的心跳包
option http-server-close # 客户端与服务器在完成一次请求后,hap会主动关闭该tcp连接,有助于提供性能
option forwardfor except 127.0.0.0/8 # 由于hap工作在反向代理方向,后端集群中的服务器可能无法获取发送请求的真实ip,使用forwardfor可以在报文中分装新的字段记录请求段ip,使用except排除本地的ip地址
option redispatch # 是否允许在session失败后重新分配
retries 3 # 连接后端服务器失败重试次数,超出该数,hap会将对应的后端服务器设置为不可用状态
timeout http-request 10s #
timeout connect 10s # 成功连接到一台服务器的最长等待时间,默认为毫秒,可以换用其他单位
timeout client 10s # 连接客户端发送数据的最长等待时间,默认为毫秒
timeout server 10s # 服务器端回应客户端数据放的最长等待时间
timeout check 10s # 设置对后端服务器的检测超时时间
frontend main
bind :80,:443 # 同时监听2个端口,之间不能有空格,监听端口要重启服务
# bind 192.168.0.93:8080
mode http
# sats uri /haproxy?stats
# dfault_backend http_back
default_bakcend webserver
backend webserver
balance roundrobin # 后端集群服务器组内的调度算法,roundrobin轮循,依次访问每个后端服务器
server webserver 192.168.0.91:80 check
server webserver 192.168.0.92:80 check
# server options: weight 支持配置权重
# 动态算法:支持权重的运行时调整,支持慢启动,每个后端中最多支持4095个server
# static-rr 静态算法,不支持权重运行时调整及慢启动,后端主机数量无上限
server webserver 192.168.0.93:80 check weight 3 # 加权轮询,权重为3,未设置的权重默认为1
server webserver 192.168.0.94:80 check
listen hap_page
mode http
bind *:8081
option httplog # 采用http日志格式
stats refresh 30s # 统计页面自动刷新时间
stats uri /hap?stats # 统计页面url地址
stats realm HAProxy Manage Page # 弹出用户名密码对话框的提示文本
stats auth root:haproxy # 设置登录统计页面的用户名密码
stats hide-version # 隐藏统计页面上的HAProxy版本信息
错误提示
统计页面
参考
- http://blog.51cto.com/11010461/2139872
- https://www.haproxy.org
- http://blog.51cto.com/11010461/2139872
- https://cbonte.github.io/haproxy-dconv/1.8/configuration.html
- https://www.unixmen.com/installing-haproxy-for-load-balancing-on-centos-7/
- https://www.cnblogs.com/pangguoping/p/7647091.html