- 版本1.5.19
- 有一个双机负载均衡的需求,要求机器故障后自动将流量打到未故障机器上,故障恢复后,自动双机分流。这就涉及主动健康检查的概念,前置机需要主动监测代理机器的状态,决定流量走哪条通路。一开始使用nginx,发现原生不支持主动状态检测,试了下第三方插件,发现不能使用tcp代理,调研了下,发现haproxy可以满足我的需求。
配置文件
cfg
# 全局配置
global
log 127.0.0.1 local2
chroot /var/lib/haproxy
pidfile /var/run/haproxy.pid
maxconn 4000
user haproxy
group haproxy
daemon
# turn on stats unix socket
stats socket /var/lib/haproxy/stats
# 默认配置
defaults
log global # 继承全局日志配置
mode tcp # 启用TCP模式(四层代理)
retries 3 # 连接失败重试次数
timeout connect 5s # 与后端服务器建立连接的超时时间
timeout client 60s # 客户端连接超时时间
timeout server 60s # 后端服务器响应超时时间
option tcplog # 记录TCP详细日志
option log-health-checks # 记录健康检查日志
# TCP前端配置(接收客户端请求)
frontend tcp_front
bind *:8080 # 监听12345端口(可自定义)
default_backend tcp_back # 默认转发到后端服务器组
# 后端服务器组配置(含主动健康检测)
backend tcp_back
balance roundrobin # 负载均衡策略
# 主动健康检测配置(TCP协议专用)
option tcp-check # 启用TCP协议检测
tcp-check connect # 检测方式:尝试建立TCP连接
# 后端服务器1配置
server server1 17.0.32.199:8081 check inter 3s rise 2 fall 3 weight 1 # 权重1(权重越高分配到的请求越多)
# 后端服务器2配置
server server2 17.0.32.199:8082 check inter 3s rise 2 fall 3 weight 1
# 健康状态监控页面(可选)
listen stats
bind *:8089 # 监控页面端口
mode http # HTTP模式
stats enable # 启用统计功能
stats uri /haproxy-stats # 访问路径:http://IP:8080/haproxy-stats
stats auth admin:123456 # 登录账号密码(admin/123456)
stats refresh 5s # 页面自动刷新间隔5秒
stats realm HAProxy\ Statistics # 认证提示信息
安装
shell
tar -xzvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
make TARGET=linux-glibc USE_OPENSSL=1 USE_PCRE=1 USE_ZLIB=1
make install PREFIX=/usr/local/haproxy
mkdir -p /etc/haproxy
# 写配置文件/etc/haproxy/haproxy.cfg
useradd -r haproxy
mkdir -p /var/lib/haproxy /run/haproxy
启动
shell
cd /usr/local/haproxy
sbin/haproxy -f /etc/haproxy/haproxy.cfg