HAproxy配置文件详解
C语言编写的开源软件,高可用性,负载均衡,基于TCP和HTTCP的应用程序代理,满足中小型网站访问量需求。
优点:
1、自带节点健康检查功能,通过链接页面的头文件信息进行检查(精细高级的检查方式,检查后端服务器是否可用)
2、支持基于源地址的链接调度 (包括:端口 URL 访问控制列表)
3、支持虚拟主机
4、可以对Mysql读 进行负载均衡,对后端Mysql节点进行检测和负载均衡
调度方式balance:此关键字用来定义负载均衡算法
轮询方式 | 轮询注解 |
---|---|
roundrobin | 基于权重进行轮叫调度的算法,在服务器的性能分布比较均匀时,这是一种最公平合理,常用的算法。此算法使用较为频繁。 |
static-rr | 基于权重进行轮叫调度的算法,不过此算法为静态方法,在运行时调整期服务器权重不会生效,需要重启haproxy服务生效 |
source | 基于请求源IP的算法。此算法先对请求的源IP进行hash运算,可以使同一个客户端IP的请求始终被转发到某台特定的后端服务器 |
leastconn | 数据库负载均衡mysql+haproxy的常用轮询方式,不适用于http。此算法会将新的连接请求转发具有最少连接数目的后端服务器。 |
uri / uri_param / hdr | 根据url路径进行转发匹配后端服务器。hdr根据http头部进行转发 |
健康检查方式:
http健康检查方式 | 注解 |
---|---|
GET | client请求服务器资源,服务器返回对应资源 |
HEAD | 只请求响应报文中的HTTP头部 |
POST | 将客户端的数据提交到服务器 |
PUT | 从客户端向服务器传送的数据代替指定的文档内容 |
DELETE | 删除,请求服务器删除 request-URI 标识资源 |
MOVE | 请求服务器将指定页面转移到另外网络 |
配置文件详解
路径:/etc/haproxy/haproxy.cfg
HAproxy配置文件主要由5部分组成,但有些部分并不是必须的
配置文件组成部分 | 实现功能 |
---|---|
global 全局配置段 | 进程,安全配置,性能调整,Debug参数 |
defaults 默认配置段 | 为frontend, listen, backend提供默认配置 |
frontend ACL配置段 | 此部分用于设置接收用户请求的前端虚拟节点,并根据ACL规则直接指定要使用的后端backend |
backend 真实集群配置段 | 此部分用于设置群集后端服务集群的配置,处理前端用户的请求,添加真实的服务器 |
listen 代理配置段 | 用来设置haproxy代理服务页面,监听整个后端集群状态 |
全局配置
global
log 127.0.0.1 local0 日志输出配置,所有日志都记录在本机,通过local0输出
#log 127.0.0.1 local0 notice local0代表日志设备,info,notice代表日志级别。
#log 127.0.0.1 local0 info
maxconn 4096 #每个HAproxy进程的最大连接并发数
chroot /usr/local/haproxy #改变当前工作目录,软件安装目录
uid 99 #所属运行的用户uid,也可以设置运行HAproxy进程的用户
gid 99 #所属运行的用户组gid,也可以设置运行HAproxy进程的用户和组
daemon #以后台形式运行ha-proxy
nbproc 3 #启动3个ha-proxy进程,可以设置多个进程提高性能
要小于服务器的CPU内核数,过多的进程可能会导致进程崩溃
pidfile /usr/local/haproxy/run/haproxy.pid #pid文件位置
debug #调试模式,输出启动信息到标准输出
默认的全局配置
defaults
log global #集成全局配置中的日志格式
mode http #所处理的类别(#7层 http;4层tcp) tcp模式一般用于,SSL,SSH,SMTP,MySQL等应用
option httplog #日志类别http日志格式
option http-server-close #每次请求完毕后主动关闭http通道
option dontlognull # 不记录健康检查的日志信息
option forwardfor except 127.0.0.1 如果后端服务器需要获得客户端真实ip需要配置的参数
可以从http header中获得客户端ip
option redispatch #serverID对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的连接
maxconn 20480 #最大连接数
stats refresh 30 统计页面刷新间隔
retries 3 3次连接失败就认为该服务不可用
balance roundrobin # rr 轮询负载均衡
#balance source # source 轮询负载均衡
#balance leastconn # 最小连接的负载均衡方式,推荐在Mysql、LDAP等情况下使用
timeout connect 5000 连接超时
timeout client 50000 客户端超时
timeout server 50000 后端服务器超时
timeout check 2000 设置对后端服务器的检测超时时间,默认单位是毫秒
timeout http-request 10s 请求报文的超时时长
frontend 虚拟前端部分
frontend www
bind *:80 | 0.0.0.0:80 只能在frontend和listen部分进行定义,用于定义一个或几个监听的套接字
bind 主机名|IP地址|*:port interface <ens33>(可选)
option httplog #启用日志记录http请求
option forwardfor #通过X-Forwarded-For信息,来记录客户端来源IP
option httpclose #表示在客户端和服务器端完成一次连接请求后,HAproxy将主动关闭此TCP连接
log global
default_backend web #指定默认的后端服务器池,指定后端真实服务器。
如果想要查看到 frontend的ACL控制列表写入方法:请点击如下链接
ACL写入规则
backend真实服务器集群部分
backend web 使用backend关键字定义名为web的后端真实服务器组
mode http
option loghttp
option redispatch 如果后端服务器发生故障,会通过此参数,
将客户的请求强制定向到另外一台健康的后端服务器上,以保证服务正常
option abortonclose 此参数可以在服务器负载很高的情况下,自动结束当前队列中处理时间比较长的连接
balance roundrobin 定义负载均衡算法
cookie SERVERID 表示允许向cookie插入serverid。
每台服务器的serverid可在下面的server关键字中使用cookie关键字定义
option httpchk GET /index.html 启用http的服务状态检测功能
option httpchk HEAD /index.html HTTP/1.1\r\nHost:\ www.xxx.com 头部检测格式
server web1 192.168.10.2:80 cookie server1 weight 6 check inter 2000 rise 2 fall 3
server web2 192.168.10.22:9000 cookie server2 weight 6 check inter 2000 rise 2 fall 3
注释如下:
#服务器定义web1,cookie表示serverid为web1
#check inter 2000 检测心跳频率
#rise 3 是三次正确认为服务器可用 fall 3 是三次失败认为服务器不可用
#weight代表权重,backup为备份节点
listen 代理页面监听部分
listen web_stats #通过listen定义了一个名为“web_stats”的监控页面
bind 0.0.0.0:80 #此处可以设置监听页面的端口号,可以是任意端口号
log global
mode http
stats refresh 30s #设置HAproxy监控统计页面自动刷新时间
stats uri /haproxy-stats #设置HAproxy监控统计页面的URL路径,
stats realm welcome logn\ Haproxy #设置登录HAproxy监控统计页面时,密码框上的文本提示信息
stats auth admin:123.com #设置登录HAproxy统计页面的用户名和密码,可以为监控页面设置多个用户名和密码,每行一个
#stats auth shm:123.com
stats hide-version #用来隐藏统计页面上HAproxy的版本信息
stats admin if TURE #可以在监控页面上手工启用或禁用后端真实服务器。