初识openstack之2——RabbitMQ消息中间件及高可用
一、基础介绍
随着分布式应用的发展消息队列中间件成为C/S架构中解耦的一个重要环节,传统的消息传输模型中,C端发出消息,S端必须在线,否则将无法继续进行,而在拥有消息中间件的模型下消息产生者(C端)发出的消息由中间件来接受,即使此时消息消费者(S端)即便不在线也有可能不产生中断。RabbitMQ作为消息中间件的一种其组成部分如下图所示:
他的核心组成部分为:
- 交换器(Exchange):起作用主要是将收到的消息交换至对应的队列
- 队列(Message):用于存放供订阅者(Consumer)读取消息的空间
- 绑定器(Binding):用来定义交换器通过何种路由模式将消息路由到队列中
- 通道(channel):队列和订阅者之间传递消息的通道
每个消息中间件称为一个broker,每个vhost中可以包含一个broker,而一个server可以包含多个vhost,这样起到隔离broker的作用二、RabbitMQ安装
安装RabbitMQ程序
RabbitMQ使用erlang语言开发,位于epel源中,可以使用yum直接安装[root@node1 rabbitmq]# yum install rabbitmq-server
安装完成后,可以看到日常使用时用到最多的三个命令
- 开启图形界面
RabbitMQ提供了一个图形界面进行管理,开启图形界面前需要加载plugin中的rabbitmq_management插件[root@node1 rabbitmq]# rabbitmq-plugins enable rabbitmq_management
E为手动加载的模块,e为启动E模块时所依赖的模块 - 启动服务
[root@node1 rabbitmq]# systemctl start rabbitmq-server.service
RabbitMQ服务侦听在3个端口上,其中5672为RabbitMQ服务自身所侦听的端口,15672为提供的web界面所侦听的端口,25672为RabbitMQ集群所侦听的端口
4.登陆Web界面
通过浏览器,使用默认的guest账户(密码同账户)可以登录进行管理
三、RabbitMQ管理
由于RabbitMQ可以通过web界面进行管理,所以在文本界面最常的操作是通过rabbitmqctl命令来增加、删除用户或者虚拟主 5b4 机,并且用户进行授权
- 查看当前Server上已有的虚拟主机,默认的vhost为/
[root@bogon ~]# rabbitmqctl list_vhosts
- 查看当前Server上已有的用户,默认guest用户拥有管理员权限
[root@bogon ~]# rabbitmqctl list_users
- 查看用户权限,可以看出当前guest用户在虚拟主机"/"上拥有的权限,可以通过命令进行设置去权限,语法为:
set_permissions [-p <vhostpath>] <user> <conf> <write> <read>
需要说明的是:用户对一个虚拟机所拥有的权限可以传递到这个虚拟机的子虚拟机中[root@bogon ~]# rabbitmqctl list_permissions
- 示例:在"/"虚拟机下创建一个vhost1子虚拟机,并添加一个ark账户让其对vhost1虚拟机具有全部权限
[root@bogon ~]# rabbitmqctl add_user ark ark [root@bogon ~]# rabbitmqctl add_vhost /vhost1 [root@bogon ~]# rabbitmqctl set_permissions -p /vhost1 ark ".*" ".*" ".*"
四、RabbitMQ高可用
消息中间件在分布式架构中充当了解耦的重要角色,所以他自身就不能存在单点隐,本示例通过2个节点介绍RabbitMQ高可用部署,信息如下:
节点名称 | IP地址 | 节点信息 |
---|---|---|
node3 | 172.16.10.30 | 主节点 |
node4 | 172.16.10.40 | 从节点 |
- 准备工作
首先修改hosts文件,将node3和node4对应的IP地址添加进hosts文件中,其次主从节点间NTP时间需要同步 - 启动插件和服务
[root@host3 ~]# rabbitmq-plugins enable rabbitmq_management [root@host3 ~]# rabbitmq-server -detached
后期可以通过rabbitmqctl stop命令停止服务
- 查看个节点所在的集群
[root@host3 ~]# rabbitmqctl cluster_status
[root@host4 ~]# rabbitmqctl cluster_status
所谓高可用,就是将一个集群加入另一个集群中,本例中就是将node4加入node3中 - 复制cookie
将Master节点中的cookie文件复制到其他所有节点,要注意保持其权限为400,cookie文件为/var/lib/rabbitmq/.erlang.cookie[root@host3 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@172.16.10.40:/var/lib/rabbitmq/
- 将从节点加入主节点集群
在各从节点执行以下命令:[root@host4 ~]# rabbitmqctl stop_app [root@host4 ~]# rabbitmqctl join_cluster rabbit@host3 [root@host4 ~]# rabbitmqctl start_app
五、使用haproxy反向代理
RabbitMQ在实现高可用后,对外需要提供一个统一的访问地址,Nginx在1.9版本后才引入了tcp协议的代理,此处介绍使用haproxy进行反向代理。在安装完haproxy软件并启动后,新建一个配置文件,内容如下:
[root@host5 ~]# vim /etc/rabbitmq/rabbitmq.conf listen rabbitmq 172.16.10.50:5672 mode tcp balance roundrobin server rabbit1 172.16.10.30:5672 check inter 5000 server rabbit2 172.16.10.40:5672 check inter 5000
其中服务名(rabbitmq|rabbit1|rabbit2)和侦听的端口(5672)可以需求命名,启动服务操作完成,可以使用keepalive对haproxy高可用,此处不再赘述
[root@host5 ~]# haproxy -f /etc/rabbitmq/rabbitmq.conf
- Kafka、RabbitMQ、RocketMQ 消息中间件的对比 | 消息发送性能篇
- 消息中间件RabbitMQ
- [置顶] 中间件系列二 RabbitMQ之消息持久性、确认机制、拒绝、预取数量、分配策略
- Kafka、RabbitMQ、RocketMQ消息中间件的对比
- 分布式系统消息中间件——RabbitMQ的使用基础篇
- 转:Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能 (阿里中间件团队博客)
- 消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ
- 消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ
- Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能
- Java消息中间件--ActiveMq,RabbitMQ,Kafka
- Kafka、RabbitMQ、RocketMQ 消息中间件的对比 | 消息发送性能篇
- Kafka、RabbitMQ、RocketMQ 消息中间件的对比 | 消息发送性能篇
- 使用rabbitmq消息中间件
- [置顶] 消息中间件Rabbitmq(二)-使用详解
- Kafka、RabbitMQ、RocketMQ消息中间件的对比 —— 消息发送性能-转自阿里中间件
- 消息中间件--RabbitMQ
- 消息中间件之RabbitMQ
- 在python中引入rabbitmq消息中间件
- 架构师之路-如何建立高可用消息中间件kafka
- 【消息中间件之RabbitMQ学习】-开篇-001