Centos7部署RabbitMQ的镜像队列集群
一、背景
在上一章节中,我们学会了如何搭建一个单节点的RabbitMQ服务器,但是单节点的RabbitMQ不可靠,如果单节点挂掉,则会导致消息队列不可用。此处我们搭建一个3个节点的RabbitMQ集群,用于解决这个问题。
二、介绍RabbitMQ的集群
1、集群类型
默认情况下的RabbitMQ集群只是元数据(metadata)是同步的,队列中的消息是不同步的,这样也是不安全的,需要配置成镜像队列,让数据也冗余到别的节点中,这样才能保证一个节点挂掉,还可以对外提供服务。
元数据
:指的是队列信息、交换机信息、绑定信息等。
2、节点名的重要性
在集群中,节点名必须要唯一,集群中是通过节点名来进行联系的。
3、erlang cookie 的重要性
集群节点中是通过什么来认证的,从而让集群节点可以互相通讯,靠的就是 erlang cookie
,因此集群中的erlang cookie的值必须要一致。
1、erlang cookie文件的位置
不同的操作系统这个文件的位置是不一样的。
这个位置一般是在 /var/lib/rabbitmq/.erlang.cookie
这个位置。
2、erlang cookie文件的权限
.erlang.cookie
的文件权限一般给600
就可以了,不要给太高或太低,否则集群可能无法启动。
4、集群节点类型
RabbitMQ集群分为磁盘节点
和内存节点
。
1、磁盘节点所有的数据都是存在磁盘上
2、内存节点的数据是存在内存中,但不是所有的数据都是存在内存中的,比如:消息只会存在索引等。
3、在一个集群中至少需要一个磁盘(disc)节点
5、集群中加入节点
新加入的集群的节点必须是一个全新的节点,不可以带有数据,如果存在则需要在加入集群的节点上执行rabbitmqctl reset
。
三、搭建一个RabbitMQ集群
此处以3个Centos7服务器来搭建一个RabbitMQ集群。
主机名 | ip地址 | 节点类型 | 用户名 | 密码 | management port | amqp port |
---|---|---|---|---|---|---|
centos01 | 192.168.56.101 | 磁盘节点(disc) | admin | admin | 15672 | 5672 |
centos02 | 192.168.56.102 | 磁盘节点(disc) | admin | admin | 15672 | 5672 |
centos03 | 192.168.56.103 | 内存节点(ram) | admin | admin | 15672 | 5672 |
1、配置3个服务器都可以访问各自的主机名
在3台服务器上都需要这样操作
vim /etc/hosts
bash192.168.56.101 centos01
192.168.56.102 centos02
192.168.56.103 centos03
2、同步各个节点的erlang cookie
如果cookie文件不存在,则可以启动一个RabbitMQ节点,然后在复制过去,在复制的过程中,需要保证 RabbitMQ节点最好都不要启动。
在centos01服务器上操作
scp /var/lib/rabbitmq/.erlang.cookie root@192.168.56.102:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie root@192.168.56.103:/var/lib/rabbitmq/.erlang.cookie
3、创建集群
1、centos01服务器上操作
rabbitmq-server -detached
可以查看/var/log/rabbitmq/rabbit\@centos01.log
这个日志文件看是否启动成功。
2、放行集群通讯端口等
firewall-cmd --zone=public --add-port=5672/tcp --permanent
firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --zone=public --add-port=4369/tcp --permanent
firewall-cmd --zone=public --add-port=25672/tcp --permanent
3、centos02加入centos01
rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@centos01
rabbitmqctl start_app
4、centos03加入centos02
rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@centos02 --ram
rabbitmqctl start_app
5、查看集群是否构建完成
6、将centos03集群移除
1、将需要被移除的节点停止
rabbitmqctl stop
2、在另外启动的节点上执行
rabbitmqctl forget_cluster_node rabbit@centos03
3、重新加入集群中
在启动的时候可能报如下错误"Node rabbit@centos03 thinks it's clustered with node rabbit@centos02, but rabbit@centos02 disagrees"
这个时候我们需要删除rm -rvf /var/lib/rabbitmq/mnesia/
这个目录,然后在次执行加入集群的命令即可。
rabbitmq-server -detached
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@centos02 --ram
rabbitmqctl start_app
四、配置镜像集群
1、普通集群
经过上方步骤构成的集群是一个普通的集群,只是队列中的元数据共享,而队列中的数据是具体保存到某个节点上的。
这样够不成高可用,如果这个节点挂掉的话,则这个队列的数据还是不可以消费的,也无法往这个队列中发送数据。那么如果解决这个问题呢,答案是使用镜像队列集群。
2、镜像队列集群
在默认的虚拟主机(/
)所有的队列都配置成镜像队列。(ha-all
只是取的名字)
rabbitmqctl set_policy --vhost / ha-all "^" '{"ha-mode":"all"}'
创建完镜像队列后发现,队列在所有的节点上都存在。
镜像队列的高级用法,参考官方文档 https://www.rabbitmq.com/ha.html
五、参考文档
Centos7部署RabbitMQ的镜像队列集群的更多相关文章
- RabbitMQ镜像队列集群搭建、与SpringBoot整合
镜像模式 集群模式非常经典的就是Mirror镜像模式,保证100%数据不丢失,在实际工作中也是用的最多的,并且实现集群比较的简单. Mirror镜像队列,目的是为了保证 RabbitMQ 数据的高可靠 ...
- 详细说明-CentOS7部署FastDFS+nginx模块(包含集群方式)
软件下载 # 已经事先把所需软件下载好并上传到/usr/local/src目录了 https://github.com/happyfish100/libfastcommon/archive/V1.0. ...
- RabbitMQ 3.9.7 镜像模式集群的搭建
1. 概述 老话说的好:做人脚踏实地,一步一个脚印,便定能战胜一切困难,最终取得成功!!! 言归正传,之前我们聊了 RabbitMQ 单点服务的安装,今天我们来聊聊 RabbitMQ 3.9.7 镜像 ...
- (转)CentOs7.3 搭建 RabbitMQ 3.6 Cluster 集群服务与使用
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.ActionScript.XMPP.STO ...
- RabbitMQ的高可用集群部署
RabbitMQ的高可用集群部署 标签(空格分隔): 消息队列 部署 1. RabbitMQ部署的三种模式 1.1 单一模式 单机情况下不做集群, 仅仅运行一个RabbitMQ. # docker-c ...
- RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列
系列文章: RabbitMQ从零到集群高可用(.NetCore5.0) - RabbitMQ简介和六种工作模式详解 RabbitMQ从零到集群高可用(.NetCore5.0) - 死信队列,延时队列 ...
- RabbitMQ 3.9.7 镜像模式集群与Springboot 2.5.5 整合
1. 概述 老话说的好:做人要懂得变通,善于思考,有时稍微转个弯,也许问题就解决了. 言归正传,之前我们聊了 RabbitMQ 3.9.7 镜像模式集群的搭建,今天我们来聊聊 RabbitMQ 3.9 ...
- RabbitMQ 3.7.X集群:从入门到精通,这一篇就够了
RabbitMQ是流行的开源消息队列系统,本身已经具备了较强的并发处理速度及运行稳定性,然而在大规模的实际应用中,往往还需要使用集群配置来保证系统中消息通信部分的高可用性,并发处理性能及异常恢复能力. ...
- 搭建 RabbitMQ Server 高可用集群
阅读目录: 准备工作 搭建 RabbitMQ Server 单机版 RabbitMQ Server 高可用集群相关概念 搭建 RabbitMQ Server 高可用集群 搭建 HAProxy 负载均衡 ...
随机推荐
- linux hostid与lmhostid
https://wangchujiang.com/linux-command/c/hostid.html hostid(host identifier) 显示当前主机的十六进制数字标识. 概要 hos ...
- fatal error: sqlite3.h: No such file or directory
编译带有sqlite3的数据库c语言程序时,出现fatal error: sqlite3.h: No such file or directory,找不到头文件的问题.应该是是系统没有安装函数库. 在 ...
- 正则表达式匹配 牛客网 剑指Offer
正则表达式匹配 牛客网 剑指Offer 题目描述 请实现一个函数用来匹配包括'.'和''的正则表达式.模式中的字符'.'表示任意一个字符,而''表示它前面的字符可以出现任意次(包含0次). 在本题中, ...
- cf16C Monitor(额,,,,水数学,,)
题意: 一块镜子长宽是a*b.现在要调整(切割)成x:y的比例. 问调整完的最大面积是多少. 思路: 先将x,y弄成最简比例,然后放大到不超过min(a,b)即可. 代码: ll a,b,x,y; l ...
- poj 1330 Nearest Common Ancestors (最简单的LCA)
题意: 给出一棵树的结构. 给出两个点X和Y,求它俩的LCA. 思路: 只需求两个点的LCA,用了两种方法,一种离线tarjan,一种直接搞. 看代码. 代码: 方法一:直接搞. int const ...
- cm3 逆向分析
目录 cm3 逆向分析 前言 逆向分析 cm3 逆向分析 前言 这道题没加壳,也没加密算法,主要看代码逻辑. 逆向分析 代码很短,一共这么几句. 看提示知道只让我们输入w.s.a.d这几个字符,并且用 ...
- 面试官:熟悉JS中的new吗?能手写实现吗?
目录 1 new 运算符简介 2 new 究竟干了什么事 3 模拟实现 new 运算符 4 补充 预备知识: 了解原型和原型链 了解this绑定 1 new 运算符简介 MDN文档:new 运算符创建 ...
- 区块链开发学习第三章:私有链上部署helloBlockchain简单合约
前面讲了部署私有链以及新增账户,现在进行到了部署合约了,此操作真是踩了无数无数无数的坑,到写文章为止确实是已经部署好了,但是还有些坑是还没有解决的! 一.Solidity编译器 开始的时候用的http ...
- 力扣 - 剑指 Offer 59 - I. 滑动窗口的最大值
题目 剑指 Offer 59 - I. 滑动窗口的最大值 思路1(单调队列) 使用单调(递减)队列,保持队列中的元素是递减顺序,队列头保存的是当前窗口中最大的元素 首先先模拟建立第一个窗口,同时获取第 ...
- vue中axios的post和get请求示例
POST请求 methods: { isclick() { if (this.account == "" || this.pwd == "") { this.$ ...