配置两台Linux CentOS 6.7虚拟主机

CentOS6.7下载地址
https://pan.baidu.com/s/1i5GPg9n
 
安装视频下载

https://pan.baidu.com/s/1qYSgohQ

rabbitmq2
rabbitmq1

1、分别在两台主机上修改/etc/hosts
192.168.169.100 rabbitmq1
192.168.169.110 rabbitmq2
 
2、从客户端上传RPM包

RPM包下载地址
https://pan.baidu.com/s/1dE1iaGx
 

3、下载阿里云Yum源

#wget -O /etc/yum.repos.d/CentOS-Base.repo
http://mirrors.aliyun.com/repo/Centos-6.repo

依次安装Erlang,Rabbitmq
#yum
-y install openssl
#yum -y install socat-1.7.2.4-1.el6.rf.x86_64.rpm
#yum -y install erlang-17.4-1.el6.x86_64.rpm
#yum -y install rabbitmq-server-3.6.3-1.noarch.rpm
4、启动rabbitmq1,rabbitmq2上的RabbitMQ
rabbitmq1
#service rabbitmq-server start
rabbitmq2
#service rabbitmq-server start
5、从rabbitmq1主机上拷贝文件到rabbitmq2
scp /var/lib/rabbitmq/.erlang.cookie  rabbitmq2:/var/lib/rabbitmq
6、在rabbitmq1,rabbitmq2上分别关闭防火墙
[root@rabbitmq1 ~]#
service iptables stop
[root@rabbitmq2 ~]#
service iptables stop
7、在rabbitmq1,rabbitmq2上分别启动RibbitMQ
[root@rabbitmq1 ~]# service rabbitmq-server
start
[root@rabbitmq2 ~]# service rabbitmq-server
start
 
8、在rabbitmq2上执行
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
9、查看各节点上的状态
rabbitmqctl cluster_status
 
10、在rabbitmq1,rabbitmq2节点上分别添加用户和设置控制台插件
 
[root@rabbitmq1 ~]# rabbitmq-plugins
enable rabbitmq_management
 
[root@rabbitmq1 ~]# rabbitmqctl add_user
admin admin
 
[root@rabbitmq1 ~]# rabbitmqctl
set_permissions admin ".*" ".*" ".*"
 
[root@rabbitmq1 ~]# rabbitmqctl
set_user_tags admin administrator
 
[root@rabbitmq2 ~]# rabbitmq-plugins
enable rabbitmq_management
 
 

11、在rabbitmq1节点上安装haproxy

yum -y install
haproxy
12、配置haproxy
cp /etc/haproxy/haproxy.cfg  /etc/haproxy/haproxy.cfg.bak
vi /etc/haproxy/haproxy.cfg
添加配置信息

listen rabbitmq_local_cluster
192.168.169.100:5670 
mode
tcp 
balance
roundrobin 
server
rabbit 192.168.169.100:5672 check inter 5000 rise 2 fall
3
server
rabbit 192.168.169.110:5672 check inter 5000 rise 2 fall
listen private_monitoring :8100 
mode
http 
option
httplog 
stats
enable 
stats
uri /stats 
stats
refresh 60s

13、启动haproxy

service haproxy start
14、查看haproxy控制台
http://192.168.169.142:8100/stats
15、建立RabbitMQ策略

16、建立持久队列
 
 
测试代码
Producer.java
package com.test.cluster;
 
import com.rabbitmq.client.*;
 
import java.io.IOException;
import java.lang.String;
import java.lang.System;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
 
public class Producer {
 
    public static void
main(String[] args) throws Exception {
   
    //使用默认端口连接MQ
     
  ConnectionFactory factory = new
ConnectionFactory();
   
factory.setUsername("admin");
   
factory.setPassword("admin");
     
  factory.setHost("192.168.169.100");
//使用默认端口5672
     
  factory.setPort(5670);
     
  Connection conn = factory.newConnection();
//声明一个连接
     
  Channel channel = conn.createChannel();
//声明消息通道
   
     
  String exchangeName = "TestEXG";//交换机名称
     
  String routingKey =
"RouteKey1";//RoutingKey关键字
     
  channel.exchangeDeclare(exchangeName, "direct",
true);//定义声明交换机
     
  String queueName = "ClusterQueue";//队列名称
     
  Map arg = new HashMap();
     
  arg.put("x-ha-policy", "all");
     
  channel.queueDeclare(queueName, false, false,
false, arg);
 
     
  channel.queueBind(queueName, exchangeName,
routingKey);//定义声明对象
     
  
     
  byte[] messageBodyBytes = "Hello,
world!".getBytes();//消息内容
     
  channel.basicPublish(exchangeName, routingKey,
null, messageBodyBytes);//发布消息
     
  //关闭通道和连接
channel.close();
conn.close();
    }
 
}
 
 
Customer.java
 
package com.test.cluster;
import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.QueueingConsumer;
 
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
 
//通过channel.basicAck向服务器发送回执,删除服务上的消息
public class Consumer {
 
    public static void
main(String[] args) throws IOException, InterruptedException
{
     
  ConnectionFactory factory = new
ConnectionFactory();
   
factory.setUsername("admin");
   
factory.setPassword("admin");
     
  factory.setHost("192.168.169.100");
//使用默认端口5672
     
  factory.setPort(5670);
     
  Connection conn = factory.newConnection();
//声明一个连接
     
  Channel channel = conn.createChannel();
//声明消息通道
     
  String exchangeName = "TestEXG";//交换机名称
     
  String queueName = "ClusterQueue";//队列名称
     
  channel.exchangeDeclare(exchangeName, "direct",
true);//定义声明交换机
     
  channel.queueBind(queueName, exchangeName,
"RouteKey1");
 
     
  channel.basicQos(1); //server push消息时的队列长度
 
     
  //用来缓存服务器推送过来的消息
     
  QueueingConsumer consumer = new
QueueingConsumer(channel);
 
     
  channel.basicConsume(queueName, false,
consumer);
 
     
  while (true) {
     
     
QueueingConsumer.Delivery delivery = consumer.nextDelivery();
     
     
System.out.println("Received " + new
String(delivery.getBody()));
 
     
     
//回复ack包,如果不回复,消息不会在服务器删除
     
     
channel.basicAck(delivery.getEnvelope().getDeliveryTag(),
false);
     
  }
    }
}
 
关闭掉其中一个RabbitMQ,测试群集效果
 

12.RabbitMQ多机集群的更多相关文章

  1. Linux源码安装RabbitMQ高可用集群

    1.环境说明 linux版本:CentOS Linux release 7.9.2009 erlang版本:erlang-24.0 rabbitmq版本:rabbitmq_server-3.9.13 ...

  2. RabbitMQ安装以及集群部署

    本次记录安装RabbitMQ的过程,只针对MAC下单机版安装.单机集群安装方法以及配置haproxy负载均衡. RabbitMQ单机版本安装 RabbitMQ单机集群安装方法(适合开发练习) Rabb ...

  3. Redis总结(五)缓存雪崩和缓存穿透等问题 Web API系列(三)统一异常处理 C#总结(一)AutoResetEvent的使用介绍(用AutoResetEvent实现同步) C#总结(二)事件Event 介绍总结 C#总结(三)DataGridView增加全选列 Web API系列(二)接口安全和参数校验 RabbitMQ学习系列(六): RabbitMQ 高可用集群

    Redis总结(五)缓存雪崩和缓存穿透等问题   前面讲过一些redis 缓存的使用和数据持久化.感兴趣的朋友可以看看之前的文章,http://www.cnblogs.com/zhangweizhon ...

  4. RabbitMQ安装、集群搭建、概念解析

    RabbitMQ安装.集群搭建.概念解析 基本概念 为什么会产生MQ 1.解耦:采用异步方式实现业务需求达到解耦的目的. 2.缓冲流量,削峰填谷: 问:为什么会有流量冲击? 答:采用"直接调 ...

  5. RabbitMQ介绍5 - 集群

    RabbitMQ内建集群机制,利用Erlang提供的开放电信平台(OTP,Open telecom Platform)通信框架,使得集群很容易进行横向扩展,提高系统吞吐量.这里只讨论集群的概念.原理, ...

  6. docker1.12 安装redis第三方集群方案 codis

    docker1.12 安装redis第三方集群方案 codis

  7. Jmeter5 实现多机集群压测(局域网组成多机集群)

    想要模拟高并发用户访问的场景,用Jmeter5实现的话,单靠一台PC机,资源是不够的,包括单机的内存.使用端口数量等,所以最好是通过多台PC机组成几个集群来对服务器进行压测. 本文目录: 1.软硬件配 ...

  8. Elasticsearch5.5 多机集群配置和x-pack安装配置

    x-pack安装配置 https://www.elastic.co/guide/en/elasticsearch/reference/current/installing-xpack-es.html ...

  9. redis多机集群部署文档

    redis多机集群部署文档(centos6.2) (要让集群正常工作至少需要3个主节点,在这里我们要创建6个redis节点,其中三个为主节点,三个为从节点,对应的redis节点的ip和端口对应关系如下 ...

随机推荐

  1. 解决handsontable日期控件汉化的问题

    在项目的 node_modules\pikaday目录下打开 pikaday.js 把 i18n: { previousMonth : 'Previous Month', nextMonth : 'N ...

  2. MySql 5.7.26(MySQL8)安装教程

    近期更换服务器,在此再记录一遍mysql 安装教程 1.下载 https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-commu ...

  3. CDN技术之--流媒体CDN系统的组成

    流媒体业务是一种对实时性.连续性.时序性要求非常高的业务,无论从带宽消耗上还是质量保障上来说,对best-effort的IP网络都是一个不小的冲击 –高带宽要求–高QoS要求–组播.广播要求(目前IP ...

  4. $router和router区别

    this.$router.push({path:'/'})//这个是js编程式的一种动态跳转路由方式,是全局的路由对象. 而写在router声明文件中的router是自己定义实例化的一个对象.可以使用 ...

  5. vue登录页和主页路由配置问题

    登录页和主菜单首页是同一级的,都是用一个router-view,对于home页面里还有菜单,这里边还可以再增加一个router-view,那么在配置时候就是在home的路径增加个children路径配 ...

  6. nginx 配置多服务器代理

    找到 nginx > conf目录中nginx.conf #user nobody; worker_processes 1; #error_log logs/error.log; #error_ ...

  7. sequel 远程连接 MySQL 连接错误Can't connect to MySQL server on (61)

    Mac sequel Pro链接时报错Can’t connect to MySQL server on ‘xx.xx.xx.xx’ (61). PS. win版Navicat 报错Can’t conn ...

  8. Django中get()和fiter()的区别

    QuerySet(查询结果集对象):从数据库中查询出来的结果一般是一个集合,这个集合叫做 QuerySet,也就是指服务器上的url里面的查询内容.Django会对查询返回的结果集QuerySet进行 ...

  9. 自己写一个 wsgi 服务器运行 Django 、Tornado 等框架应用

    https://blog.csdn.net/heybob/article/details/52288006

  10. upc组队赛12 Cardboard Container【枚举】

    Cardboard Container Problem Description fidget spinners are so 2017; this years' rage are fidget cub ...