rabbitmq单机与集群模式的部署

embedded/2025/1/24 21:25:12/
单机部署

安装版本说明:erlang 20.3 – 21.x rabbitmq 3.7.13

修改主机名和host文件

hostnamectl set-hostname mq1vim /etc/hosts192.168.3.71 mq1
192.168.3.72 mq2
192.168.3.73 mq3

由于RabbitMQ是基于Erlang(面向高并发的语言)语言开发,所以在安装RabbitMQ之前,需要先安装Erlang。

安装Erlang

yum -y install socat
rpm -ivh erlang-20.3.8.25-1.el7.x86_64.rpm

使用以下命令检查Erlang版本

erl -version

得到如下输出:

[root@mq1 ~]# erl -version
Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 9.3.3.14

安装RabbitMQ

rpm -ivh rabbitmq-server-3.7.13-1.el7.noarch.rpm

修改配置文件

cp /usr/share/doc/rabbitmq-server-3.7.13/rabbitmq.config.example /etc/rabbitmq/rabbitmq.configvim /etc/rabbitmq/rabbitmq.config   # 把61行注释取消 删除的61行 %% 和结尾的 ,59    %% Uncomment the following line if you want to allow access to the
60    %% guest user from anywhere on the network.
61       {loopback_users, []}

启动rabbitmq

systemctl start rabbitmq-server

启动RabbitMQ Web管理控制台

rabbitmq-plugins enable rabbitmq_management

查看集群状态 如果报错 断开xshell 从新打开一个终端

[root@mq1 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@mq1 ...
[{nodes,[{disc,[rabbit@mq1]}]},{running_nodes,[rabbit@mq1]},{cluster_name,<<"rabbit@mq1">>},{partitions,[]},{alarms,[{rabbit@mq1,[]}]}]

访问web界面 http://192.168.3.71:15672

默认的账号密码为:guest/guest

常用命令:

查看所有的队列

rabbitmqctl list_queues

清除所有的队列

rabbitmqctl reset

添加用户

rabbitmqctl add_user admin StrongPassword

分配角色

rabbitmqctl set_user_tags admin administrator

新增虚拟主机

rabbitmqctl add_vhost vhost_name

将新增虚拟主机授权给新用户 后面三个 * 代表用户拥有 配置 写 读 全部权限

rabbitmqctl set_permissions -p vhost_name admin “.*” “.*” “.*”

查看用户列表

rabbitmqctl list_users
集群部署

修改主机名和host文件

hostnamectl set-hostname mq1cat << EOF >> /etc/hosts
192.168.3.71 mq1
192.168.3.72 mq2
192.168.3.73 mq3
EOF

由于RabbitMQ是基于Erlang(面向高并发的语言)语言开发,所以在安装RabbitMQ之前,需要先安装Erlang。

安装Erlang

yum -y install socat  # 安装erlang依赖
rpm -ivh erlang-20.3.8.25-1.el7.x86_64.rpm

使用以下命令检查Erlang版本

erl -version

得到如下输出:

[root@mq1 ~]# erl -version
Erlang (SMP,ASYNC_THREADS,HIPE) (BEAM) emulator version 9.3.3.14

安装RabbitMQ

rpm -ivh rabbitmq-server-3.7.13-1.el7.noarch.rpm

修改配置文件

cp /usr/share/doc/rabbitmq-server-3.7.13/rabbitmq.config.example /etc/rabbitmq/rabbitmq.configvim /etc/rabbitmq/rabbitmq.config   # 把61行注释取消 删除的61行 %% 和结尾的 ,59    %% Uncomment the following line if you want to allow access to the
60    %% guest user from anywhere on the network.
61       {loopback_users, []}

启动RabbitMQ Web管理控制台

rabbitmq-plugins enable rabbitmq_management

RabbitMQ底层是通过Erlang架构来实现的,所以rabbitmqctl会启动Erlang节点,并基于Erlang节点来使用Erlang系统连接RabbitMQ节点,在连接过程中需要正确的Erlang Cookie和节点名称,Erlang节点通过交换Erlang Cookiel以获得认证来实现分布式,所以部署Rabbitmq分布式集群时要先安装Erlang,并把其中一个服务的cookie
复制到另外的节点。

mq1启动服务

systemctl start rabbitmq-server.service

mq1发送erlang.cookie到其他节点配置集群

scp /var/lib/rabbitmq/.erlang.cookie mq2:/var/lib/rabbitmq/.erlang.cookie
scp /var/lib/rabbitmq/.erlang.cookie mq3:/var/lib/rabbitmq/.erlang.cookie

mq2和mq3重启服务,停止应用,并以ram的方式加入mq1节点,之后启动应用

systemctl start rabbitmq-server.service
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@mq1
rabbitmqctl start_app

检查集群的状态

[root@mq1 ~]# rabbitmqctl cluster_statusCluster status of node rabbit@mq1 ...
[{nodes,[{disc,[rabbit@mq1]},{ram,[rabbit@mq3,rabbit@mq2]}]},{running_nodes,[rabbit@mq3,rabbit@mq2,rabbit@mq1]},{cluster_name,<<"rabbit@mq1">>},{partitions,[]},{alarms,[{rabbit@mq3,[]},{rabbit@mq2,[]},{rabbit@mq1,[]}]}]

每个节点添加管理员

rabbitmqctl add_user admin admin
rabbitmqctl set_user_tags admin administrator
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

访问每个节点查看集群状态

请添加图片描述

RabbitMQ集群中,各个RabbitMQ为对等节点,即每个节点均提供给客户端连接,进行消息的接收和发送。节点分为内存节点和磁盘节点,一般都建立为磁盘节点,为了防止机器重启后的消息消失;

更改节点类型(内存型或磁盘型)

rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc 或 rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app

从集群移除节点(或者重置节点)

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status

从某个节点移除集群中其他节点

rabbitmqctl forget_cluster_node rabbit@node3
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status

普通模式:

默认的集群模式,以两个节点(rabbit1、rabbit2)为例说明。消息实体只存在其中一个节点 rabbit1 或者 rabbit2,rabbit1 和 rabbit2 两个节点仅有相同的元数据,就是队列的结构。当消息进入 rabbit1 节点的队列(Queue)后,当消费者从 rabbit2 节点消费时,集群会临时在 rabbit1 和 rabbit2 节点间传递消息,把 rabbit1 节点下队列的消息实体取出,然后通过 rabbit2 发送给消费者。所以消费者需要尽量连接每一个节点,同时,需要将同一个逻辑队列,在多个节点都建立。不然消费者连 rabbit1 或 rabbit2 节点,出口却只有 rabbit1,而且当 rabbit1 节点故障后,rabbit2 节点无法取到 rabbit1 节点中还未消费的消息。如果做了消息持久化,还可以等 rabbit1 节点恢复后继续消费;如果没有持久化就会消息丢失消息。

镜像模式:

将队列变为镜像队列,存在于多个节点。消息实体会主动在节点之间同步,不会像普通模式,在消费者消费数据时才临时读取。缺点 —— 集群内部的同步会占用大量带宽。

设置的镜像队列可以通过开启的网页的管理端Admin->Policies,也可以通过命令

rabbitmqctl set_policy ha-all '^' '{"ha-mode":"all"}'说明:策略正则表达式为'^'表示所有匹配所有队列名称 ^hello:匹配hello开头队列
rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern>  <definition>-p Vhost: 可选参数,针对指定vhost下的queue进行设置Name:     policy的名称Pattern: queue的匹配模式(正则表达式)Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-modeha-mode:指明镜像队列的模式,有效值为 all/exactly/nodesall:表示在集群中所有的节点上进行镜像exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定ha-params:ha-mode模式需要用到的参数ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manualpriority:可选参数,policy的优先级
1.添加策略
rabbitmqctl set_policy ha-all '^' '{"ha-mode":"all"}'
2.查看当前策略
[root@mq1 ~]# rabbitmqctl list_policies
Listing policies for vhost "/" ...
vhost	name	pattern	apply-to	definition	priority
/	ha-all	^	all	{"ha-mode":"all"}	0
3.删除策略
rabbitmqctl clear_policy ha-all

http://www.ppmy.cn/embedded/156666.html

相关文章

不用安装双系统,如何在mac上玩windows游戏呢?

Mac软件推荐 随着技术的进步&#xff0c;越来越多的游戏公司开始发布 Mac 平台的游戏。虽然目前 Windows 系统仍然占据着主导地位&#xff0c;但 Mac 用户同样可以享受丰富的游戏体验。并且借助某些工具&#xff0c;可以实现 Mac 电脑玩 Windows 游戏的需求。 一、Mac 能玩哪些…

leetcode刷题记录(七十二)——146. LRU 缓存

&#xff08;一&#xff09;问题描述 146. LRU 缓存 - 力扣&#xff08;LeetCode&#xff09;146. LRU 缓存 - 请你设计并实现一个满足 LRU (最近最少使用) 缓存 [https://baike.baidu.com/item/LRU] 约束的数据结构。实现 LRUCache 类&#xff1a; * LRUCache(int capacity)…

C语言二级

//请编写函数fun()&#xff0c;该函数的功能是&#xff1a;计算并输出给定整数n的所有因 //子&#xff08;不包括1和自身&#xff09;之和。规定n的值不大于1000。例如&#xff0c;在主函数 //中从键盘给n输入的值为856&#xff0c;则输出为&#xff1a;sum 763。 //注意&…

Spring 是如何解决循环依赖问题

Spring 框架通过 三级缓存 机制来解决循环依赖问题。循环依赖是指两个或多个 Bean 相互依赖&#xff0c;形成一个闭环&#xff0c;例如 Bean A 依赖 Bean B&#xff0c;而 Bean B 又依赖 Bean A。Spring 通过提前暴露未完全初始化的 Bean 来解决这个问题。 以下是 Spring 解决…

【理论】测试开发工程师进阶路线

一、腾讯与阿里的质量保证服务参考 阿里云效测试能力与架构 腾讯 WeTest 测试能力全景图 二、测试开发技术体系 1.用户端测试&#xff1a; Web/App 测试 Web/App 自动化测试 用户端专项测试 用户端安全测试 2.服务端测试&#xff1a; 接口协议与 Mock 接口自动化测试 服务端…

【超详细】C#事件

目录 事件 1.定义 2.特点 观察者模式 定义 重要概念 3.使用步骤(重点) 4.使用场景 5.优势 6.限制 7.举例 7.1.猫叫&#xff0c;鼠跑人醒。 7.2.老鹰冲下来&#xff0c;小鸡逃跑&#xff0c;狗叫。 事件是一种特殊的委托&#xff0c;那什么是委托呢&#xff1f;简而…

Javascript react indexeddb 使用 React 上下文 (Context) 管理 IndexedDB 页面缓存(一)

使用 React 上下文 (Context) 管理 IndexedDB 缓存的详细步骤。这些步骤将帮助你更好地理解如何使用上下文来跨多个组件管理和访问缓存。 步骤 1:安装依赖(如果使用 Dexie.js) 首先,我们需要安装 Dexie.js(一个简化操作 IndexedDB 的库),你可以根据自己的需求选择使用原…

WPA_cli P2P命令详解及使用

目录 通用命令 status scan scan_results add_network set_network enable_network reconfigure save_config quit P2P 相关命令 p2p_find p2p_peers p2p_connect [method] p2p_group_add [ssid=] [freq=] [ht40] [persistent] p2p_remove_client p2p_di…