[喵咪MQ(3)]RabbitMQ集群安装配置

[喵咪MQ(3)]RabbitMQ集群安装配置

在各项生产环境使用中,容灾总是一个很重要的话题,如果单点故障会导致整个系统奔溃或者是丢失数据是不是好气好气的,领导会追着你问这是怎么了?你只能说是我们没有经验什么什么组件故障了,这个是低级玩法,高级玩法是配置好集群容灾,告诉老板死一两台机器宕机了没有事没有影响,所以我们今天就来讲讲RabbitMQ的集群模式...

附上:

喵了个咪的博客:w-blog.cn

RabbitMQ官网 :http://www.rabbitmq.com/

1.配置集群

RabbitMQ通过ssh通道进行集群直接的链接,这里准备了两台服务器分别如下

  • 192.168.0.1 主机名 RabbitMQ-1
  • 192.168.0.1 主机名 RabbitMQ-2

首先我们需要在这两台机器上配置好互相的host可以通过主机名进行访问

vim /etc/hosts
内网地址 RabbitMQ-1
内网地址 RabbitMQ-2
service network restart


#在 RabbitMQ-1 能通:
ping RabbitMQ-2
#在 RabbitMQ-2 能通:
ping RabbitMQ-1

1.1 配置 Erlang Cookie

当我们可以ping通之后我们需要设置一下 Erlang Cookie 让两台机器保持同样的 Cookie 才能顺利的建立集群

  1. 先启动双方的RabbitMQ
  2. 复制 RabbitMQ-1 中 /var/lib/rabbitmq/.erlang.cookie 文件中的值
  3. 粘贴到 RabbitMQ-2 /var/lib/rabbitmq/.erlang.cookie中 使用:wq! 保存
  4. 重启RabbitMQ-2 RabbitMQ服务

1.2 join服务器建立关联

Cookie我们已经配置好了 接下来需要把两个集群关联起来

对 RabbitMQ-1 节点做如下操作

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

这个是用来在rabbitmq1上执行的,这个也可以不执行,直接在节点服务器执行下边的脚本,不过得保证这个rabbitmq服务是正常启动的.

RabbitMQ-2 节点服务配置脚本

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@RabbitMQ-1
rabbitmqctl start_app

1.3 查看集群状态

可以通过 rabbitmqctl cluster_status 查看到如下状态证明集群已经配置成功

[root@Sunmi-RabbitMQ-1 ~]# rabbitmqctl cluster_status
Cluster status of node ‘rabbit@Sunmi-RabbitMQ-1’ …
[{nodes,[{disc,[‘rabbit@Sunmi-RabbitMQ-1’]},
         {ram,[‘rabbit@Sunmi-RabbitMQ-2’]}]},
 {running_nodes,[‘rabbit@Sunmi-RabbitMQ-2’,’rabbit@Sunmi-RabbitMQ-1’]},
 {cluster_name,<<“rabbit@Sunmi-RabbitMQ-1”>>},
 {partitions,[]},
 {alarms,[{‘rabbit@Sunmi-RabbitMQ-2’,[]},{‘rabbit@Sunmi-RabbitMQ-1’,[]}]}]

注意:建立好集群之后需要重新配置一下用户 配置的用户会影响整个集群

2. 集群的各项模式

关于RabbitMQ 集群有两大模式需要说明,一个是磁盘模式或内存模式,一个是普通模式和镜像模式,我们先说磁盘和内存模式

2.1 磁盘和内存模式

磁盘模式故名思议,磁盘模式就是把数据持久化到磁盘让整个服务重启时数据也不会丢,缺点是I/O吞吐依赖磁盘性能

内存模式也就是把数据存在内存空间中读取写入速度非常快,缺点是当重启服务内存中的数据会丢失

可以通过web管理界面看到各个节点的运行模式,也可以通过命令来改变节点运行模式但是注意集群中必须有一个磁盘节点才能运行

2.2 普通模式和镜像模式

普通模式就是默认模式,我们现在集群有 A B 两台服务器,这个时候向A写入了一条数据,然后连接B去读取这条数据,B会先找到A去获取这条数据然后返回给用户,B并不存储向A写入的数据,反过来也是如此向B写入数据不会再A存储

这样看起来并没有什么问题,集群不就是这样吗?但是会产生两个问题

  • A 节点会去找B节点获取数据 ,如果B节点死了怎么办
  • 数据只在B节点存储B节点是内存模式不就丢了吗

第二点比较好解决,都用磁盘模式,写都只写磁盘模式的节点,虽然会降低性能但是没法解决第一个问题,B节点死了数据就没有来源了,这个时候就需要镜像模式出手了

镜像模式会在所有节点之间同步数据,也就是集群中有一个节点存活就能正常的使用下去,一般我们会用磁盘节点专门做持久化,内存节点提供使用

配置镜像模式只需要在主节点运行如下命令:

- p 之后加上你需要的Vhost
 rabbitmqctl set_policy -p / ha-all “^” ‘{“ha-mode”:”all”}’

在web管理界面队列里面也能够判断出来数据存储在几个节点上

不要盲目追求镜像模式,镜像模式节点之间同步数据也会带来开销所以更具场景来做出合理的判断

3 总结

关于RabbitMQ的介绍,单机模式,集群模式的博文以及列举完了,在之后又在使用RabbitMQ的心得以及一些有意思的地方,也会分享出啦和大家一起学习讨论,多谢大家的支持本小节就到这里了....

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏后端技术探索

让nginx更安全的几点注意事项

Nginx是当今最流行的Web服务器之一。它为世界上7%的web流量提供服务而且正在以惊人的速度增长。它是个让人惊奇的服务器,我愿意部署它。 下面是一个常见安全...

9620
来自专栏JAVA高级架构

高并发解决方案--负载均衡

29120
来自专栏PHP在线

session和cookie的辨析

session和cookie是网站浏览中较为常见的两个概念,也是比较难以辨析的两个概念,但它们在点击流及基于用户浏览行为的网站分析中却相当关键。基于网上一些文章...

29550
来自专栏日常学python

30行Python代码实现自动收发邮件

生活或者工作中我们经常容易忘记一些事情,这时候我们需要借助一些事物来提醒我们。读者中应该有很多运维攻城狮和测试攻城狮,服务器有异常时需要提醒我们,自动化测试执行...

24930
来自专栏步履前行

Java基础系列---Java平台上的一些问题

  从学习Java开始,我们接触了许多框架,从Hibernate、Strus、Strus2、Spring、Spring MVC、Spring boot等等,做J...

10410
来自专栏小特工作室

基于Ado.Net的日志组件

软件开发,离不开对日志的操作,它可以帮助我们查找和检测问题。好的日志组件可以对于整个系统来说,至关重要 在NaviSoft产品中,日志组件也占有非常重要的份量。...

23490
来自专栏Seebug漏洞平台

DeDeCMS v5.7 密码修改漏洞分析

织梦内容管理系统(DedeCms)以简单、实用、开源而闻名,是国内最知名的PHP开源网站管理系统,也是使用用户最多的PHP类CMS系统,在经历多年的发展,目前的...

48880
来自专栏老安的博客

用微信来一键开关zabbix报警

17240
来自专栏快乐八哥

搭建AngualarJS开发环境

1.选择Web浏览器 Chrome和Firefox浏览器 2.选择代码编辑器 Subline Text和Visual Studio Code 3.安装Web...

21160
来自专栏企鹅号快讯

你真的需要消息队列吗

我是一个极简主义者,我不喜欢让软件过早或不必要地复杂化。向软件系统添加组件是增加复杂性的一种方法。让我们以消息团队为例。 消息队列是一个系统,使您能够获得容错、...

21950

扫码关注云+社区

领取腾讯云代金券