前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >[喵咪MQ(3)]RabbitMQ集群安装配置

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

作者头像
喵了个咪233
发布2018-03-02 14:54:43
7480
发布2018-03-02 14:54:43
举报
文章被收录于专栏:喵了个咪的博客空间

[喵咪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可以通过主机名进行访问

代码语言:javascript
复制
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 节点做如下操作

代码语言:javascript
复制
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app

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

RabbitMQ-2 节点服务配置脚本

代码语言:javascript
复制
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@RabbitMQ-1
rabbitmqctl start_app

1.3 查看集群状态

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

代码语言:javascript
复制
[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节点死了数据就没有来源了,这个时候就需要镜像模式出手了

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

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

代码语言:javascript
复制
- p 之后加上你需要的Vhost
 rabbitmqctl set_policy -p / ha-all “^” ‘{“ha-mode”:”all”}’

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

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

3 总结

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • [喵咪MQ(3)]RabbitMQ集群安装配置
    • 1.配置集群
      • 1.1 配置 Erlang Cookie
    • 1.2 join服务器建立关联
      • 1.3 查看集群状态
    • 2. 集群的各项模式
      • 2.1 磁盘和内存模式
      • 2.2 普通模式和镜像模式
    • 3 总结
    相关产品与服务
    数据保险箱
    数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档