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

news2024/11/29 2:41:33

一、准备主机 

准备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 模式下,如果集群中有节点处于非运行状态,那么当发生网络分区的时候,将不会有任何自动处理的动作。


 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab学习01-矩阵

目录 一,矩阵的创建 1,直接输入法创建矩阵 2,利用M文件创建矩阵 3,利用其它文本编辑器创建矩阵 二,矩阵的拼接 1,基本拼接 1) 水平方向的拼接 2)垂直方向的拼接 3&#xf…

Linux系统基础-进程间通信(5)_模拟实现命名管道和共享内存

个人主页:C忠实粉丝 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 C忠实粉丝 原创 Linux系统基础-进程间通信(5)_模拟实现命名管道和共享内存 收录于专栏[Linux学习] 本专栏旨在分享学习Linux的一点学习笔记,欢迎大家在评论区交流讨…

LeetCode--删除并获得点数--动态规划

一、题目解析 二、算法原理 根据题意,在选择了元素 x 后,该元素以及所有等于 x−1 或 x1 的元素会从数组中删去。若还有多个值为 x 的元素,由于所有等于 x−1 或 x1 的元素已经被删除,我们可以直接删除 x 并获得其点数。因此若选…

Win10+MinGW13.1.0编译Qt5.15.15

安装windows SDK、python、ruby、cmake、Perl[可选]安装MySQL解压qt-everywhere-opensource-src-5.15.15.zip(注:不要使用qt-everywhere-opensource-src-5.15.15.tar.xz)修改源代码 E:\qt-everywhere-src-5.15.15\qtbase\src\3rdparty\angle\…

hive数据库,表操作

1.创建; create database if not exists myhive; use myhive; 2.查看: 查看数据库详细信息:desc database myhive; 默认数据库的存放路径是 HDFS 的: /user/hive/warehouse 内 补充:创建数据库并指定 hdfs 存储位置:create database myhive2 location /myhive2 3.…

<项目代码>YOLOv8路面垃圾识别<目标检测>

YOLOv8是一种单阶段(one-stage)检测算法,它将目标检测问题转化为一个回归问题,能够在一次前向传播过程中同时完成目标的分类和定位任务。相较于两阶段检测算法(如Faster R-CNN),YOLOv8具有更高的…

Codeforces Round 881 (Div. 3)(A~F1题解)

这场比赛可能是因为比较老吧,我感觉很轻松,就是第五个卡了一下,看错题了,原本应该是严格大于的,从而导致代码一直出现bug,在1小时20分钟才解决 A. Sasha and Array Coloring 题意:就是说给你n个…

提权 | Windows系统

文章目录 cmd提权meterpreter提权getsystemsteal_tokenmigrate 令牌窃取(MS16-075)烂土豆提权步骤烂土豆提权原理 sc命令提权抓本地密码提权其他工具pr工具 内核提权WindowsVulScan cmd提权 前言:我们getshell一个用windows部署的网站后,通过蚁剑或者其…

ESP32 S3 语音识别 语音唤醒程序流程

ESP32 S3 语音识别 语音唤醒程序流程 参考例程首先进行esp_periph_set_init 初始化之后执行setup_player,之后执行start_recorder,识别的主处理voice_read_task 参考例程 D:\Espressif\esp-adf\examples\speech_recognition\wwe\ 首先进行esp_periph_se…

零知识学习WLAN漫游二、无线漫游介绍(2)

接前一篇文章:零知识学习WLAN漫游一、无线漫游介绍(1) 本文内容参考: WLAN漫游简介_漫游主动性-CSDN博客 无线漫游_百度百科 无线漫游简述-CSDN博客 特此致谢! 一、WLAN漫游简介 3. 漫游协议和快速漫游协议 802.…

算法的学习笔记—数字在排序数组中出现的次数(牛客JZ53)

😀前言 在编程中,查找有序数组中特定元素的出现次数是一个常见的问题。本文将详细讲解这个问题的解决方案,并通过二分查找法优化效率。 🏠个人主页:尘觉主页 文章目录 🥰数字在排序数组中出现的次数&#x…

九、pico+Unity交互开发——触碰抓取

一、VR交互的类型 Hover(悬停) 定义:发起交互的对象停留在可交互对象的交互区域。例如,当手触摸到物品表面(可交互区域)时,视为触发了Hover。 Grab(抓取) 概念&#xff…

深入浅出:深度学习模型部署全流程详解

博主简介:努力学习的22级计算机科学与技术本科生一枚🌸博主主页: Yaoyao2024往期回顾: 【论文精读】PSAD:小样本部件分割揭示工业异常检测的合成逻辑每日一言🌼: 生活要有所期待, 否则就如同罩在…

【国潮来袭】华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布:鸿蒙诞生以来最大升级,碰一碰、小艺圈选重磅上线

在昨日晚间的原生鸿蒙之夜暨华为全场景新品发布会上,华为原生鸿蒙 HarmonyOS NEXT(5.0)正式发布。 华为官方透露,截至目前,鸿蒙操作系统在中国市场份额占据 Top2 的领先地位,拥有超过 1.1 亿 的代码行和 6…

想让前后端交互更轻松?alovajs了解一下?

作为一个前端开发者,我最近发现了一个超赞的请求库 alovajs,它真的让我眼前一亮!说实话,我感觉自己找到了前端开发的新大陆。大家知道,在前端开发中,处理 Client-Server 交互一直是个老大难的问题&#xff…

查缺补漏----用户工作区,系统缓冲区,外设工作最短时间计算

对于下面这一题,分析起来很简单: 答案:C 以上是单缓冲区,补充双缓冲区是什么情况: 1.假设磁盘块与缓冲区大小相同,每个盘块读入缓冲区的时间为15us,由缓冲区送至用户区的时间是5us&#xff0c…

etl-查询错误log日志和oracle删除数据表空间

查看weblogic日志的目录 建立连接ssh root192.168.30.1xx 密码hygd123 找到下面路径中的文件 cd /home/weblogic/Oracle/Middleware/user_projects/domains/base_domain/bapp-logs 查看log日志 tail -f -n 400 Adminservers.log oracle删除表空间(切换到dba用户…

Android 13 SystemUI 隐藏下拉快捷面板部分模块(wifi,bt,nfc等)入口

frameworks/base/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSFactoryImpl.java createTileInternal(tileSpec)方法注释想隐藏的模块即可。

Qt开发-----线程调度

目录 前言 一、Linux下查看进程的情况 二、线程的创建 三、多线程的创建和使用 前言 以下引用内容源自正点原子Qt开发指南文档。 我们写的一个应用程序,应用程序跑起来后一般情况下只有一个线程,但是可能也有特殊情况。比如我们前面章节写的例程都跑…

《YOLO目标检测》—— YOLOv1 详细介绍

文章目录 一、算法特点二、网络结构三、检测过程四、损失函数五、性能表现六、优缺点 YOLO v1(You Only Look Once version 1)是一种快速的目标检测算法,以下是对YOLO v1的详细介绍: 一、算法特点 端到端的网络结构:Y…