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:\RabbitMQ\haproxy-1.7.8\haproxy.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

最新文章

  1. 快速掌握、学习HTML的方法
  2. Linux 安装PHP PECL 百分百成功
  3. Nlog 记录日志到 sqlite
  4. QQ截图工具提取
  5. c#操作oracle的通用类
  6. bzoj1487 [HNOI2009]无归岛
  7. lesson - 8 Linux文档的压缩和打包
  8. python学习:函数传参数
  9. ------ 开源软件 Tor(洋葱路由器,构建匿名网络的方案之一)源码分析——主程序入口点(二)------
  10. 第六十五天 js操作
  11. python之路——18
  12. Python列表的三种遍历(序号和值)的方法
  13. centos 7 开机yum
  14. CentOS 7 源码编译安装 Redis
  15. 20165319 2017-2018-2《Java程序设计》课程总结
  16. 使用glusterfs 作为 kubernetes PersistentVolume PersistentVolumeClaim 持久化仓库,高可用Rabbitmq,高可用mysql,高可用redis
  17. js十大排序算法:冒泡排序
  18. SpringBoot 使用Hikaricp连接池
  19. Rest数据服务查询类-根据id查询
  20. globals() 和 locals() 函数

热门文章

  1. vue 移动端开发
  2. android adb源码分析(5)【转】
  3. POJ3258 River Hopscotch —— 二分
  4. JavaScript 检查 email 地址的正则表达式
  5. codeforces 437B. The Child and Set 解题报告
  6. 第四届蓝桥杯C++B组省赛
  7. 四叉树 bnuoj
  8. IOS中延时执行方式
  9. python-dev 安装错误
  10. HihoCoder1705: 座位问题(STL)