博文大纲:
一、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\n192.168.1.5 rabbitmq02\n192.168.1.6 rabbitmq03\n192.168.1.7 rabbitmq04" >> /etc/hosts
[root@localhost ~]# scp /etc/hosts [email protected]:/etc/
[root@localhost ~]# scp /etc/hosts [email protected]:/etc/
[root@localhost ~]# scp /etc/hosts [email protected]:/etc/
[root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/var/lib/rabbitmq/
[root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie [email protected]:/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界面:
——————————本文到此结束,感谢阅读—————————————