千家信息网

Rabbitmq群集部署

发表于:2024-11-29 作者:千家信息网编辑
千家信息网最后更新 2024年11月29日,博文大纲:一、Rabbitmq概念二、部署单台Rabbitmq三、部署Rabbitmq集群四、单台节点加入或退出群集配置一、Rabbitmq概念RabbitMQ是一个开源的靠AMQP协议实现的服务,服
千家信息网最后更新 2024年11月29日Rabbitmq群集部署

博文大纲:
一、Rabbitmq概念
二、部署单台Rabbitmq
三、部署Rabbitmq集群
四、单台节点加入或退出群集配置

一、Rabbitmq概念

RabbitMQ是一个开源的靠AMQP协议实现的服务,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
它可以使对应的客户端(client)与对应的消息中间件(broker)进行交互。消息中间件发布者(publisher)那里收到消息(发布消息的应用,也称为producer),然后将他们转发给消费者(consumers,处理消息的应用)。由于AMQP是一个网络协议,所以发布者、消费者以及消息中间件可以部署到不同的物理机器上。

Rabbitmq使用场景

消息队列在实际应用中常用在异步处理、应用解耦、流量削锋和消息通讯这四个场景。

二、部署单台Rabbitmq

注:在开始之前,主机名最好为默认的localhosts(如果不是,会在启动rabbitmq时报错,解决方法:重启主机,再启动rabbitmq)

可以自行在官网下载所需软件,也可以下载我网盘中的rpm包,然后自行上传至服务器。

下面这台服务器的IP为192.168.20.2。

[root@localhost src]# ls      #确认所需RPM包erlang-18.1-1.el6.x86_64.rpmrabbitmq-server-3.6.6-1.el6.noarch.rpmsocat-1.7.3.2-2.el7.x86_64.rpm[root@localhost src]# 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 src]# chkconfig rabbitmq-server on   #rabbitmq加入开机自启[root@localhost src]# /etc/init.d/rabbitmq-server start    #启动rabbitmq服务

确定rabbitmq正在运行:

[root@localhost src]# ps -ef | grep rabbitmq    

上述命令返回的结果如下:

#开启rabbitmq的web管理插件,以便可以通过浏览器进行访问[root@localhost src]# rabbitmq-plugins enable rabbitmq_management#创建登录用户[root@localhost src]# rabbitmqctl add_user admin 123.com#将创建的admin用户添加至administrator组[root@localhost src]# rabbitmqctl set_user_tags admin administrator

客户端访问rabbitmq服务器的15672端口,使用新创建的admin用户进行登录,登录成功后显示如下:

能够访问成功,表示单台rabbitmq就搭建完成了。

三、部署Rabbitmq集群

Rabbitmq集群大概分为两种方式:
1、普通模式:默认的集群模式,消息的尸体只存在一个节点上;
2、镜像模式:把需要的队列做成镜像,存在于多个节点。
ha-mode:

  • all:列队到所有节点;
  • exatly:随机镜像到其他节点上;
  • nodes:镜像到指定节点上。

集群节点模式:
1、内存节点:工作在内存上;
2、磁盘节点:工作在磁盘上;
例外:内存节点和磁盘节点共同存在,提高访问速度的同时增加数据持久化。

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

1、部署环境如下:

其中192.168.20.2是基于上面的单台rabbitmq来做的。

2、安装rabbitmq服务

在192.168.20.3和20.4两个节点(20.5节点后面再用到)进行以下操作,以便部署rabbitmq服务:

#上传所需rpm包[root@localhost src]# ls      erlang-18.1-1.el6.x86_64.rpmrabbitmq-server-3.6.6-1.el6.noarch.rpmsocat-1.7.3.2-2.el7.x86_64.rpm#安装rabbitmq[root@localhost src]# 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 #启动rabbitmq并加入开机自启[root@localhost src]# /etc/init.d/rabbitmq-server start[root@localhost src]# chkconfig rabbitmq-server on

3、配置主机192.168.20.2

[root@localhost ~]# tail -4 /etc/hosts     #配置本地解析(主机名直接写想要自定义的即可)192.168.20.2 rabbitmq01192.168.20.3 rabbitmq02192.168.20.4 rabbitmq03192.168.20.5 rabbitmq04#将hosts文件复制到其他节点[root@localhost ~]# scp /etc/hosts root@192.168.20.3:/etc/[root@localhost ~]# scp /etc/hosts root@192.168.20.4:/etc/[root@localhost ~]# scp /etc/hosts root@192.168.20.5:/etc/#将rabbitmq01的cookie节点信息复制到其他需要加入群集的节点#部署群集的时候需要节点cookie信息一致[root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.20.3:/var/lib/rabbitmq/[root@localhost ~]# scp /var/lib/rabbitmq/.erlang.cookie root@192.168.20.4:/var/lib/rabbitmq/

4、重启所有要加入群集的节点服务器

在所有要加入群集的服务器上执行以下命令进行重启(包括rabbitmq01)。

[root@localhost ~]# init 6       #重启后就会发现主机名已经更改为hosts文件中定义的了

若重启的时后被卡在某个界面,那么需要强制重启。

[root@rabbitmq01 ~]# ps -ef | grep rabbit    #重启后确定已经启动

5、在rabbitmq01上配置群集

[root@rabbitmq01 ~]# rabbitmqctl  stop_app   #停止rabbitmq节点服务[root@rabbitmq01 ~]#  rabbitmqctl reset     #重置rabbitmq节点[root@rabbitmq01 ~]# rabbitmqctl start_app    #启动rabbit节点服务Starting node rabbit@rabbitmq01 ... #复制返回的节点名称

6、配置rabbitmq02、03加入rabbitmq01群集

[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

7、在rabbitmq01上查看节点状态

[root@rabbitmq01 ~]# rabbitmqctl cluster_status       #查看节点状态Cluster status of node rabbit@rabbitmq01 ...[{nodes,[{disc,[rabbit@rabbitmq01]},         {ram,[rabbit@rabbitmq03,rabbit@rabbitmq02]}]}, {running_nodes,[rabbit@rabbitmq03,rabbit@rabbitmq02,rabbit@rabbitmq01]}, {cluster_name,<<"rabbit@rabbitmq01">>}, {partitions,[]}, {alarms,[{rabbit@rabbitmq03,[]},          {rabbit@rabbitmq02,[]},          {rabbit@rabbitmq01,[]}]}]# rabbit01工作模式为磁盘节点;rabbit02和03为内存节点模式# running_nodes:正在运行的节点# cluster_name:节点名称# alarms:发生问题时rabbit01、02、03会进行报警

8、在rabbitmq创建管理用户并加入管理组

由于节点被reset重置了,所以用户也需要重新创建。

[root@rabbitmq01 ~]# rabbitmqctl add_user admin 123.com[root@rabbitmq01 ~]# rabbitmqctl set_user_tags admin administrator

9、登录web界面访问

群集内任意节点的IP+15672端口都可以进行登录:

可以在下面的页面看到群集节点的信息:

10、配置web界面添加Vhost

进入创建的虚拟主机:

然后配置如下:

设置完成后再次查看虚拟主机:

设置匹配策略:

发布消息:

设置发布消息内容:

然后刷新当前页面,即可看到在当前虚拟主机中的队列总数:

四、单台节点加入或退出群集配置

1、节点加入群集

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

#在节点192.168.20.5服务器上安装rabbitmq并配置[root@localhost src]# 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 src]# chkconfig rabbitmq-server on[root@localhost src]# /etc/init.d/rabbitmq-server start#将群集中的cookie信息复制到本地[root@localhost src]# scp root@rabbitmq01:/var/lib/rabbitmq/.erlang.cookie /var/lib/rabbitmq/[root@localhost src]# init 6       #重启本机#加入群集[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界面,确认rabbitmq04加入到群集:

2、单节点退出群集

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

-------- 本文至此结束,感谢阅读 --------

节点 消息 服务 配置 主机 内存 磁盘 服务器 集群 模式 中间件 用户 应用 登录 信息 名称 方式 状态 界面 镜像 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 网络安全资料汇编 网络安全和信息化工作总结的通知 苹果终端怎么登录服务器 广东大学生网络安全攻防大赛赛题 外文数据库查询系统 ni 数据库恢复 光遇可以转服务器吗 软件任务书与软件开发计划 jsp访问数据库方式 东莞商城软件开发程序 集优网络技术服务工作室 软件开发外包公司技术 数据库中联合主键作用 db2数据库安装教程 网络安全是创新的而不是发展的 博山办公oa软件开发 宿州映雪网络技术服务有限公司 广州哪家学校学软件开发 数据分析师没有数据库权限 为什么和如何维护网络安全 软件开发转行开挖掘机了 网络安全是计算机维护的漏洞 软件开发人员签定保密协议书 协调统筹网络安全工作的部门 服务器油瓶漫画的启示作文 腾讯云服务器手机管理 弹幕姬显示未知服务器 如何用电脑当服务器远程上传 进击要塞无法加入服务器 字节跳动进入网络安全业务
0