博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RabbitMq的集群搭建
阅读量:6416 次
发布时间:2019-06-23

本文共 2466 字,大约阅读时间需要 8 分钟。

hot3.png

RabbitMq的集群原理

    rabbitmq是依据erlang的分布式特性(RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookie以获得认证)来实现的,所以部署rabbitmq分布式集群时要先安装erlang,并把其中一个服务的cookie复制到另外的节点。

 

RabbitMq的集群分为两种 

普通模式

    以两个节点(rabbit01、rabbit02)为例来进行说明。对于Queue来说,消息实体只存在于其中一个节点rabbit01(或者rabbit02),rabbit01和rabbit02两个节点仅有相同的元数据,即队列的结构。当消息进入rabbit01节点的Queue后,consumer从rabbit02节点消费时,RabbitMQ会临时在rabbit01、rabbit02间进行消息传输,把A中的消息实体取出并经过B发送给consumer。所以consumer应尽量连接每一个节点,从中取消息。即对于同一个逻辑队列,要在多个节点建立物理Queue。否则无论consumer连rabbit01或rabbit02,出口总在rabbit01,会产生瓶颈。

镜像模式

    将需要消费的队列变为镜像队列,存在于多个节点,这样就可以实现RabbitMQ的HA高可用性。作用就是消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在consumer消费数据时临时读取。缺点就是,集群内部的同步通讯会占用大量的网络带宽。

 

集群部署

    本方案中是在多台机器之间部署rabbitmq的cluster,要求如下:这几个节点需要再同一个局域网内;这几个节点需要有相同的erlang cookie,否则不能正常通信,为了实现cookie内容一致,采用scp的方式进行。

 

 

这里一般 .erlang.cookie 一般存在于如果是 rpm安装的RabbitMq的话则存在于 /var/lib/rabbitmq  如果是 tar解压的话  其存在于${home}/下边,如果找不到的话直接使用

find -name .erlang.cookie去找

 

注意一定要先关闭所有机器的防火墙 !!!

 

安装的环境 Linux centos6.5 32位  JDK1.7

 

1、对.erlang.cookie 进行赋予权限400以上  chmod 600 路径/.erlang.cookie

 

2、关闭每台物理机的 防火墙

 

3、以其中一台机器上的.erlang.cookie 为源文件  复制到 每一台虚拟机的相同目录下

以我的为例

scp /root/.erlang.cookie root@192.168.137.12:/root/

安装报错

bash: scp: command not found

解决:

yum install openssh-clients

 

启动所有的节点

4、复制.erlang.cookie 到每一个 rabbitMqServer

scp /root/.erlang.cookie root@192.168.137.12:/root/

scp /root/.erlang.cookie root@192.168.137.13:/root/

 

5、添加节点到集群中

重新启动节点

./rabbitmqctl stop

./rabbitmq-server -detached

 

6、查看集群的状态

.在sbin目录下执行

./rabbitmqctl  cluster_status

 

7、加入节点到集群中去

./rabbitmqctl stop_app

 

进入到rabbitmq 的sbin目录下执行如下命令

./rabbitmqctl  join_cluster 集群名称@主机名

 

./ rabbitmqctl start_app

 

 

8、设置镜像

将所有队列设置为镜像队列,即队列会被复制到各个节点,各个节点状态保持一直。

./rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

 

 

镜像队列的详解

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]

 

-p Vhost 可选参数,针对指定vhost下的queue进行设置

Name: policy的名称

Pattern: queue的匹配模式(正则表达式)

Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode

    ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes

        all:表示在集群中所有的节点上进行镜像

        exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定

        nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定

    ha-paramsha-mode模式需要用到的参数

    ha-sync-mode:进行队列中消息的同步方式,有效值为automaticmanual

priority:可选参数,policy的优先级

例如,对队列名称以“queue_”开头的所有队列进行镜像,并在集群的两个节点上完成进行,policy的设置命令为:

 

rabbitmqctl set_policy --priority 0 --apply-to queues mirror_queue "^queue_" '{"ha-mode":"exactly","ha-params":2,"ha-sync-mode":"automatic"}'

 

转载于:https://my.oschina.net/demons99/blog/1928010

你可能感兴趣的文章
[官方教程] [ES4封装教程]1.使用 VMware Player 创建适合封装的虚拟机
查看>>
http协议与http代理
查看>>
【iOS开发-91】GCD的同步异步串行并行、NSOperation和NSOperationQueue一级用dispatch_once实现单例...
查看>>
Redis+Spring缓存实例
查看>>
Storm集群安装详解
查看>>
centos7.x搭建svn server
查看>>
原码编译安装openssh6.7p1
查看>>
easyui-datetimebox设置默认时分秒00:00:00
查看>>
蚂蚁分类信息系统5.8多城市UTF8开源优化版
查看>>
在django1.2+python2.7环境中使用send_mail发送邮件
查看>>
“Metro”,移动设备视觉语言的新新人类
查看>>
PHP源代码下载(本代码供初学者使用)
查看>>
Disruptor-NET和内存栅栏
查看>>
Windows平台ipod touch/iphone等共享笔记本无线上网设置大全
查看>>
播放加密DVD
查看>>
产品设计体会(3013)项目的“敏捷沟通”实践
查看>>
RHEL6.3基本网络配置(1)ifconfig命令
查看>>
网络诊断工具之—路由追踪tracert命令
查看>>
Java模拟HTTP的Get和Post请求(增强)
查看>>
php 环境搭建(windows php+apache)
查看>>