[喵咪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 才能顺利的建立集群
- 先启动双方的RabbitMQ
- 复制 RabbitMQ-1 中 /var/lib/rabbitmq/.erlang.cookie 文件中的值
- 粘贴到 RabbitMQ-2 /var/lib/rabbitmq/.erlang.cookie中 使用:wq! 保存
- 重启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的心得以及一些有意思的地方,也会分享出啦和大家一起学习讨论,多谢大家的支持本小节就到这里了....
注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!
- Java基础01 从HelloWorld到面向对象
- Java基础02 方法与数据成员
- 【Spring实战】—— 13 AspectJ注解切面
- EasyUI日期选择框
- Java基础03 构造器与方法重载
- web.xml is missing and <failOnMissingWebXml> is set to true
- 【Spring实战】—— 11 通过AOP为特定的类引入新的功能
- 使用Maven创建web项目
- 纸上谈兵: 树, 二叉树, 二叉搜索树
- 【Spring实战】—— 9 AOP环绕通知
- 陈辉:蘑菇街技术架构规划与成长
- JavaSE(二)之继承、封装、多态
- 人与人工智能机器人,究竟谁更聪明?
- 【Spring实战】—— 10 AOP针对参数的通知
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- (七)python3 只需3小时带你轻松入门——List与dict
- Rstudio支持可视化的Markdown编辑了?
- (八)python3 只需3小时带你轻松入门——List 与 dict 的常用操作
- (九)python3 只需3小时带你轻松入门——函数自定义
- (十)python3 只需3小时带你轻松入门——模块与包
- (十一)python3 只需3小时带你轻松入门——面向对象
- 一文读懂KEGG数据库
- (创建模式 上)设计模式——工厂、抽象工厂 C++/Python3实现
- 【新手宝典】一篇博文带萌新建站并了解建站体系流程和对萌新友好的便捷方式,这篇博文很有可能是你的启蒙文
- 一种不需要敲代码的Python 画图方法
- 【一】Windows API 零门槛编程指南——MessageBox 基本使用及基础讲解
- 【二】Windows API 零门槛编程指南——CreateWindow 窗口创建 “万字长篇专业术语全解”
- 「零门槛多语言 Python/C/C# 通用思想学习系列」第一篇:经典HelloWorld
- 直播系统定制,判断数据连接是否可用
- VS Code 编辑器入门指南上篇-核心概念与组件