Rabbitmq简介及部署群集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rabbitmq简介及部署群集相关的知识,希望对你有一定的参考价值。

博文大纲:
一、MQ简介
二、什么是RabbitMQ?
三、安装RabbitMQ
四、部署Rabbitmq集群
1)部署环境
2)安装rabbitmq服务
3)配置host文件,并将上述两个节点加入集群
4)rabbitmq01配置群集并将rabbitmq02、03加入01群集
5)访问web界面
6)web页面添加vhost
五、单台节点加入或退出群集
1)单节点加入集群
2)单节点退出集群

一、MQ简介

MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用程序的通信方法。应用程序通过读写出入队列的消息(针对应用程序的数据)来通信,而无需专用连接来链接它们。消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过 队列来通信。队列的使用除去了接收和发送应用程序同时执行的要求。

二、什么是RabbitMQ?

RabbitMQ是由Erlang语言编写的实现了高级消息队列协议(AMQP)的开源消息代理软件(也可称为 面向消息的中间件)。支持Windows、Linux/Unix、MAC OS X操作系统和包括JAVA在内的多种编程语言。

AMQP,即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。基于此协议的客户端与消息中间件可传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。

RabbitMQ使用场景:
1)异步处理;
2)应用解耦;
3)流量削峰;
4)消息通讯;

三、安装RabbitMQ

所需软件下载链接:https://pan.baidu.com/s/1vopw5bvLX4gUkabSthI0hw 提取码:ng8c

[root@localhost ~]# ls      #确认所需RPM包
erlang-18.1-1.el6.x86_64.rpm
rabbitmq-server-3.6.6-1.el6.noarch.rpm
socat-1.7.3.2-2.el7.x86_64.rpm
[root@localhost ~]# yum -y localinstall erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm
#安装RPM包
[root@localhost ~]# chkconfig rabbitmq-server on
#rabbitmq加入开机自启
[root@localhost ~]# /etc/init.d/rabbitmq-server start
#启动rabbitmq服务
[root@localhost ~]#  ps -ef | grep rabbitmq  
#确定rabbitmq正在运行,返回结果较多,省略
[root@localhost ~]# rabbitmq-plugins enable rabbitmq_management
#开启rabbitmq的web管理插件,以便可以通过浏览器进行访问
[root@localhost ~]#  rabbitmqctl add_user admin 123.com
#创建登录用户
#默认WEB管理的登录帐号和密码统一为:guest
[root@localhost ~]#  rabbitmqctl set_user_tags admin administrator
#将创建的admin用户添加至administrator组

默认RabbitMQ拥有如下端口号:
技术图片
一般常用就15672和5672!

客户端访问:
技术图片
技术图片

四、部署Rabbitmq集群

Rabbitmq集群大概分为两种方式:
1、普通模式:默认的集群模式,消息的尸体只存在一个节点上;
2、镜像模式:把需要的队列做成镜像,存在于多个节点。
ha-mode:
all:列队到所有节点;
exatly:随机镜像到其他节点上;
nodes:镜像到指定节点上。
集群节点模式:
1、内存节点:工作在内存上;
2、磁盘节点:工作在磁盘上;
例外:内存节点和磁盘节点共同存在,提高访问速度的同时增加数据持久化。

相比内存节点虽然不写入磁盘,但是它执行比磁盘节点要好,集群中,只需要一个磁盘来保存状态就足够了,如果集群中只有内存节点,那么节点一旦宕机,所有的状态、消息都会丢失,无法实现数据的持久化。

1)部署环境

系统 IP地址 主机名
Centos 7 192.168.1.4 rabbitmq01
Centos 7 192.168.1.5 rabbitmq02
Centos 7 192.168.1.6 rabbitmq03
Centos 7 192.168.1.7 rabbitmq04

其中192.168.1.4就是基于上面的单台rabbitmq做的。

2)安装rabbitmq服务

在192.168.1.5和192.168.1.6两个节点上部署,192.168.1.7稍后会用到!

[root@localhost ~]# ls      #确认所需RPM包
erlang-18.1-1.el6.x86_64.rpm
rabbitmq-server-3.6.6-1.el6.noarch.rpm
socat-1.7.3.2-2.el7.x86_64.rpm
[root@localhost ~]# yum -y localinstall erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm
#安装RPM包
[root@localhost ~]# chkconfig rabbitmq-server on
#rabbitmq加入开机自启
[root@localhost ~]# /etc/init.d/rabbitmq-server start
#启动rabbitmq服务

3)配置host文件,并将上述两个节点加入集群

[root@localhost ~]# echo -e "192.168.1.4 rabbitmq01
192.168.1.5 rabbitmq02
192.168.1.6 rabbitmq03
192.168.1.7 rabbitmq04" >> /etc/hosts
[root@localhost ~]# scp /etc/hosts root@192.168.1.5:/etc/
[root@localhost ~]# scp /etc/hosts root@192.168.1.6:/etc/
[root@localhost ~]# scp /etc/hosts root@192.168.1.7:/etc/
[root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.1.5:/var/lib/rabbitmq/
[root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.1.6:/var/lib/rabbitmq/
#将rabbitmq01的cookie节点信息复制到其他需要加入群集的节点
#部署群集的时候需要节点cookie信息一致

群集中的所有节点都需重启(包括rabbitmq01)。若重启过程中卡在某个界面,需手动强制重启!

[root@rabbitmq01 ~]# ps -ef | grep rabbitmq
#重启后,主机名自动更新了,确认了rabbitmq正在运行

4)rabbitmq01配置群集并将rabbitmq02、03加入01群集

以下操作可以根据主机名进行区分了!

[root@rabbitmq01 ~]# rabbitmqctl  stop_app   #停止rabbitmq节点服务
[root@rabbitmq01 ~]#  rabbitmqctl reset     #重置rabbitmq节点
[root@rabbitmq01 ~]# rabbitmqctl start_app    #启动rabbit节点服务
Starting node rabbit@rabbitmq01 ... #复制返回的节点名称
###########以下操作 rabbitmq02、03都需执行###########
[root@rabbitmq02 ~]# rabbitmqctl stop_app   #停止节点服务
[root@rabbitmq02 ~]# rabbitmqctl reset     #重置节点
[root@rabbitmq02 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq01
#以内存方式加入群集,后面是复制的rabbitmq01的节点名
[root@rabbitmq02 ~]# rabbitmqctl start_app   
[root@rabbitmq02 ~]# rabbitmq-plugins enable rabbitmq_management
#开启rabbitmq的web管理插件,以便可以通过浏览器进行访问
###########rabbitmq02、03执行完成后#################
[root@rabbitmq01 ~]#  rabbitmqctl cluster_status
#查看群集状态
Cluster status of node rabbit@rabbitmq01 ...
[{nodes,[{disc,[rabbit@rabbitmq01]},
         {ram,[rabbit@rabbitmq03,rabbit@rabbitmq02]}]},
 {running_nodes,[rabbit@rabbitmq02,rabbit@rabbitmq03,rabbit@rabbitmq01]},
 {cluster_name,<<"rabbit@rabbitmq01">>},
 {partitions,[]},
 {alarms,[{rabbit@rabbitmq02,[]},
          {rabbit@rabbitmq03,[]},
          {rabbit@rabbitmq01,[]}]}]
# rabbit01工作模式为磁盘节点;rabbit02和03为内存节点模式
# running_nodes:正在运行的节点
# cluster_name:节点名称
# alarms:发生问题时rabbit01、02、03会进行报警
#####由于刚才rabbitmq01重置,所以需要重新创建用户########
[root@rabbitmq01 ~]# rabbitmqctl add_user admin 123.com
[root@rabbitmq01 ~]# rabbitmqctl set_user_tags admin administrator

5)访问web界面

群集内任意节点的IP+15672端口都可以进行登录访问!
技术图片

6)web页面添加vhost

技术图片
技术图片
技术图片
技术图片
设置匹配策略:
技术图片
技术图片
设置发布消息内容:
技术图片
技术图片
技术图片

五、单台节点加入或退出群集

1)单节点加入集群

由于我在上面部署群集时,hosts文件已经可以解析群集内的节点,所以这里就省略解析了!

#############在192.168.1.7服务器上操作###################
[root@localhost ~]#  yum -y localinstall erlang-18.1-1.el6.x86_64.rpm rabbitmq-server-3.6.6-1.el6.noarch.rpm socat-1.7.3.2-2.el7.x86_64.rpm
[root@localhost ~]# chkconfig rabbitmq-server on
[root@localhost ~]#  /etc/init.d/rabbitmq-server start
[root@localhost ~]# scp root@rabbitmq01:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/
#将群集中的cookie信息复制到本地,之后重启
[root@rabbitmq04 ~]# rabbitmqctl stop_app
[root@rabbitmq04 ~]# rabbitmqctl reset
[root@rabbitmq04 ~]# rabbitmqctl join_cluster --ram rabbit@rabbitmq01
#以内存运行的方式加入群集,若要以磁盘的方式加入,省略“--ram”选项即可
[root@rabbitmq04 ~]# rabbitmqctl start_app
#开启web管理页面
[root@rabbitmq04 ~]# rabbitmq-plugins enable rabbitmq_management

查看web界面:
技术图片

2)单节点退出集群

[root@rabbitmq04 ~]# rabbitmqctl stop_app
#先在rabbitmq04上面停止节点
[root@rabbitmq01 ~]# rabbitmqctl -n rabbit@rabbitmq01 forget_cluster_node rabbit@rabbitmq04
#-n:指定节点名称
#forget_cluster_node:后面跟要删除的节点名称
#回到主节点(rabbitmq01)上删除节点

查看web界面:
技术图片

——————————本文到此结束,感谢阅读—————————————

以上是关于Rabbitmq简介及部署群集的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ 部署及配置详解(集群部署)

Redis的安装及创建节点部署群集

CentOS7 上部署Haproxy及Nginx 搭建Web群集

百万PV架构中redis缓存服务群集部署

Kafka原理及Kafka群集部署

LVS负载均衡群集部署之——NAT模式的介绍及搭建步骤