【部署篇】RabbitMq-03集群模式部署

一、准备主机 

准备3台主机用于rabbitmq部署,文章中是在centos7上安装部署rabbitmq3.8通过文章中介绍的方式可以同样在centos8、centos9上部署,只需下载对应的版本进行相同的操作。

主机IP角色说明
192.168.128.31种子节点
192.168.128.32普通节点
192.168.128.33普通节点

二、部署rabbitmq

在每台主机上都进行相同的操作部署erlang和rabbitmq,版本对应信息及单机部署详情可以参观前一篇文章【部署篇】RabbitMq-02单机模式部署,无法下载部署包时可通过文章附件进行下载。

2.1安装Erlang

直接到rabbitmq仓库中下载,安装包下载地址:Releases · rabbitmq/erlang-rpm · GitHub,这里要注意下载的版本名称与操作系统版本的对应关系,如el7,el8,el9分别对应的是centos7、centos8、centos9版本。

备注:文章关联了安装部署使用的资源包,可以直接下载

# 下载erlang
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.4.18/erlang-23.3.4.18-1.el7.x86_64.rpm

# 安装erlang
yum install erlang-23.3.4.18-1.el7.x86_64.rpm -y

# 查看erlang
erl -v

2.2安装 RabbitMQ 

1.进入rabbitmq仓库中下载,安装包下载地址:Releases · rabbitmq/rabbitmq-server · GitHub

2.选择名称中包含 noarch的rpm包,表示该软件包是“无架构”(no architecture)特定的。这意味着该软件包不依赖于特定的硬件架构或操作系统架构,可以在任何架构上运行。

3.由于rabbitmq后期版本已经不在支持centos7,这里我选择3.8.30进行下载安装。

4.rabbitmq默认端口号:5672

备注:文章关联了安装部署使用的资源包,可以直接下载

# 下载安装包
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.30/rabbitmq-server-3.8.30-1.el7.noarch.rpm

# rabbitmq的安装依赖socat
yum install socat -y

# 安装Rabbitmq
yum install rabbitmq-server-3.8.30-1.el7.noarch.rpm -y

2.3检测服务

# 启动服务
systemctl start rabbitmq-server
 
# 查看状态
systemctl status rabbitmq-server

 2.4关闭防火樯

#关闭防火樯
systemctl stop firewalld

三、集群准备

  • 同步其中一台的erlan.cookie到其他服务器
# 复制31至32
scp /var/lib/rabbitmq/.erlang.cookie root@192.168.128.32:/var/lib/rabbitmq/.erlang.cookie

# 复制31至33
scp /var/lib/rabbitmq/.erlang.cookie root@192.168.128.33:/var/lib/rabbitmq/.erlang.cookie

备注:这步必须确保文件复制并被替换否则会影响加入集群。 

  • 修改主机名分别为node1,node2,node3
# 在31上执行
echo 'node1' > /etc/hostname
# 使用 hostname 命令使更改立即生效
sudo hostname -F /etc/hostname

# 在32上执行
echo 'node2' > /etc/hostname
# 使用 hostname 命令使更改立即生效
sudo hostname -F /etc/hostname

# 在33上执行
echo 'node3' > /etc/hostname
# 使用 hostname 命令使更改立即生效
sudo hostname -F /etc/hostname
  • 配置host文件,并确保通过名称相互能ping通,这里的node1,2,3名称是可以自定义的。
# 编辑hosts文件
vi /etc/hosts

# 输入对应内容
192.168.128.31 node1
192.168.128.32 node2
192.168.128.33 node3

修改/etc/rabbitmq/rabbitmq-env.conf指定节点名称

# 设置31节点名称
echo 'RABBITMQ_NODENAME=rabbit@node1'>/etc/rabbitmq/rabbitmq-env.conf

# 设置31节点名称
echo 'RABBITMQ_NODENAME=rabbit@node2'>/etc/rabbitmq/rabbitmq-env.conf

# 设置31节点名称
echo 'RABBITMQ_NODENAME=rabbit@node3'>/etc/rabbitmq/rabbitmq-env.conf

四、加入集群

  • 选择第一个节点作为种子节点
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
  • 在其他节点上,使用rabbitmqctl命令加入集群 
# 加入集群
rabbitmqctl stop_app
rabbitmqctl reset
#rabbitmqctl join_cluster {cluster_node}@{node_name}
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app

# 如果.erlang.cookie无权限,可以设置
sudo chmod 600 /var/lib/rabbitmq/.erlang.cookie
sudo chown rabbitmq:rabbitmq /var/lib/rabbitmq/.erlang.cookie

其中 {cluster_name}@{node_name} 是种子节点的名称及/etc/rabbitmq/rabbitmq-env.conf中配置的名称相对应

  • 启用集群高可用,在任意节点执行
rabbitmqctl set_policy ha-all "" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
  • 设置管理员帐号

备注:由于前边调用了reset导致配置清空,需要重新设置管理员

# 配置管理员及权限
rabbitmqctl add_user  admin 123456
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
rabbitmqctl set_user_tags admin administrator
  • 访问管理页面

        登录管理页面地址:http://192.168.128.31:15672输入帐号:admin,密码:123456登录。

五、运维命令

1.查看节点状态
rabbitmqctl cluster_status

2.停止服务
rabbitmqctl stop_app

3.重置配置和数据
rabbitmqctl reset

4.加入集群
rabbitmqctl join_cluster [cluser_node]@[node_name] 

5.启动服务
rabbitmqctl start_app

六、自动处理网络分区【可选】

RabbitMQ 提供了三种方法自动地处理网络分区pause-minority 模式、pause-if-all-down 模式和autoheal 模式。默认是 ignore 模式,即不自动处理网络分区,所以在这种模式下,当网络分区的时候需要人工介入。在 rabbitmq.config 配置文件中配置cluster_partition_handling 参数即可实现相应的功能。默认的 ignore 模式的配置如下,注意最后有个点号:

[
    {
        rabbit, [
            {cluster_partition_handling, ignore}
        ]
    }
]

pause-minority 模式

在pause-minority 模式下,当发生网络分区时,集群中的节点在观察到某些节点"down"的时候,会自动检测其自身是否处于"少数派"(分区中的节点小于或者等于集群中一半的节点数),RabbitMQ 会自动关闭这些节点的运作。根据 CAP 原理,这里保障了P,即分区耐受性。这样确保了在发生网络分区的情况下,大多数节点(当然这些节点得在同一个分区中)可以继续运行。"少数派"中的节点在分区开始时会关闭,当分区结束时又会启动。这里关闭是指RabbitMQ 应用的关闭,而Erlang 虚拟机并不关闭,类似于执行了 rabbitmqctl stop_app 命令。处于关闭的节点会每秒检测一次是否可连通到剩余集群中,如果可以则启动自身的应用。相当于执行 rabbitmqctl start_app 命令。

pause-minority 模式相应的配置如下:

[
    {
        rabbit, [
            {cluster_partition_handling, pause-minority}
        ]
    }
]

需要注意的是RabbitMQ 会关闭不是严格意义上的大多数,比如在一个集群中只有两个节点的时候并不适合采用pause-minority 的模式,因为其中任何一个节点失败而发生网络分区时,两个节点都会关闭。当网络恢复时有可能两个节点会自动启动恢复网络分区,也有可能仍保持关闭状态,然而如果集群中的节点数远大于2 个时,pause-minority 模式比 ignore 模式更加可靠,特别是网络分区通常是由单节点网络故障而脱离原有分区引起的。

当对等分区出现时,会关闭这些分区内的所有节点,对于前面的[node1,node2] [node3,node4] 的例子而言,这四个节点上的RabbitMQ 应用都会被关闭,只有等待网络恢复之后,才会自动启动所有的节点以求从网络分区中恢复。

pause-if-all-down 模式

在pause-if-all-down 模式下,RabbitMQ 集群中的节点在和所配置的列表中的任何节点不能交互时才会关闭 语法为 {pause_if_all_down, [nodes], ignore|autoheal},其中[nodes]为受信节点,参考配置如下:

[
    {
        rabbit, [
            {cluster_partition_handling, {pause_if_all_down, ['rabbit@node1'], ignore}}
        ]
    }
]

如果一个节点与 rabbit@node1 节点无法通信时,则会关闭自身的 RabbitMQ 应用。如果是rabbit@node1 本身发生了故障造成网络不可用,而其他节点都是正常的情况下,这种规则会让所有的节点中 RabbitMQ 应用都关闭,待rabbit@node1 中的网络恢复之后,各个节点再启动自身应用以从网络分区中恢复。

pause-if-all-down 模式下有ignore 和autoheal 两种不同的配置。考虑前面pause-minority 模式中提及的一种情形,node1、node2 部署在机架A 上,而node3、node4 部署在机架B,此时配置{cluster_partition_handling,{pause_if_all_down,['rabbit@node1' ,'rabbit@node3'], ignore}},那么当机架A 和机架B 通信出现异常时,由于node1、node2 保持着通信,node3、node4 保持着通信,这4 个节点都不会自行关闭,但是会形成两个分区,所以这样不能实现自动处理的功能。所以如果将配置中的ignore 替换成autoheal 就可以处理此种情形。

autoheal 模式

在autoheal 模式下,当认为发生网络分区时,RabbitMQ 会自动决定一个获胜(winning)的分区,然后重启不在这个分区中的节点来从网络分区中恢复。一个获胜的分区是指客户端连接最多的分区,如果产生一个平局,即有两个或者多个分区的客户端连接数一样多,那么节点数最多的一个分区就是获胜分区,如果此时节点数也一样多,将以节点名称的字典序来挑选获胜分区。

autoheal 模式参考配置如下:

[
    {
        rabbit, [
            {cluster_partition_handling, autoheal}
        ]
    }
]

注意:在autoheal 模式下,如果集群中有节点处于非运行状态,那么当发生网络分区的时候,将不会有任何自动处理的动作。


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/899178.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【达梦数据库】两台或多台服务器之间免密登录设置-【dmdba用户】

目录 背景1、服务器A免密登录本机1.1、生成私钥(id_rsa)和公钥(id_rsa.pub)1.2、追加公钥到服务器A的密码登录权限管理文件1.3、结果验证 2、服务器A免密登录服务器B2.1、确认服务器B有目的文件夹2.2、服务器A的公钥复制到服务器B…

网安加·百家讲坛 | 徐一丁:金融机构网络安全合规浅析

作者简介:徐一丁,北京小西牛等保软件有限公司解决方案部总监,网络安全高级顾问。2000年开始从事网络安全工作,主要领域为网络安全法规标准研究、金融行业安全咨询与解决方案设计、信息科技风险管理评估等。对国家网络安全法规标准…

react18中的合成事件与浏览器中的原生事件

React 通过将事件 normalize 以让他们在不同浏览器中拥有一致的属性。 合成事件 SyntheticEvent 实例将被传递给你的事件处理函数,它是浏览器的原生事件的跨浏览器包装器。除兼容所有浏览器外,它还拥有和浏览器原生事件相同的接口,包括 stopP…

项目文章 | 药学TOP期刊PRChIP-seq助力揭示激酶LIMK2促进梗死不良重构的机制

急性心肌梗死(MI)是全球死亡的主要原因,尽管MI的死亡率有所下降,缺血性心力衰竭的发病率却呈上升趋势。这一现象提示我们,尽管在急救和治疗急性心肌梗死方面取得了进展,但心脏在梗死后的长期功能恢复仍然是…

Pr 视频效果:自动重构

视频效果/变换/自动重构 Transform/Auto Reframe 自动重构 Auto Reframe效果是用于快速调整视频素材以适应不同长宽比的一项强大工具。 随着各种平台和设备的多样化,视频内容需要适应不同的屏幕尺寸和比例,如 16:9(横屏)、9:16&am…

「Qt Widget中文示例指南」如何实现半透明背景?

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写,所有平台无差别运行,更提供了几乎所有开发过程中需要用到的工具。如今,Qt已被运用于超过70个行业、数千家企业,支持数百万设备及应用。 本文将为大家展示如…

新鲜出炉,ECCV2024.9.25 首次提出基于 YOLO 目标检测的无源域自适应

原文标题:Source-Free Domain Adaptation for YOLO Object Detection 中文标题:基于 YOLO 目标检测的无源域自适应 论文地址: https://arxiv.org/abs/2409.16538 代码地址: GitHub - vs-cv/sf-yolo 1、Abstract 无源域自适应&…

单细胞 | 转录因子足迹分析

数据加载 在本案例中&#xff0c;将采用之前在轨迹构建案例中已经介绍并处理过的数据集。 library(Signac)library(Seurat)bone <- readRDS("cd34.rds")DimPlot(bone, label TRUE) 要执行足迹分析&#xff0c;必须首先向对象中添加Motif 信息&#xff0c;这包括每…

微软发布 Win11 22H2/23H2 十月可选更新KB5044380!

系统之家于10月23日发出最新报道&#xff0c;微软针对Win11 22H2和23H2用户&#xff0c;发布了10月可选更新KB5044380&#xff0c;用户安装后版本号升至22621.4391和22631.4391。本次更新开始推出屏幕键盘的新游戏板键盘布局&#xff0c;支持用户使用Xbox控制器在屏幕上移动和键…

Burp Suite基本介绍

Burp Suite基本介绍 官网&#xff1a;https://portswiggernet Burp的作用 目标: 用于渗透测试&#xff0c;发现漏洞手段:拦截HTTP数据、对数据进行分析和处理&#xff0c;漏洞扫描场景:测试SQL注入、文件上传、XSS、CSRF、FUZZ、重放攻击、密码暴破、爬取数据、逻辑漏洞... …

Spring Boot论坛网站:安全特性与性能优化

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

word取消自动单词首字母大写

情况说明&#xff1a;在word输入单词后首字母会自动变成大写 &#xff08;1&#xff09;点击菜单栏文件 &#xff08;2&#xff09;点击“更多”——>“选项” &#xff08;3&#xff09;点击“校对”——>“自动更正选项” &#xff08;4&#xff09;取消“句首字母大写…

ubuntu22 安装labelimg制作自己的深度学习目标检测数据集

参考文章&#xff1a;目标检测---利用labelimg制作自己的深度学习目标检测数据集-CSDN博客 以上文章是windows下使用的方法&#xff0c;本章是在ubuntu22下使用的方法 一、准备工作 确保您的Ubuntu系统已安装Python 3.7或更高版本。可以通过在终端输入 python3 --version 来检…

kafka消息队列

kafka消息队列 什么是消息队列消息队列的应用场景异步处理应用耦合限流削峰消息驱动的系统 消息队列的两种模式点对点模式发布/订阅模式 常用的消息队列介绍PulsarPulsar 的特性Pulsar 存储架构Pulsar 消息消费 Kafka与Pulsar对比Pulsar 的主要优势&#xff1a;&#xff08;Pre…

海报在线制作系统小程序源码

海报在线制作系统小程序源码&#xff0c;是一款集功能性、实用性与便捷性于一体的创新工具。该小程序源码专为满足用户快速、高效制作各类海报的需求而设计&#xff0c;无需专业的设计技能或复杂的软件操作&#xff0c;即可轻松上手。 在功能性方面&#xff0c;这款海报小程序…

信息安全工程师(53)网络安全审计机制与实现技术

前言 网络安全审计机制是指为了保护网络安全并发现潜在风险和漏洞而进行的一系列审计活动。审计的目的是检查并评估网络系统的安全性&#xff0c;以确保其符合相关法律法规和安全标准。 一、网络安全审计机制的重要性 网络安全审计机制对于保护组织的信息资产和敏感数据至关重要…

【element-tiptap】如何实现查找替换功能?

这是一个稍微复杂的功能了&#xff0c;因为 element-tiptap 中没有查找替换功能&#xff0c;需要从零开始开发。但是&#xff0c;在万能的github上有一个开源的库&#xff0c;我们可以借用一下 tiptap-search-and-replace 不过这个库是没有UI的&#xff0c;只有一个扩展的方法。…

微信小程序-获取头像和昵称

一.获取头像 1.将button组件open-type的值设置为chooseAvatar 2.通过bindchooseavatar事件回调获取到头像信息的临时路径 wxml文件代码&#xff1a; <view> <button class"btn" open-type"chooseAvatar" bindchooseavatar"chooseavatar&qu…

Video-XL:面向小时级视频理解的超长视觉语言模型

在人工智能领域&#xff0c;视频理解一直是一个挑战性的任务&#xff0c;尤其是对于长时间视频内容的理解。现在&#xff0c;Video-XL的问世标志着我们在这一领域迈出了重要的一步。Video-XL是一个专为小时级视频理解设计的超长视觉语言模型&#xff0c;它能够处理超长视频序列…

Excel:vba实现筛选出有批注的单元格

实现的效果&#xff1a;代码&#xff1a; Sub test() Dim cell As RangeRange("F3:I10000").ClearlastRow Cells(Rows.Count, "f").End(xlUp).Row MsgBox lastrow For Each cell In Range("a1:a21")If Not cell.Comment Is Nothing ThenMsgBox…