RabbitMQ:搭建Haproxy+RabbitMQ集群方式(完成)

RabbitMQ:搭建Haproxy+RabbitMQ集群方式(完成)

你是小KS 2020-05-29 14:36:29 189 收藏 1 原力计划
分类专栏: 消息队列
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
版权

当前的版本:rabbitmq 3.8.3haproxy 1.5.18

1.声明

当前内容用于本人学习和复习之用,内容包括haproxy的编译、配置rabbitmq以及其中发现的问题(基于本地的VM 中的Linux、CentOS7)

2.安装haproxy

yum install -y haproxy

此时使用haproxy

3.启动集群

节点 节点ip
node2 192.168.1.104
node3 192.168.1.107

此时的页面为

此时集群的状态是成功的

4.配置Haproxy到RabbitMQ集群

Haproxy搭建的地址在:192.168.1.100

1.直接编辑(使用yum安装后的haproxy的配置文件在/etc/haproxy/haproxy.cfg)

vi /etc/haproxy/haproxy.cfg

2.开始编写haproxy.cfg文件

#---------------------------------------------------------------------# Example configuration for a possible web application.  See the# full configuration options online.##   http://haproxy.1wt.eu/download/1.4/doc/configuration.txt##---------------------------------------------------------------------#---------------------------------------------------------------------# Global settings#---------------------------------------------------------------------global    # to have these messages end up in /var/log/haproxy.log you will    # need to:    #    # 1) configure syslog to accept network log events.  This is done    #    by adding the '-r' option to the SYSLOGD_OPTIONS in    #    /etc/sysconfig/syslog    #    # 2) configure local2 events to go to the /var/log/haproxy.log    #   file. A line like the following can be added to    #   /etc/sysconfig/syslog    #    #    local2.*                       /var/log/haproxy.log    #    log         127.0.0.1 local2    chroot      /var/lib/haproxy    pidfile     /var/run/haproxy.pid    maxconn     4000    user        haproxy    group       haproxy    daemon    # turn on stats unix socket    stats socket /var/lib/haproxy/stats#---------------------------------------------------------------------# common defaults that all the 'listen' and 'backend' sections will# use if not designated in their block#---------------------------------------------------------------------defaults    mode                    http    log                     global    option                  httplog    option                  dontlognull    option http-server-close    option forwardfor       except 127.0.0.0/8    option                  redispatch    retries                 3    timeout http-request    10s    timeout queue           1m    timeout connect         10s    timeout client          1m    timeout server          1m    timeout http-keep-alive 10s    timeout check           10s    maxconn                 3000#---------------------------------------------------------------------# main frontend which proxys to the backends#---------------------------------------------------------------------# 开启前端可以通过 ip地址:15672方式访问app中的地址(fronted主要用于前端的显示)frontend  main *:15672    acl url_static       path_beg       -i /static /images /javascript /stylesheets    acl url_static       path_end       -i .jpg .gif .png .css .js    use_backend static          if url_static    default_backend     app#---------------------------------------------------------------------# static backend for serving up images, stylesheets and such#---------------------------------------------------------------------backend static    balance     roundrobin    server      static 127.0.0.1:4331 check###  haproxy 的管理页面#listen admin_stats *:8090     #为haproxy访问状态监控页面配置,取名为admin_stats    stats enable         #启用监听端口    mode http         #http的7层模式    log global         # 继承global中log的定义    stats uri  /stats     #监控页面的url访问路径,即http://ip/stats访问监控页面    stats realm Haproxy\ Statistics     #监控页面的密码框提示信息    stats auth  admin:admin          #监控页面的用户和密码admin,可以设置多个用户名    #stats hide-version   #隐藏统计页面上HAProxy的版本信息    stats admin if TRUE    #当通过认证才可管理    stats refresh 30s    #页面自动刷新时间30s#---------------------------------------------------------------------# round robin balancing between the various backends#---------------------------------------------------------------------# 配置前端的负载均衡backend app    balance     roundrobin    server  app1 192.168.1.104:15672 check inter 2000 fall 5    server  app2 192.168.1.107:15672 check inter 2000 fall 5    #server  app3 127.0.0.1:5003 check    #server  app4 127.0.0.1:5004 check# 开启一个端口本地ip:5672方式用于访问后面的节点对应的地址(注意对于tcp需要使用listen)listen rabbit_servers *:5672   mode tcp   balance roundrobin   server rabbit_node2 192.168.1.104:5672 check inter 2000 fall 5   server rabbit_node3 192.168.1.107:5672 check inter 2000 fall 5

3.启动当前的haproxy

haproxy -f haproxy.cfg

注意前面配置文件中的端口的开放

查看界面结果:http://192.168.1.108:8090/stats

此时可以发现当前的haproxy是启动成功的,并且可以访问两个节点,当前的节点是成功的

5.测试15672是否可以访问

直接访问:http://192.168.1.100:15672/api/index.html

此时发现当前的15672界面是可以访问到其他页面的

测试当前的5672端口是否可以访问

通过ui界面在node3节点中添加node3Queue的queue

创建消费者:

package com.hy.rabbitmq.connection.cluster.normal;import java.io.IOException;import java.util.concurrent.TimeoutException;import com.hy.rabbitmq.connection.utils.RabbitMqUtils;import com.hy.rabbitmq.connection.utils.StringUtils;import com.rabbitmq.client.BuiltinExchangeType;import com.rabbitmq.client.Channel;import com.rabbitmq.client.Connection;import com.rabbitmq.client.DefaultConsumer;import com.rabbitmq.client.Envelope;import com.rabbitmq.client.AMQP.BasicProperties;import com.rabbitmq.client.AMQP.Exchange.DeclareOk;/** * @description 消费者专门消费node2中的消息 * @author admin * */public class ClusterNode2MsgComsumer {private static String host = "192.168.1.100";private static int port = 5672;private static String username = "root";private static String password = "root";public static void main(String[] args) throws IOException {RabbitMqUtils mqUtils = new RabbitMqUtils(host, port , username, password );String queueName = "node3Queue";Connection connection = mqUtils.getConnection();Channel channel = connection.createChannel();channel.basicConsume(queueName, true, new DefaultConsumer(channel) {@Overridepublic void handleDelivery(String consumerTag, Envelope envelope, BasicProperties properties, byte[] body)throws IOException {System.out.println("consumerTag==>" + consumerTag);System.out.println("envelope==>" + envelope);System.out.println("props==>" + properties);System.out.println("消费者node2接收消息==>【" + StringUtils.toString(body) + "】");}});}}

启动消费者

启动成功,此时再次查看当前的ui界面的Connection

停止消费者然后再次启动发现实现了负载均衡

配置成功!

6.存在的问题

  1. Cannot create pidfile /run/haproxy.pid,表示该文件已近存在了,直接使用rm /run/haproxy.pid即可删除,然后重新启动即可
  2. 启动过程容易出现Starting proxy admin_stats: cannot bind socket [0.0.0.0:8090],只要使用haproxy -f /etc/haproxy/haproxy.cfg,只要页面显示了就表示显示成功
  3. 注意在使用5672端口的时候需要使用listen来绑定*:5672,不能使用backend,backend表示的是前端的,注意使用mode为tcp

7.总结

1.安装Haproxy是非常简单的,只需要执行yum install -y haproxy即可完成安装

2.主要就是需要编写当前的haproxy.cfg中的内容,小心5672的端口的编写必须是listen

3.对于使用servie haproxy start不能启动,需要分析日志文件,如果是bind端口的问题只需要使用haproxy - f /etc/haproxy/haproxy.cfg进行启动即可

4.弄了两天终于完成了,感概许多

以上纯属个人见解,如有问题请联本人!

(0)

相关推荐

  • C#队列学习笔记:RabbitMQ延迟队列

    一.引言 日常生活中,很多的APP都有延迟队列的影子.比如在手机淘宝上,经常遇到APP派发的限时消费红包,一般有几个小时或24小时不等.假如在红包倒计时的过程中,没有消费掉红包的话,红包会自动失效.假 ...

  • 3W字带你迅速上手MQ

    3W字带你迅速上手MQ

  • Springboot 1.5.x 集成基于Centos7的RabbitMQ集群安装及配置

    RabbitMQ简介 RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件). RabbitMQ是一套开源(MPL)的消息队列服务软件,是由LShift提供的一 ...

  • 入门K8s:一键脚本搭建Linux服务器集群

    dotNET跨平台 今天 以下文章来源于NetCore 从壹开始 ,作者老张的哲学 MVP NetCore 从壹开始专注于 NetCore 相关技术栈的推广,致力于前后端之间的完全分离,从壹开始,让每 ...

  • 无坑部署vmware搭建最新k8s集群(1.17.3)

    我的环境 环境 说明 宿主机 windows10(内存24G) vmware 版本v12 centos v7.6 虚拟机 说明 192.168.159.133 master,4C 8G 192.168 ...

  • MySQL主从复制集群搭建—binlog二进制文件方式

    老哥絮叨 上篇文章我们大致介绍了什么是MySQL主从复制,主从复制的几种集群架构图大概都有哪几种,今天我们就来讲讲如何实现MySQL集群的搭建.主从复制有两种方式可以实现,binlog和GTID,这期 ...

  • Rabbitmq集群高可用部署详细

    序言 清风万里的季节,周末本该和亲人朋友一起消遣这烂漫的花花草草,或是懒洋洋的晒个太阳听听风声鸟鸣.无奈工作使然,理想使然,我回到啦公司,敲起啦键盘,撸起啦代码,程序狗的世界一片黯然,一片黯然,愿天下 ...

  • rabbitmq集群架构(转载)

    rabbitmq集群四种架构模式: 1.主备模式 (Warren) 2.镜像模式 (Mirror) 3.远程模式   (Shovel) 4.多活模式 (Federation)    主备模式:开发中最 ...

  • 使用haproxy搭建web集群

    会不会有那么一天,生活可以简单到每天清早踏上一辆载着鲜花的脚踏车,微笑着穿过窄窄的街巷,为爱花的人送去芬芳,为需要知识的你送去帮助. 简介 在前面已经学习了使用Nginx.LVS做负载均衡群集,它们都 ...

  • redis集群搭建

    阅读目录 1. 准备ruby环境 2. 目录 & 配置文件 3. 集群操作 redis 集群 ruby redis版本:redis-4.0.11 os:centos 7 ruby版本:2.3. ...

  • Proxmox + Terraform 搭建 Kubernetes 集群(一)配置 Proxmox · 语雀

    前不久收到 Microsoft 发来的一封邮件,标题以 Actions required 开头,着实吓人:邮件大概说的就是这么件事情:我们的 Visual Studio Codespaces 即将全面 ...