当前位置: 首页 > article >正文

rabbitmq单机与集群模式的部署

单机部署

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

修改主机名和host文件

hostnamectl set-hostname mq1

vim /etc/hosts

192.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.config

vim /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 mq1

cat << 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.config

vim /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_status

Cluster 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-mode
 ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
 all:表示在集群中所有的节点上进行镜像
 exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
 nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
 ha-params:ha-mode模式需要用到的参数
 ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
 priority:可选参数,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.kler.cn/a/516572.html

相关文章:

  • 【Linux网络编程】传输层协议
  • 19_PlayerPres持久化_创建角色窗口
  • docker日志保留策略设置
  • C++----STL(list)
  • 深入理解三高架构:高可用性、高性能、高扩展性的最佳实践
  • 考研机试:买房子
  • 刷题笔记 贪心算法-1 贪心算法理论基础
  • 拒绝 Github 投毒,通过 Sharp4SuoBrowser 分析 Visual Studio 隐藏文件
  • 前后分离Vue3+Django 之简单的登入
  • C++函数——fill
  • leetcode刷题记录(八十四)——739. 每日温度
  • 2.2.2 大小写敏感性
  • Facebook广告零支出无消耗:可能原因与解决方法
  • 鞅的定义_
  • Ubuntu二进制部署K8S 1.29.2
  • C语言数组详解:从基础到进阶的全面解析
  • bat批处理删除此电脑左侧及另存为下文档视屏等多余项
  • [java] java基础-字符串篇
  • PyTorch入门 - 为什么选择PyTorch?
  • arcgis for js只显示范围内的天地图,其余部分透明
  • Vue基础(2)
  • 前k个高频元素力扣--347
  • 详解C#中的特性(Attribute)
  • 小游戏源码开发搭建技术栈和服务器配置流程
  • 独立开发者产品日刊:将 Figma 设计转化为全栈应用、对话 PDF生成思维导图、视频转 AI 笔记、AI问答引擎、Mac 应用启动器切换器
  • Python散点统计栅格化