参考
http://www.haproxy.org
HAProxy · GitHub
目录
一、Haproxy环境准备
1、Haproxy简介
1.1、haproxy原理
1.2、Haproxy优点
2、在线apt安装
二、使用Haproxy
1、基本脚本结构示例
2、配置反向代理
3、验证haproxy
3.1、重启服务
3.2、访问后台管理
3.3、访问代理prometheus-server端口
3.4、访问代理grafana端口
一、Haproxy环境准备
1、Haproxy简介
1.1、haproxy原理
haproxy提供高可用性、负载均衡以及基于TCP(第四层)和HTTP(第七层)应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。
haproxy特别适用于那些负载特别大的web站点,这些站点通常又需要会话保持或七层处理。haproxy运行在时下的硬件上,完全可以支持数以万计的并发连接,
并且它的运行模式使得它可以很简单安全的整合进您当前的架构中,同时可以保护你的web服务器不被暴露到网络上。
haproxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。
事件驱动模型因为在有更好的资源和时间管理的用户端(User-Space)实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。
这就是为什么他们必须进行优化以使每个CPU时间片(Cycle)做更多的工作。
1.2、Haproxy优点
(1)免费开源,稳定性也是非常好。单haproxy也跑得不错,稳定性可以与硬件级的F5相媲美。
(2)根据官方文档,haproxy可以跑满10Gbps,这个数值作为软件级负载均衡器是相当惊人的。
(3)haproxy支持连接拒绝:因为维护一个连接的打开的开销是很低的,有时我们很需要限制攻击蠕虫(attack bots),也就是说限制它们的连接打开从而限制它们的危害。这个已经为一个陷于小型DDoS攻击的网站开发了而且已经拯救了很多站点,这个优点也是其它负载均衡器没有的。
(4)haproxy支持全透明代理(已具备硬件防火墙的典型特点):可以用客户端IP地址或者任何其他地址来连接后端服务器。这个特性仅在Linux 2.4/2.6内核打了tcp proxy补丁后才可以使用。这个特性也使得为某特殊服务器处理部分流量同时又不修改服务器的地址成为可能。
(5)haproxy现多于线上的Mysql集群环境,我们常用于它作为MySQL(读)负载均衡。
(6)自带强大的监控服务器状态的页面,实际环境中我们结合Nagios进行邮件或短信报警。
(7)HAProxy支持虚拟主机
2、在线apt安装
apt-get install software-properties-common
add-apt-repository ppa:vbernat/haproxy-2.7
安装完成后服务会自启
systemctl status haproxy
查看版本信息
HA-Proxy version 2.0.29
二、使用Haproxy
1、基本脚本结构示例
global
# global settings here
defaults
# defaults here
frontend
# a frontend that accepts requests from clients
backend
# servers that fulfill the requests
2、配置反向代理
1、端口用途
Haproxy端口 | 被代理服务端口 | 备注 |
3264 | N/A | haproxy管理页面 |
3265 | 9090 | prometheus server |
3266 | 30000 | grafana dashboard |
2、编辑配置文件
/etc/haproxy/haproxy.cfg
globallog /dev/log local0log /dev/log local1 noticechroot /var/lib/haproxystats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listenersstats timeout 30suser haproxygroup haproxydaemon# Default SSL material locationsca-base /etc/ssl/certscrt-base /etc/ssl/private# See: https://ssl-config.mozilla.org/#server=haproxy&server-version=2.0.3&config=intermediatessl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384ssl-default-bind-ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256ssl-default-bind-options ssl-min-ver TLSv1.2 no-tls-ticketsdefaultslog globalmode httpoption httplogoption dontlognulltimeout connect 5000timeout client 50000timeout server 50000errorfile 400 /etc/haproxy/errors/400.httperrorfile 403 /etc/haproxy/errors/403.httperrorfile 408 /etc/haproxy/errors/408.httperrorfile 500 /etc/haproxy/errors/500.httperrorfile 502 /etc/haproxy/errors/502.httperrorfile 503 /etc/haproxy/errors/503.httperrorfile 504 /etc/haproxy/errors/504.http # Haproxy 控制台管理 listen admin_statsstats enablebind *:3264 #*所有ip都可以访问mode http #代理模式option httploglog globalmaxconn 10stats refresh 30s #统计页面自动刷新时间stats uri /admin #访问的uri ip:3264/adminstats realm haproxystats auth admin:1234567 #认证用户名和密码stats hide-version #隐藏HAProxy的版本号stats admin if TRUE #管理界面,如果认证成功了,可通过webui管理节点listen prometheus-serverbind *:3265 #服务IP端口 server prometheus-server 192.168.101.200:9090 check inter 500 rise 2 fall 4 weight 100 #后端prometheus的地址listen grafana-serverbind *:3266 #服务IP端口
3、验证haproxy
3.1、重启服务
systemctl restart haproxy
netstat -ntlp|grep haproxy
3.2、访问后台管理
http://192.168.101.201:3264/admin
查看代理信息
3.3、访问代理prometheus-server端口
http://192.168.101.201:3265/graph
3.4、访问代理grafana端口
http://192.168.101.201:3266/login