热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Rabbitmq系列之整合Haproxy实现负载均衡

概述HAProxy提供高可用性、负载均衡及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案,包括Twit

概述

  HAProxy 提供高可用性、负载均衡及基于 TCP 和 HTTP 应用的代理,支持虚拟主机 ,它是免费、快速并且可靠的一种解决方案,包括 Twitter、Reddit、StackOverflow、GitHub 在内的多家知名互联网公司在使用。 HAProxy 实现了一种事件驱动 、单一进程模型 ,此模型支持非常大的井发连接数。摘自《RabbitMQ实战指南》

安装


  • 使用阿里云的镜像

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo


  • 使用yum安装

yum -y install haproxy


  • 备份默认配置(此处可以省略)

cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak


  • 配置自定义配置

vim /etc/haproxy/haproxy.cfg


  • 自定义配置内容

global#日志输出配置,所有日志都记录在本机,通过 localO 输出log 127.0.0.1 local0 infomaxconn 4096stats socket /tmp/haproxy.socket uid haproxy mode 770 level admin#以守护进程方式运行 haproxy #debug #quietdaemon
defaults#应用全局的日志配置log global#默认的模式 mode{tcp l http l health}#TCP是 4层, HTTP是 7层, health只返回 OKmode tcp#日志类别 tcplogoption tcplog#不记录健康检查日志信息option dontlognull retries 3 #3 次失败则认为服务不可用option redispatchmaxconn 2000 #每个进程可用的最大连接数timeout connect 5s #连接超时timeout client 120s #客户端超时timeout server 120s #服务端超时
listen rabbitmq_local_cluster 0.0.0.0:5670 #配置 TCP 模式mode tcpbalance roundrobin #简单轮询#RabbitMQ 集群节点配置server node1 10.211.55.8:5672 check inter 5000 rise 2 fall 3 server node2 10.211.55.9:5672 check inter 5000 rise 2 fall 3server node3 10.211.55.10:5672 check inter 5000 rise 2 fall 3
listen private_monitoring :8100 #监控页面地址mode httpoption httplogstats enablestats uri /statsstats refresh 5s #界面自动刷新时间

  • 启动

haproxy -f /etc/haproxy/haproxy.cfg


  • 访问(由于虚拟机有限,node1服务器既安装了rabbitmq又安装了Haproxy)

http://10.211.55.8:8100/stats

在这里插入图片描述

测试


  • 客户端测试代码

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;import java.io.IOException;
import java.util.concurrent.TimeoutException;public class testRabbitmq {public static void main(String[] args) throws IOException, TimeoutException {ConnectionFactory connectionFactory &#61; new ConnectionFactory();connectionFactory.setHost(Config.HOST);connectionFactory.setPort(5670);connectionFactory.setUsername(Config.USER);connectionFactory.setPassword(Config.PWD);connectionFactory.setVirtualHost("/");Channel channel &#61; null;Connection connection &#61; null;try {connection &#61; connectionFactory.newConnection();channel &#61; connection.createChannel();String queueName &#61; "test2";channel.queueDeclare(queueName, true, false, false, null);String msg &#61; "hello,Rabbitmq";for (int i &#61; 0; i < 300; i&#43;&#43;) {channel.basicPublish("", queueName, null, msg.getBytes("UTF-8"));Thread.sleep(500);}} catch (IOException e) {e.printStackTrace();} catch (TimeoutException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();} finally {channel.close();connection.close();}}
}class Config {static String HOST &#61; "10.211.55.8";static String PWD &#61; "123456";static String USER &#61; "admin";}

  • 第1次连接node1队列
    在这里插入图片描述

  • 第2次连接node2队列
    在这里插入图片描述

  • 第3次连接node3队列
    在这里插入图片描述


感谢

《RabbitMQ实战指南》
Centos7搭建RabbitMQ集群及单机多节点部署和rabbitmq理论解析


推荐阅读
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了深入浅出Linux设备驱动编程的重要性,以及两种加载和删除Linux内核模块的方法。通过一个内核模块的例子,展示了模块的编译和加载过程,并讨论了模块对内核大小的控制。深入理解Linux设备驱动编程对于开发者来说非常重要。 ... [详细]
  • 解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法
    本文介绍了解决nginx启动报错epoll_wait() reported that client prematurely closed connection的方法,包括检查location配置是否正确、pass_proxy是否需要加“/”等。同时,还介绍了修改nginx的error.log日志级别为debug,以便查看详细日志信息。 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 本文介绍了关系型数据库和NoSQL数据库的概念和特点,列举了主流的关系型数据库和NoSQL数据库,同时描述了它们在新闻、电商抢购信息和微博热点信息等场景中的应用。此外,还提供了MySQL配置文件的相关内容。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 本文介绍了在Linux下安装和配置Kafka的方法,包括安装JDK、下载和解压Kafka、配置Kafka的参数,以及配置Kafka的日志目录、服务器IP和日志存放路径等。同时还提供了单机配置部署的方法和zookeeper地址和端口的配置。通过实操成功的案例,帮助读者快速完成Kafka的安装和配置。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 如何在HTML中获取鼠标的当前位置
    本文介绍了在HTML中获取鼠标当前位置的三种方法,分别是相对于屏幕的位置、相对于窗口的位置以及考虑了页面滚动因素的位置。通过这些方法可以准确获取鼠标的坐标信息。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
  • 超级简单加解密工具的方案和功能
    本文介绍了一个超级简单的加解密工具的方案和功能。该工具可以读取文件头,并根据特定长度进行加密,加密后将加密部分写入源文件。同时,该工具也支持解密操作。加密和解密过程是可逆的。本文还提到了一些相关的功能和使用方法,并给出了Python代码示例。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文介绍了在sqoop1.4.*版本中,如何实现自定义分隔符的方法及步骤。通过修改sqoop生成的java文件,并重新编译,可以满足实际开发中对分隔符的需求。具体步骤包括修改java文件中的一行代码,重新编译所需的hadoop包等。详细步骤和编译方法在本文中都有详细说明。 ... [详细]
author-avatar
西北人6668_733
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有