1.介绍
HAProxy是什么
HAProxy是一个免费的负载均衡软件,可以运行于大部分主流的Linux操作系统上。
HAProxy提供了L4(TCP)和L7(HTTP)两种负载均衡能力,具备丰富的功能。HAProxy的社区非常活跃,版本更新快速(最新稳定版1.7.2于2017/01/13推出)。最关键的是,HAProxy具备媲美商用负载均衡器的性能和稳定性。
因为HAProxy的上述优点,它当前不仅仅是免费负载均衡软件的首选,更几乎成为了唯一选择。
HAProxy的核心功能
- 负载均衡:L4和L7两种模式,支持RR/静态RR/LC/IP Hash/URI Hash/URL_PARAM Hash/HTTP_HEADER Hash等丰富的负载均衡算法
- 健康检查:支持TCP和HTTP两种健康检查模式
- 会话保持:对于未实现会话共享的应用集群,可通过Insert Cookie/Rewrite Cookie/Prefix Cookie,以及上述的多种Hash方式实现会话保持
- SSL:HAProxy可以解析HTTPS协议,并能够将请求解密为HTTP后向后端传输
- HTTP请求重写与重定向
- 监控与统计:HAProxy提供了基于Web的统计信息页面,展现健康状态和流量数据。基于此功能,使用者可以开发监控程序来监控HAProxy的状态
2.安装
yum install haproxy
3.配置
global
daemon
user root
group root
# 工作目录
chroot /usr/local/etc/haproxy
defaults
log 127.0.0.1 local0 err #[err warning info debug]
mode http #默认的模式mode { tcp|http|health },tcp是4层,http是7层,health只会返回OK
retries 2 #两次连接失败就认为是服务器不可用,也可以通过后面设置
option redispatch #当serverId对应的服务器挂掉后,强制定向到其他健康的服务器
option abortonclose #当服务器负载很高的时候,自动结束掉当前队列处理比较久的链接
option dontlognull #日志中不记录负载均衡的心跳检测记录
maxconn 4096 #默认的最大连接数
timeout connect 5000ms #连接超时
timeout client 30000ms #客户端超时
timeout server 30000ms #服务器超时
#timeout check 2000 #=心跳检测超时
######## 监控界面配置 #################
listen admin_status
# 监控界面访问信息
bind 0.0.0.0:8888
mode http
# URI相对地址
stats uri /dbs
# 统计报告格式
stats realm Global\ statistics
# 登录账户信息
stats auth admin:123456
########frontend配置##############
######## mysql负载均衡配置 ###############
listen proxy-mysql
bind 0.0.0.0:23306
mode tcp
# 负载均衡算法
# static-rr 权重, leastconn 最少连接, source 请求IP, 轮询 roundrobin
balance roundrobin
# 日志格式
option tcplog
# 在 mysql 创建一个没有权限的haproxy用户,密码为空。 haproxy用户
# create user 'haproxy'@'%' identified by ''; FLUSH PRIVILEGES;
option mysql-check user haproxy
# 这里是容器中的IP地址,由于配置的是轮询roundrobin,weight 权重其实没有生效
server MYSQL_1 10.6.8.173:3306 check weight 1 maxconn 2000
server MYSQL_2 10.6.8.174:3306 check weight 1 maxconn 2000
#server MYSQL_3 192.168.130.102:3306 check weight 1 maxconn 2000
# 使用keepalive检测死链
# option tcpka
#########################################
######## 代理网站负载均衡配置 ###############
frontend http-webmain
bind *:31317
mode http
option forwardfor
option http-server-close
default_backend mybackend
backend mybackend
mode http
option forwardfor
option http-server-close
server app1 10.0.39.253:31317 check
#########################################
例子2
代理 8081
global
maxconn 2000000
log 127.0.0.1 local1
#user vyos
#group users
uid 1000
gid 100
daemon
#stats socket /home/vyos/zvr/lb/sock/84284cf807fe4398a94ad33da1c55a02.sock user vyos
stats socket /home/vyos/zvr/lb/sock/84284cf807fe4398a94ad33da1c55a02.sock gid 100 uid 1000
ulimit-n 4000100
nbthread 1
defaults
log global
option dontlognull
option http-server-close
frontend 84284cf807fe4398a94ad33da1c55a02
mode http
option forwardfor
bind 10.0.42.108:8081
timeout client 60s
default_backend default-84284cf807fe4398a94ad33da1c55a02
backend default-84284cf807fe4398a94ad33da1c55a02
mode http
balance roundrobin
timeout server 60s
timeout connect 60s
server nic-192.168.140.189 192.168.140.189:8081 check port 8081 inter 5s rise 2 fall 2
4.启动
haproxy -f haproxy.cfg
5.删除多余的进程
kill $(ps aux | grep 'haproxy' | awk '{print $2}')
参考
http://www.haproxy.org/