RabbitMQ集群概述
RabbitMQ模式大概分为以下三种:

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

RabbitMQ特点:

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

实验环境
RabbitMQ集群搭建,镜像集群
安装准备

采用源码安装

#修改主机名,安装依赖环境(都改)

[[email protected] ~]# vim /etc/hosts

RabbitMQ集群搭建,镜像集群

[[email protected] ~]# cd /etc/yum.repos.d/		---------修改yum源为本地
[[email protected] yum.repos.d]# rm -rf *
[[email protected] yum.repos.d]# vim local.repo

RabbitMQ集群搭建,镜像集群

[[email protected] yum.repos.d]# mount /dev/cdrom /mnt
[[email protected] ~]# yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel 

#安装erlang环境

[[email protected] ~]# wget http://erlang.org/download/otp_src_21.3.tar.gz
[[email protected]~]#wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.14/rabbitmq-server-generic-unix-3.7.14.tar.xz

RabbitMQ集群搭建,镜像集群

[[email protected] ~]# tar -zxvf otp_src_21.3.tar.gz 
[[email protected] ~]# cd otp_src_21.3/
[[email protected] otp_src_21.3]# ./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe
[[email protected] otp_src_21.3]# echo $?
0
[[email protected] otp_src_21.3]# make && make install

#安装rabbitmq环境

[[email protected] ~]# xz -d rabbitmq-server-generic-unix-3.7.14.tar.xz

RabbitMQ集群搭建,镜像集群

[[email protected] ~]# tar -xvf rabbitmq-server-generic-unix-3.7.14.tar 
[[email protected] ~]# mv rabbitmq_server-3.7.14/ /usr/local/rabbitmq

#设置环境变量

[[email protected] ~]# vim /etc/profile

RabbitMQ集群搭建,镜像集群
[[email protected] ~]# source /etc/profile
#配置rabbitmq

rm -rf /var/lib/rabbitmq/mnesia/
这个目录,为rabbitmq数据库,有时异常情况出现时,可删除该目录,重新对rabbitmq进行设置即可

[[email protected] ~]# rabbitmq-server -detached		-------以后台运行方式启动一定要先启动
[[email protected] ~]# rabbitmqctl add_user admin jia1314			--------添加admin用户密码为jia1314
[[email protected] ~]# rabbitmqctl set_user_tags admin administrator	--------为admin用户设置为管理员
[[email protected] ~]# rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"		-----将admin设置为允许远程登录用户
[[email protected] ~]# rabbitmq-plugins enable rabbitmq_management		-------启动web管理插件
[[email protected] ~]# netstat -lnpt|grep beam			--------查看启动进程

RabbitMQ集群搭建,镜像集群

#localhost:15672,帐号默认为guest,密码guest,此帐号默认只能在本机访问。不建议打开远程访问。你可以创建一个帐户,并设置可以远程访问的角色进行访问
#访问http://192.168.3.1:15672

普通集群搭建

[[email protected] ~]# cat .erlang.cookie		------查看自己的cookie
[[email protected] ~]# scp .erlang.cookie [email protected]:/root			----传到另外两台
[[email protected] ~]# scp .erlang.cookie [email protected]:/root			----通过cookie连接
#节点1开启app,节点2/3关闭app
[[email protected] ~]# rabbitmqctl stop_app							
[[email protected] ~]# rabbitmqctl stop_app
[[email protected] ~]# rabbitmqctl join_cluster --ram [email protected]			----加入集群
[[email protected] ~]# rabbitmqctl join_cluster --ram [email protected]

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

[[email protected] ~]# rabbitmqctl cluster_status		-----在node1上查看集群状态

RabbitMQ集群搭建,镜像集群

[[email protected] ~]# rabbitmqctl start_app			------开启app节点
[[email protected] ~]# rabbitmqctl start_app			
#访问http://192.168.3.1:15672

RabbitMQ集群搭建,镜像集群
RabbitMQ集群搭建,镜像集群
#创建队列
RabbitMQ集群搭建,镜像集群
RabbitMQ集群搭建,镜像集群
RabbitMQ集群搭建,镜像集群
镜像集群搭建

上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。虽然该模式解决一项目组节点压力,但队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列。
镜像队列是基于普通的集群模式的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做。

#创建RabbitMQ策略
RabbitMQ集群搭建,镜像集群
RabbitMQ集群搭建,镜像集群

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

RabbitMQ集群搭建,镜像集群

登录到节点2/3可以看到有相同的策略

RabbitMQ集群搭建,镜像集群
RabbitMQ集群搭建,镜像集群
#创建队列
RabbitMQ集群搭建,镜像集群

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

#创建消息
RabbitMQ集群搭建,镜像集群

点ad进去

RabbitMQ集群搭建,镜像集群
RabbitMQ集群搭建,镜像集群

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

RabbitMQ集群搭建,镜像集群

创建成功

RabbitMQ集群搭建,镜像集群

可以看到多了一条消息

#测试

关掉ramq1,查看ramq2消息状态
[[email protected] ~]# rabbitmqctl stop_app

RabbitMQ集群搭建,镜像集群

可以看到由原来的+2—>+1,ready也多了一条
再将ramq2关掉,查看ramq3消息状态

RabbitMQ集群搭建,镜像集群

可以看到+1都没有了,如果再把ramq3关掉的话消息就真的丢了
将ramq1和ramq2重新启动

RabbitMQ集群搭建,镜像集群

变为红色无法同步
此时需要手动进行同步

[[email protected] ~]# rabbitmqctl sync_queue ab
[[email protected] ~]# rabbitmqctl sync_queue ab

RabbitMQ集群搭建,镜像集群
成功

相关文章: