CentOS安装RabbitMQ集群

1、有3台已安装RabbitMQ的机器

  192.168.38.133 rabbitmq1
  192.168.38.137 rabbitmq2
  192.168.38.138 rabbitmq3

2、设置hosts解析,所有节点配置相同

    # vi /etc/hosts
192.168.38.133 rabbitmq1
192.168.38.137 rabbitmq2
192.168.38.138 rabbitmq3

3、设置节点间认证的cookie

[root@rabbitmq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie 192.168.38.137:~
[root@rabbitmq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie 192.168.38.138:~

4、分别启动独立的单机版rabbitmq broker节点:

[root@rabbitmq1 ~]# rabbitmq-server -detached
[root@rabbitmq2 ~]# rabbitmq-server -detached
[root@rabbitmq3 ~]# rabbitmq-server -detached

5、查看broker的集群状态:

  [root@rabbitmq1 ~]# rabbitmqctl cluster_status

	Cluster status of node rabbit@rabbitmq1 ...
[{nodes,[{disc,[rabbit@rabbitmq1]}]},
{running_nodes,[rabbit@rabbitmq1]},
{cluster_name,<<"rabbit@rabbitmq1">>},
{partitions,[]},
{alarms,[{rabbit@rabbitmq1,[]}]}]

6、创建broker集群,为了把集群中的3个节点联系起来,我们把137和138分别加入到133的集群。先在137上stop rabbitmq,然后加到133的集群(join cluster会隐式的重置该节点,并删除该节点上所有的资源和数据),然后查看集群状态里有了2个node。

	[root@rabbitmq2 ~]# rabbitmqctl stop_app
[root@rabbitmq2 ~]# rabbitmqctl join_cluster rabbit@rabbitmq1
[root@rabbitmq2 ~]# rabbitmqctl start_app
[root@rabbitmq2 ~]# rabbitmqctl cluster_status #这时候会出现两个节点
Cluster status of node rabbit@rabbitmq2 ...
[{nodes,[{disc,[rabbit@rabbitmq1,rabbit@rabbitmq2]}]},
{running_nodes,[rabbit@rabbitmq1,rabbit@rabbitmq2]},
{cluster_name,<<"rabbit@rabbitmq1">>},
{partitions,[]},
{alarms,[{rabbit@rabbitmq1,[]},{rabbit@rabbitmq2,[]}]}]
138服务器同理,加入集群中

7、修改集群的名字为rabbit@rabbitmq1_cluster(默认是第一个node的名字):

[root@rabbitmq1 ~]# rabbitmqctl set_cluster_name rabbit@rabbitmq1_cluster

8、重启集群:通过rabbitmqctl stop、rabbitmq-server -detached来重启集群,观察集群的运行状态变化

9、删除集群节点,当一个节点不属于这个集群的时候,我们需要删除它,可以通过本地或者远程的方式

[root@rabbitmq2 ~]# rabbitmqctl stop_app
[root@rabbitmq2 ~]# rabbitmqctl reset
[root@rabbitmq2 ~]# rabbitmqctl start_app
[root@rabbitmq2 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rabbitmq2 ...
[{nodes,[{disc,[rabbit@rabbitmq2]}]},
{running_nodes,[rabbit@rabbitmq2]},
{cluster_name,<<"rabbit@rabbitmq2">>},
{partitions,[]},
{alarms,[{rabbit@rabbitmq2,[]}]}]

10、通过管理控制台连接集群,进行创建队列、发布消息、创建用户、创建policy等

http://192.168.38.133:15672/

注:到这里为止,我们创建好了一个简单的聚合集群。默认情况下,集群中的队列存在于集群中单个节点上,这要看创建队列时声明在那个节点上创建,而exchange和binding则默认存在于集群中所有节点。在stop_app或者stop掉broker之后在133节点的上队列,重启133的app或broker之后,虽然集群工作正常,但133上队列中消息会被清空(queue还是存在的)。对于生产环境而已,这肯定是不可接受的,如果不能保证队列的高可用,那么做集群的意义也不太大了,还好rabbitmq支持Highly Available Queues,下面介绍queue的HA。

11、Queue HA配置,队列可以通过镜像来提高可用性,HA依赖rabbitmq cluster,所以队列镜像也不适合WAN部署,每个被镜像的队列包含一个master和一个或者多个slave,当master因任何原因故障时,最老的slave被提升为新的master。发布到队列的消息被复制到所有的slave上,消费者无论连接哪个节点,都会连接到master;如果master确认要删除消息,那么所有slave就会删除队列中消息。队列镜像可以提供queue的高可用性,但不能分担负载,因为所有参加的节点都做所有的工作。

12、配置队列镜像,通过policy来配置镜像,策略可在任何时候创建,比如先创建一个非镜像的队列,然后在镜像,反之亦然。镜像队列和非镜像队列的区别是非镜像队列没有slaves,运行速度也比镜像队列快。设置策略然后设置ha-mode,3中模式:all、exactly、nodes。每个队列都有一个home node,叫做queue master node

-> 设置policy,以ha.开头的队列将会被镜像到集群其他所有节点,一个节点挂掉然后重启后需要手动同步队列消息

[root@rabbitmq1 ~]# rabbitmqctl set_policy -p AAA ha-allqueue "^ha\." '{"ha-mode":"all"}'

->设置policy,以ha.开头的队列将会被镜像到集群其他所有节点,一个节点挂掉然后重启后会自动同步队列消息(生产环境建议采用这个方式)

[root@rabbitmq1 ~]# rabbitmqctl set_policy -p AAA ha-allqueue "^ha\." '{"ha-mode":"all","ha-sync-mode":"automatic"}'
注释:AAA 是VHost名称,
ha-allqueue 是策略名称,
^ha\. 是匹配ha.开头的队列,如果只有^的话就是匹配所有队列都会自动同步数据
ha-mode:all是同步到所有节点,
ha-sync-mode:automatic 自动同步,没有这个配置的话则需要手动同步数据

-> 在管理控制台中设置policy

导航 -> Admin -> Policies -> Add/Update a policy

注:

  1. > 当整个集群down掉时,最 后一个down机的节点必须第一个启动到在线状态,如果不是这样,节点会等待30s等最后的磁盘节点恢复状态,然后失败。如果最后下线的节点不能上线,可以通过forget_cluster_node 指令来踢出集群。
  2. > 如果所有的节点不受控制的同时宕机,比如掉电,会进入所有的节点都会认为其他节点比自己宕机的要晚,即自己先宕机,这种情况下可以使用force_boot指令来启动一个节点。

CentOS7实现RabbitMQ高可用集群的更多相关文章

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

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

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

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

  3. RabbitMQ学习系列(六): RabbitMQ 高可用集群

    前面讲过一些RabbitMQ的安装和用法,也说了说RabbitMQ在一般的业务场景下如何使用.不知道的可以看我前面的博客,http://www.cnblogs.com/zhangweizhong/ca ...

  4. RabbitMQ 高可用集群搭建及电商平台使用经验总结

    面向EDA(事件驱动架构)的方式来设计你的消息 AMQP routing key的设计 RabbitMQ cluster搭建 Mirror queue policy设置 两个不错的RabbitMQ p ...

  5. [Open Source] RabbitMQ 高可用集群方案

    简介 RabbitMQ是用erlang开发的,集群非常方便,因为erlang天生就是一门分布式语言,但其本身并不支持负载均衡. Rabbit模式大概分为以下三种:单一模式.普通模式.镜像模式 Rabb ...

  6. RabbitMQ高可用集群配置

    1.安装RabbitMQ 1)下载和安装erlang 下载erlang wget http://www.rabbitmq.com/releases/erlang/erlang-18.1-1.el6.x ...

  7. RabbitMQ 高可用集群搭建

    面向EDA(事件驱动架构)的方式来设计你的消息 AMQP routing key的设计 RabbitMQ cluster搭建 Mirror queue policy设置 两个不错的RabbitMQ p ...

  8. CentOS下RabbitMq高可用集群环境搭建

    准备工作 1,准备两台或多台安装有rabbitmq-server服务的服务器 我这里准备了两台,分别如下: 192.168.40.130 rabbitmq01192.168.40.131 rabbit ...

  9. docker下rabbitMQ高可用集群部署

    第一步:docker 安装: mac 下安装命令: brew cask install docker 安装完之后查看版本 docker --version 第二步:开始集群搭建: 采用bijukunj ...

随机推荐

  1. Delphi XE5的Android开发平台搭建

    Delphi XE5支持Android ARM的开发,可以在Android虚拟机里运行,因此建议将XE5安装在64bit的Windows,内存可以大于3GB Delphi XE5安装光盘中包含了最基本 ...

  2. 十个常见的Java异常出现原因

    异常是 Java 程序中经常遇到的问题,我想每一个 Java 程序员都讨厌异常,一 个异常就是一个 BUG,就要花很多时间来定位异常问题. 1.NullPointerException 空指针异常,操 ...

  3. Linux下更新git版本

    查看git版本,卸载旧版本(如果没有安装git请直接到下一步) git --version yum remove git 安装依赖软件 yum install curl-devel expat-dev ...

  4. exynos4412—链接脚本复习

    在u-boot下,定义变量, 编译,编译完后  使用arm-linux-nm arm    没有去头的二进制可执行文件 都在BSS段,均为初始化. 打印之后会出算随机值. 目前还处于uboot阶段,如 ...

  5. ACM1019:Least Common Multiple

    Problem Description The least common multiple (LCM) of a set of positive integers is the smallest po ...

  6. SSM 框架基于ORACLE集成TKMYBATIS 和GENERATOR自动生成代码(Github源码)

    基于前一个博客搭建的SSM框架 https://www.cnblogs.com/jiangyuqin/p/9870641.html 源码:https://github.com/JHeaven/ssm- ...

  7. thinkphp 去除空格

  8. 八、Django之Models(译)

    模型(Models) 模型是你的数据的唯一的.确定的信息源. 它包含你所储存数据的必要字段和行为. 通常,每个模型对应数据库中唯一的一张表. 基础: 每个模型都是一个Python类,它们都是djang ...

  9. HTML基本代码教学,第二天

    HTML 咱们今天来看一下咱们这HTML能做些什么,例如下图(最低级的小实验) 咱们来看一下图片的最左上角<head> <title></ title></ ...

  10. linux菜鸟笔记

    linux目录的子目录复制 cp -r 要复制的目录+新的目录 cp -r a test 意思就是将a的子目录及文件复制到新的目录test下面 zt@ubuntu:~/Desktop$ mkdir - ...