热门标签 | 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理论解析


推荐阅读
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社区 版权所有