RabbitMQ集群搭建

原文:http://www.javashuo.com/article/p-ojfaxggh-gb.htmljava

 

RabbiMQ简介

RabbiMQ是用Erang开发的,集群很是方便,由于Erlang天生就是一门分布式语言,但其自己并不支持负载均衡。node

RabbiMQ模式

RabbitMQ模式大概分为如下三种:
(1)单一模式。
(2)普通模式(默认的集群模式)。
(3) 镜像模式(把须要的队列作成镜像队列,存在于多个节点,属于RabbiMQ的HA方案,在对业务可靠性要求较高的场合中比较适用)。
要实现镜像模式,须要先搭建一个普通集群模式,在这个模式的基础上再配置镜像模式以实现高可用。nginx

RabbiMQ特色

RabbitMQ的集群节点包括内存节点、磁盘节点。RabbitMQ支持消息的持久化
也就是数据写在磁盘上,最合适的方案就是既有内存节点,又有磁盘节点。web

环境:

IP地址 主机名 操做系统 防火墙和SELinux 用途
192.168.100.143 mq01 CentOS7.4(64位) 关闭 磁盘节点
192.168.100.144 mq02 CentOS7.4(64位) 关闭 内存节点
192.168.100.145 mq03 CentOS7.4(64位) 关闭 内存节点

注意,这里三台服务器都链接上互联网,另外RabbitMQ集群节点必须在同一网段里,若是是跨广域网,效果会变差。sql

RabbitMQ普通集群配置

1. 配置hosts文件

更改三台MQ节点的计算机名分别为mq0一、mq02 和mq03,而后修改hosts配置文件vim

vim /etc/hostname //其余两台相同 mq01.localdomain vi /etc/hosts 192.168.100.143 mq01 //注意不能带.注意-主机名称也要更改 192.168.100.144 mq02 192.168.100.145 mq03

2.三个节点配置yum源,安装rabbitmq软件

yum install -y epel-release yum install -y rabbitmq-server

3.拷贝erlang.cookie

Rabbitmq的集群是依附于erlang的集群来工做的,因此必须先构建起erlang的集群景象。Erlang的集群中各节点是经由过程一个magic cookie来实现的,这个cookie存放在/var/lib/rabbitmq/.erlang.cookie中,文件是400的权限。因此必须保证各节点cookie一致,否则节点之间就没法通讯。浏览器

[root@mq01 ~]# cat /var/lib/rabbitmq/.erlang.cookie XAHPZVPYUQDWWJIOHUPQ

用scp的方式将mq01节点的.erlang.cookie的值复制到其余两个节点中。ruby

scp /var/lib/rabbitmq/.erlang.cookie root@192.168.100.144:/var/lib/rabbitmq/.erlang.cookie scp /var/lib/rabbitmq/.erlang.cookie root@192.168.100.145:/var/lib/rabbitmq/.erlang.cookie

4.分别查看三个节点并添加管理服务,最后启动rabbitmq服务

RabbitMQ提供了一个很是友好的图形化监控页面插件(rabbitmq_management),让咱们能够一目了然看见Rabbit的状态或集群状态。服务器

/usr/lib/rabbitmq/bin/rabbitmq-plugins list //查看插件安装状况 /usr/lib/rabbitmq/bin/rabbitmq-plugins enable rabbitmq_management //启用rabbitmq_management服务 service rabbitmq-server start

5.查看监听端口(插件监控的端口是15672)

RabbitMQ集群搭建

6.将mq0二、mq03做为内存节点加入mq01节点集群中

在mq0二、mq03执行以下命令:cookie

rabbitmqctl stop_app    //停掉rabbit应用 rabbitmqctl join_cluster --ram rabbit@mq01 //加入到磁盘节点 rabbitmqctl start_app //启动rabbit应用

RabbitMQ集群搭建
RabbitMQ集群搭建

(1)默认rabbitmq启动后是磁盘节点,在这个cluster命令下,mq02和mq03是内存节点,mq01是磁盘节点。
(2)若是要使mq0二、mq03都是磁盘节点,去掉--ram参数便可。
(3)若是想要更改节点类型,可使用命令rabbitmqctl change_cluster_node_type disc(ram),前提是必须停掉rabbit应用

7.查看集群状态

RabbitMQ集群搭建

8.登陆rabbitmq web管理控制台,建立新的队列

打开浏览器输入http://192.168.100.143:15672, 输入默认的Username:guest,输入默认的Password:guest ,登陆后出现如图所示的界面。
RabbitMQ集群搭建
根据界面提示建立一条队列
RabbitMQ集群搭建
RabbitMQ集群搭建

在RabbitMQ集群集群中,必须至少有一个磁盘节点,不然队列元数据没法写入到集群中,当磁盘节点宕掉时,集群将没法写入新的队列元数据信息。

RabbitMQ镜像集群配置

上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些能够复制到集群里的任何一个节点,可是队列内容不会复制。虽然该模式解决一项目组节点压力,但队列节点宕机直接致使该队列没法应用,只能等待重启,因此要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每一个节点,必需要建立镜像队列。

镜像队列是基于普通的集群模式的,而后再添加一些策略,因此你仍是得先配置普通集群,而后才能设置镜像队列,咱们就以上面的集群接着作。

设置的镜像队列能够经过开启的网页的管理端,也能够经过命令,这里说的是其中的网页设置方式。

1.建立rabbitmq策略

在mq01节点的控制台上建立策略

(1)点击admin菜单–>右侧的Policies选项–>左侧最下下边的Add/update a policy。

(2)按照图中的内容根据本身的需求填写。
RabbitMQ集群搭建

  • Name:策略名称
  • Pattern:匹配的规则,这里表示匹配a开头的队列,若是是匹配全部的队列,那就是^.
  • Definition:使用ha-mode模式中的all,也就是同步全部匹配的队列。问号连接帮助文档。

(3)点击Add policy添加策略
RabbitMQ集群搭建
此时分别登录mq0二、mq03两个节点的控制台,能够看到上面添加的这个策略,如图所示:
RabbitMQ集群搭建
RabbitMQ集群搭建

2.添加队列

在mq01节点的控制台上添加队列
(1)点击Queues菜单–>左侧下边的Add a new queue
(2)输入Name和Arguments参数的值,别的值默认便可
RabbitMQ集群搭建

  • Name:队列名称
  • Durability:队列是否持久化
  • Node:消息队列的节点
  • Auto delete:自动删除
  • Arguments:使用的策略类型

(3)点击Add queue
RabbitMQ集群搭建
将鼠标指向+2能够显示出另外两台消息节点。

3.建立消息

(1)点击ab队列按钮
(2)拖动滚动条,点击publish message
(3)填写相关内容
RabbitMQ集群搭建

  • 2-Persistent:表示持久化
  • Headers:随便填写便可
  • Properties:点击问号,选择一个消息ID号
  • Payload:消息内容

(4)点击Publish message按钮
RabbitMQ集群搭建
点击queue按钮,发现ab队列的Ready和Total中多了一条消息记录。
RabbitMQ集群搭建

4.作破坏性测试

(1)将mq01节点的服务关闭,再经过mq02和mq03查看消息记录是否还存在。

rabbitmqctl stop_app  //停掉mq01的rabbit应用

RabbitMQ集群搭建
RabbitMQ集群搭建
从中能够看到ab队列已经从以前的+2显示成+1了,并且消息记录是存在的。

(2)再将mq02节点的服务关闭,经过mq03查看消息记录是否还存在。

rabbitmqctl stop_app  //停掉mq02的rabbit应用

RabbitMQ集群搭建
从中能够看到ab队列和消息记录仍是存在的,只是变成了一个节点了。

(3)将mq01和mq02的服务再启动起来

rabbitmqctl start_app   //启动mq0一、mq02的rabbit应用

RabbitMQ集群搭建
从中能够看到ab队列后面+2变成了粉色,鼠标指上去显示镜像没法同步。若是这时候停掉mq03节点的服务,那么队列里面的消息将会丢失。

采起的解决办法是选择在mq02节点上执行同步命令。

rabbitmqctl sync_queue ab  //同步ab队列

RabbitMQ集群搭建
同步完成后,+2又变成了蓝色。

这样,咱们就测试了rabbitmq集群的破坏性测试,说明集群配置成功。