HAProxy是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。
HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。HAProxy实现了一种事件驱动, 单一进程模型并且提供高可用性、负载均衡以及基于TCP和HTTP应用的代理。根据官方数据,其最高极限支持10G的并发。HAProxy支持从4层至7层的网络交换,即覆盖所有的TCP协议。就是说,Haproxy 甚至还支持 Mysql 的均衡负载。
HAProxy的特点是:
1、HAProxy是支持虚拟主机的,,并能支持上万级别的连接;
2、能够补充Nginx的一些缺点比如Session的保持,cookie的引导等工作;
3、支持url检测后端的服务器出问题的检测会有很好的帮助;
4、它跟LVS一样,本身仅仅就只是一款负载均衡软件;单纯从效率上来讲HAProxy更会比Nginx有更出色的负载均衡速度,在并发处理上也是优于Nginx的;
5、HAProxy可以对mysql读进行负载均衡,对后端的MySQL节点进行检测和负载均衡,不过在后端的MySQL slaves数量超过10台时性能不如LVS
6、能够提供4层,7层代理。HAProxy支持两种主要的代理模式:"tcp"也即4层(大多用于邮件服务器、内部协议通信服务器等),和7层(HTTP)。在4层模式 下,HAProxy仅在客户端和服务器之间转发双向流量,7层模式下,HAProxy会分析协议,并且能通过允许、拒绝、交换、增加、修改或者删除请求 (request)或者回应(response)里指定内容来控制协议,这种操作要基于特定规则;
7、HAProxy负载均衡算法具体有如下几种:
①roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
②static-rr,表示根据权重;
③leastconn,表示最少连接者先处理;
④source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法;
⑤ri,表示根据请求的URI;
⑥rl_param,表示根据请求的URl参数'balance url_param' requires an URL parameter name;
⑦hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
⑧rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
实现Rabbitmq+haproxy负载均衡 需如下几步:
一、安装Rabbitmq服务
二、搭建Rabbitmq集群服务
三、安装软件负载均衡器
windows下将haproxy文件复制在指定目录下
安装haproxy;
haproxy.exe -f haproxy.cfg -d 其中, -d会在窗口运行, -D则是后台程序,只能在任务管理器中看到
pidfile haproxy.pid #相对路径必须有此文件,否则启动失败
重装haproxy:
haproxy -f D:RabbitMQhaproxy-1.7.8haproxy.cfg
重启haproxy
haproxy restart
四、配置负载均衡文件 目录haproxy.cfg
global
log D://RabbitMQ//haproxy-1.7.8//log local0 info
log D://RabbitMQ//haproxy-1.7.8//log local1 notice
#chroot /var/lib/haproxy 改变当前工作目录
#stats socket /run/haproxy/admin.sock mode 660 level admin # 创建监控所用的套接字
目录
#pidfile /var/run/haproxy.pid # haproxy的pid存放路径,启动进程的用户必须有权限访问
此文件
maxconn 4000 # 最大连接数,默认4000
#user haproxy 默认用户
#group haproxy 默认用户组
daemon # 创建1个进程进入deamon模式运行。此参数要求将运行模
式设置为daemon
defaults
log global
mode tcp # 默认的模式mode { tcp|http|health },tcp是4层,http是7层
,health只会返回OK
option tcplog # 采用Tcp日志格式
option dontlognull # 启用该项,日志中将不会记录空连接。所谓空连接就是在上游的负载均
衡器
# 或者监控系统为了探测该 服务是否存活可用时,需要定期的连接或者
获取某
# 一固定的组件或页面,或者探测扫描端口是否在监听或开放等动作被称
为空连接;
# 官方文档中标注,如果该服务上游没有其他的负载均衡器的话,建议不
要使用
# 该参数,因为互联网上的恶意扫描或其他动作就不会被记录下来
retries 3 # 3次连接失败就认为服务不可用,也可以通过后面设置
option abortonclose # 每次请求完毕后主动关闭通道
maxconn 4000
timeout connect 5000 # 连接超时时间(毫秒)
timeout client 3000 # 客户端连接超时时间(毫秒)
timeout server 3000 # 服务器端连接超时时间(毫秒)
balance roundrobin #负载均衡算法(#banlance roundrobin 轮询,balance source 保存
session值,支持static-rr,leastconn,first,uri等参数)
listen monitor:8000 #haproxy监控页面配置
bind 192.168.1.62:8000
mode http
option httplog
stats refresh 5s #统计页面自动刷新时间
stats uri /stats #统计页面url
stats realm Haproxy #统计页面密码框上提示文本
stats auth admin:admin #统计页面用户名和密码设置
listen rabbitmq_admin
bind 192.168.1.62:15672
server node1 192.168.1.62:15672
server node2 192.168.1.79:15672
listen rabbitmq_cluster
bind 192.168.1.62:5672
mode tcp
option tcplog
balance roundrobin 负载均衡算法
timeout client 3h
timeout server 3h
server node1 192.168.1.62:5672 check inter 2000 rise 2 fall 3 #check inter
2000 是检测心跳频率,rise 2是2次正确认为服务器可用,fall 3是3次失败认为服务器不可用
server node2 192.168.1.79:5672 check inter 2000 rise 2 fall 3
实现配置如下:
五、重启raproxy服务
haproxy restart