Haproxy2.1支持UDP
https://blog.51cto.com/johnnyfang/5301681
Haproxy常用配置
配置文件在/etc/haproxy/haproxy.cfg
HAProxy配置文件可以分五部分:
参数 | 解释 |
---|---|
global: | 全局配置参数段,主要用来控制Haproxy启动前的进程及系统相关设置 |
defaults: | 配置一些默认参数,如果frontend,backend,listen等段未设置则使用defaults段配置。 |
listen: | 监听 |
frontend: | 用来匹配接收客户所请求的域名,uri等,并针对不同的匹配,做不同的请求处理。 |
backend: | 定义后端服务器集群,以及对后端服务器的一些老权重、队列、连接数等选项的设置。 |
HAProxy配置文件示例
#---------------------------------------------------------------------
# 全局设置
#---------------------------------------------------------------------
global
# 为了让这些消息记录到 /var/log/haproxy.log,你需要:
#
# 1) 配置 syslog 以接受网络日志事件。这可以通过在 /etc/sysconfig/syslog 中
# 添加 '-r' 选项来完成
#
# 2) 配置 local2 事件将日志记录到 /var/log/haproxy.log 文件。可以在
# /etc/sysconfig/syslog 中添加如下行:
#
# local2.* /var/log/haproxy.log
#
log 127.0.0.1 local2 # 配置日志输出到本地 syslog 的 local2 设施
# log 127.0.0.1 local0 # 日志输出配置,所有日志都记录在本机,通过local0输出
chroot /var/lib/haproxy # 更改根目录,以提高安全性
pidfile /var/run/haproxy.pid # 指定 PID 文件位置
maxconn 4000 # 设置最大连接数为 4000
user haproxy # 运行进程的用户
group haproxy # 运行进程的用户组
# uid 99 # 所属运行的用户uid
# gid 99 # 所属运行的用户组
daemon # 以守护进程方式运行
nbproc 1 #启动1个haproxy实例
# 开启统计信息的 Unix 套接字
stats socket /var/lib/haproxy/stats
# debug # 启用调试模式,输出详细日志信息
# quiet # 启用静默模式,减少日志输出
#---------------------------------------------------------------------
# 默认设置,所有的 'listen' 和 'backend' 部分如果没有特别指定会使用这些设置
#---------------------------------------------------------------------
defaults
# 默认的模式:tcp|http|health
mode http # 设置默认模式为 HTTP
# log global # 使用全局日志设置
log 127.0.0.1 local3 #日志文件的输出定向
option httplog # 日志类别,采用http日志格式
option dontlognull # 不记录空连接的日志
option http-server-close # 每次请求后关闭 HTTP 连接
option redispatch # 当serverid对应的服务器挂掉后,强制定向到其他健康服务器
option retries 3 # 三次连接失败则认证服务器不可用
option forwardfor # 将客户端真实ip加到HTTP Header中供后端服务器读取
option httpclose # 每次请求完毕后主动关闭http通道,haproxy不支持keep-alive,只>能模拟这种模式的实现
option abortonclose # 当服务器负载很高时,自动结束掉当前队列中处理比较久的链接
timeout http-request 10s # HTTP 请求超时时间为 10 秒
timeout queue 1m # 队列超时时间为 1 分钟
timeout connect 10s # 连接超时时间为 10 秒
timeout client 1m # 客户端超时时间为 1 分钟
timeout server 1m # 服务器超时时间为 1 分钟
timeout http-keep-alive 10s # HTTP 保持连接的超时时间为 10 秒
timeout check 10s # 健康检查超时时间为 10 秒
maxconn 3000 # 每个进程的最大连接数为 3000
# stats enable # 全局启用统计功能
# stats uri /haproxy-stats # 设置HAProxy监控页面的访问地址为'/haproxy-stats'
# stats auth test:test123 # 设置监控页面的用户和密码
# stats hide-version # 隐藏统计页面上的HAProxy版本信息
#---------------------------------------------------------------------
# 统计页面设置
#---------------------------------------------------------------------
listen stats
mode http # 设置后端为HTTP模式
balance source # 使用源IP地址进行负载均衡
bind *:8080 # 监听所有接口的 8080 端口
mode http # 使用 HTTP 模式
stats enable # 启用统计页面
stats uri /haproxy?stats # 统计页面的 URI
stats realm Haproxy\ Statistics # 统计页面的认证域
stats auth admin:admin # 统计页面的访问认证(用户名:密码)
option httpchk GET /welcome.html HTTP/1.1\r\nHost:www.taobao.net # 定义HTTP健康检查请求方法和路径
server denlai1 10.5.5.114:80 check inter 1500 rise 3 fall 3 # 定义后端服务器denlai1,启用健康检查,每隔1500毫秒检查一次,连续3次成功认为正常,连续3次失败认为故障
server denlai2 10.6.6.104:80 check inter 1500 rise 3 fall 3 # 定义后端服务器denlai2,启用健康检查,每隔1500毫秒检查一次,连续3次成功认为正常,连续3次失败认为故障
#---------------------------------------------------------------------
# 前端设置
#---------------------------------------------------------------------
frontend http-in
bind *:81 # 监听所有接口的 81 端口
mode http # 使用 HTTP 模式
option httplog # 日志类别,采用http日志格式
log global # 使用全局日志设置
# default_backend servers # 默认的后端服务器池
default_backend htmpool # 静态服务器池
#---------------------------------------------------------------------
# 后端设置
#---------------------------------------------------------------------
backend htmpool
balance roundrobin # 使用轮询算法进行负载均衡
server server1 192.168.1.1:80 check # 定义后端服务器1,并进行健康检查
server server2 192.168.1.2:80 check # 定义后端服务器2,并进行健康检查
# balance leastconn # 负载均衡算法
# option httpchk HEAD /index.html HTTP/1.0 #健康检查
# server web1 192.168.2.10:80 cookie 1 weight 5 check inter 2000 rise 2 fall 3
# server web2 192.168.2.11:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3
# web1/web2:自定义服务器别名
# 192.168.2.10:80:服务器IP:Port
# cookie 1/2:表示serverid
# weight: 服务器权重,数字越大分配到的请求数越高
# check: 接受定时健康检查
# inter 2000: 检查频率
# rise 2: 两次检测正确认为服务器可用
# fall 3: 三次失败认为服务器不可用
#---------------------------------------------------------------------
# main frontend which proxys to the backends
# 主前端,负责将请求代理到后端
#---------------------------------------------------------------------
frontend main *:5000
acl url_static path_beg -i /static /images /javascript /stylesheets # 定义名为url_static的访问控制列表,匹配以/static、/images、/javascript或/stylesheets开头的路径
acl url_static path_end -i .jpg .gif .png .css .js # 定义名为url_static的访问控制列表,匹配以.jpg、.gif、.png、.css或.js结尾的路径
use_backend static if url_static # 如果请求路径匹配url_static规则,则使用static后端
default_backend app # 默认使用app后端
#---------------------------------------------------------------------
# static backend for serving up images, stylesheets and such
# 静态资源后端,用于提供图片、样式表等静态资源
#---------------------------------------------------------------------
backend static
balance roundrobin # 使用轮询算法进行负载均衡
server static 127.0.0.1:4331 check # 定义名为static的后端服务器,IP为127.0.0.1,端口为4331,启用健康检查
#---------------------------------------------------------------------
# round robin balancing between the various backends
# 各种后端之间的轮询负载均衡
#---------------------------------------------------------------------
backend app
balance roundrobin # 使用轮询算法进行负载均衡
server app1 127.0.0.1:5001 check # 定义名为app1的后端服务器,IP为127.0.0.1,端口为5001,启用健康检查
server app2 127.0.
# 定义一个名为MyRdp的监听器
listen MyRdp
# 设定为TCP模式,用于处理纯TCP流量
mode tcp
# 绑定监听地址和端口,监听所有IP地址上的3389端口(远程桌面协议端口)
bind *:3389
# 定义后端服务器myRdp1,IP地址为192.168.1.100,端口3389,最大连接数为32
server myRdp1 192.168.1.100:3389 maxconn 32
# 启用TCP日志记录,以便记录详细的连接日志
option tcplog
# 定义一个名为web_vip的监听器,并绑定到0.0.0.0:80上
listen web_vip 0.0.0.0:80
# 设定为HTTP模式,用于处理HTTP请求
mode http
# 启用HTTP日志记录,以便记录详细的HTTP请求日志
option httplog
# 启用X-Forwarded-For头部,用于记录客户端的真实IP地址,排除本地环回地址(127.0.0.0/8)
option forwardfor except 127.0.0.0/8
# 启用统计页面,访问路径为/haproxy-stats
stats uri /haproxy-stats
# 定义一个监听实例,名称为w.gdu.me,绑定到0.0.0.0:80端口
listen w.gdu.me 0.0.0.0:80
option httpchk GET /index.html # 定义HTTP健康检查,发送GET请求到/index.html
server s1 192.168.2.10:80 weight 3 check # 定义名为s1的后端服务器,IP为192.168.2.10,端口为80,权重为3,启用健康检查
server s3 192.168.2.11:80 weight 3 check # 定义名为s3的后端服务器,IP为192.168.2.11,端口为80,权重为3,启用健康检查
# Haproxy统计页面
# --------------------------------------------------------------------------------------------
listen haproxy_stats
bind 0.0.0.0:1080 # 侦听在0.0.0.0:1080端口
mode http # 设置监听实例为HTTP模式
log 127.0.0.1 local 0 err # 设置日志记录到127.0.0.1的本地设备,记录错误日志
stats refresh 30s # 统计页面每30秒刷新一次
stats uri /haproxy-stats # 统计页面的访问URI
stats realm Haproxy\ Statistics # 统计页面的身份验证领域
stats auth admin:admin # 设置访问统计页面的用户名和密码为admin:admin
stats auth test:test # 另一个访问统计页面的用户名和密码为test:test
stats hide-version # 隐藏统计页面上的HAProxy版本信息
stats admin if TRUE # 允许在统计页面上手动启用/禁用后端服务器
# 网站检测监听配置
# --------------------------------------------------------------------------------------------
listen site_status
bind 0.0.0.0:1081 # 侦听在0.0.0.0:1081端口
mode http # 设置监听实例为HTTP模式
log 127.0.0.1 local0 err # 设置日志记录到127.0.0.1的本地设备,记录错误日志
# 网站健康检查URI,用来检测HAProxy管理的网站是否正常,正常返回200、异常返回500
monitor-uri /site_status
# 定义网站down时的策略
acl site_dead nbsrv(denali_server) lt 1 # 当denali_server中有效服务器数少于1时,返回true
acl site_dead nbsrv(tm_server) lt 1 # 当tm_server中有效服务器数少于1时,返回true
acl site_dead nbsrv(mms_server) lt 1 # 当mms_server中有效服务器数少于1时,返回true
# 当满足策略的时候返回HTTP 500,否则返回HTTP 200
monitor fail if site_dead
# 声明一个监测请求的来源网络
monitor-net 192.168.0.252/31
# HTTPS的配置方法
# --------------------------------------------------------------------------------------------
listen login_https_server
bind 0.0.0.0:443 # 绑定HTTPS的443端口
mode tcp # HTTPS必须使用TCP模式
log global # 使用全局的日志配置
balance roundrobin # 负载均衡方式为轮询
option httpchk GET /member/login.jhtml HTTP/1.1\r\nHost:login.daily.taobao.net # 定义HTTP健康检查,发送GET请求到/member/login.jhtml,指定Host头为login.daily.taobao.net
server vm94f.sqa 192.168.212.94:443 check port 80 inter 6000 rise 3 fall 3 # 定义后端服务器vm94f.sqa,IP为192.168.212.94,端口为443,启用健康检查
server v215120.sqa 192.168.215.120:443 check port 80 inter 6000 rise 3 fall 3 # 定义后端服务器v215120.sqa,IP为192.168.215.120,端口为443,启用健康检查
# frontend配置
# --------------------------------------------------------------------------------------------
frontend http_80_in
bind 0.0.0.0:80 # 监听端口
mode http # 设置前端为HTTP模式
log global # 使用全局的日志配置
option httplog # 启用HTTP日志记录
option httpclose # 每次请求完毕后主动关闭HTTP通道,HAProxy不支持keep-alive模式
option forwardfor # 如果后端服务器需要获得客户端的真实IP,需要配置此参数,可以从HTTP头中获得客户端IP
# HAProxy的日志记录内容配置
capture request header Host len 40 # 捕获请求中的主机名,长度为40
capture request header Content-Length len 10 # 捕获请求中的内容长度,长度为10
capture request header Referer len 200 # 捕获请求中的引用地址,长度为200
capture response header Server len 40 # 捕获响应中的服务器名,长度为40
capture response header Content-Length len 10 # 捕获响应中的内容长度,长度为10(可配合option logasap使用)
capture response header Cache-Control len 8 # 捕获响应中的缓存控制,长度为8
capture response header Location len 20 # 捕获响应中的重定向地址,长度为20
# ACL策略规则定义
#-------------------------------------------------
acl denali_policy hdr_reg(host) -i ^(www.gemini.taobao.net|my.gemini.taobao.net|auction1.gemini.taobao.net)$ # 如果请求的域名满足正则表达式返回true(-i:忽略大小写)
acl tm_policy hdr_dom(host) -i trade.gemini.taobao.net # 如果请求域名满足trade.gemini.taobao.net返回true
acl invalid_req url_sub -i sip_apiname= # 在请求URL中包含sip_apiname=,此控制策略返回true,否则为false
acl timetask_req url_dir -i timetask # 在请求URL中存在timetask作为部分地址路径,此控制策略返回true,否则返回false
acl missing_cl hdr_cnt(Content-length) eq 0 # 当请求的header中Content-Length等于0时返回true
# ACL策略匹配响应
#-------------------------------------------------
block if missing_cl # 当请求中header中Content-Length等于0,阻止请求返回403
block if !invalid_req || timetask_req # 如果不满足策略invalid_req,或者满足策略timetask_req,阻止请求
use_backend denali_server if denali_policy # 当满足denali_policy的策略时,使用denali_server的backend
use_backend tm_server if tm_policy # 当满足tm_policy的策略时,使用tm_server的backend
reqisetbe ^Host:\ img dynamic # 定义根据关键字选择backend
reqisetbe ^[^\ ]*\ /(img|css)/ dynamic # 定义根据关键字选择backend
reqisetbe ^[^\ ]*\ /admin/stats stats # 定义根据关键字选择backend
default_backend mms_server # 以上都不满足的时候,使用默认的mms_server的backend
# HAProxy错误页面设置
errorfile 400 /home/admin/haproxy/errorfiles/400.http
errorfile 403 /home/admin/haproxy/errorfiles/403.http
errorfile 408 /home/admin/haproxy/errorfiles/408.http
errorfile 500 /home/admin/haproxy/errorfiles/500.http
errorfile 502 /home/admin/haproxy/errorfiles/502.http
errorfile 503 /home/admin/haproxy/errorfiles/503.http
errorfile 504 /home/admin/haproxy/errorfiles/504.http
# backend的设置
# --------------------------------------------------------------------------------------------
backend mms_server
mode http # 设置后端为HTTP模式
balance roundrobin # 负载均衡方式为轮询
cookie SERVERID # 允许插入ServerID到Cookie中
option httpchk GET /member/login.jhtml HTTP/1.1\r\nHost:member1.gemini.taobao.net # 心跳检测的URL
server mms1 10.1.5.134:80 cookie 1 check inter 1500 rise 3 fall 3 weight 1 # 定义后端服务器mms1,启用健康检查,心跳频率为1500毫秒,权重为1
server mms2 10.1.6.118:80 cookie 2 check inter 1500 rise 3 fall 3 weight 2 # 定义后端服务器mms2,启用健康检查,心跳频率为1500毫秒,权重为2
backend denali_server
mode http
balance source # 负载均衡方式为源地址哈希
option allbackups # 设置了backup的时候,默认第一个backup会优先,设置option allbackups后所有备份服务器权重一样
option httpchk GET /mytaobao/home/my_taobao.jhtml HTTP/1.1\r\nHost:my.gemini.taobao.net # 心跳检测URL设置
server denlai1 10.1.5.114:80 minconn 4 maxconn 12 check inter 1500 rise 3 fall 3 # 定义后端服务器denlai1,最小连接数4,最大连接数12,启用健康检查
server denlai2 10.1.6.104:80 minconn 10 maxconn 20 check inter 1500 rise 3 fall 3 # 定义后端服务器denlai2,最小连接数10,最大连接数20,启用健康检查
server dnali-back1 10.1.7.114:80 check backup inter 1500 rise 3 fall 3 # 定义备份服务器dnali-back1,启用健康检查
server dnali-back2 10.1.7.114:80 check backup inter 1500 rise 3 fall 3 # 定义备份服务器dnali-back2,启用健康检查
backend tm_server
mode http
balance leastconn # 负载均衡方式为最少连接
option httpchk GET /trade/itemlist/prepayCard.htm HTTP/1.1\r\nHost:trade.gemini.taobao.net # 心跳检测URL设置
server tm1 10.1.5.115:80 check inter 1500 rise 3 fall 3 # 定义后端服务器tm1,启用健康检查
server tm2 10.1.6.105:80 check inter 1500 rise 3 fall 3 # 定义后端服务器tm2,启用健康检查
# reqisetbe自定义关键字匹配backend部分
backend dynamic
mode http
balance source
option httpchk GET /welcome.html HTTP/1.1\r\nHost:www.taobao.net # 心跳检测URL设置
server denlai1 10.3.5.114:80 check inter 1500 rise 3 fall 3 # 定义后端服务器denlai1,启用健康检查
server denlai2 10.4.6.104:80 check inter 1500 rise 3 fall 3 # 定义后端服务器denlai2,启用健康检查
HAProxy常用命令
# 检查配置文件是否有误
haproxy -f haproxy.cfg -c