侧边栏壁纸
博主头像
丛庆

没事儿写代码,有事写代码。email:1024@cong.zone

  • 累计撰写 116 篇文章
  • 累计创建 97 个标签
  • 累计收到 4 条评论

【RabbitMQ】 RabbitMQ 集群搭建,rabbitmq集群搭建

丛庆
2022-07-11 / 0 评论 / 0 点赞 / 574 阅读 / 1,171 字 / 正在检测是否收录...
温馨提示:
部分资料和图片来源于网络,如有危害到您的利益请与我联系删除,1024@cong.zone。

集群的好处

生产环境中不会应用单机部署的方式,如果 RabbitMQ 服务器遇到内存崩溃、机器掉电或者主板故障等情况,单台 RabbitMQ就会故障导致系统瘫痪。
同时集群还可以增加MQ的吞吐量

搭建集群

准备三台物理机环境,这里我用三台虚拟机的方式去模拟

RabbitMQ的安装与启停

以下操作需要在三台机器分别执行

检查是否由Erlang环境

erl -version

image-1657509748895

卸载低版本Erlang(未安装通常不需要操作)

如果通过yum install erlang安装了Erlang的话,版本可能会太低没办法安装高版本RabbitMQ,需要卸载Erlang后再安装高版本Erlang。

安装Erlang

先切换到root用户,如果已经是root用户无需操作

su - root

Erlang各版本地址
下载rpm包

wget https://github.com/rabbitmq/erlang-rpm/releases/download/v23.3.4/erlang-23.3.4-1.el7.x86_64.rpm

安装

rpm -ivh erlang-23.3.4-1.el7.x86_64.rpm

image-1657520693174

下载并安装RabbitMQ安装包

RabbitMQ与Erlang版本对照
https://www.rabbitmq.com/which-erlang.html

wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.8/rabbitmq-server-3.8.8-1.el7.noarch.rpm

在安装RabbitMQ之前需要先安装socat

yum install socat -y

socat安装完成
image-1657293404004

安装RabbitMQ

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

image-1657520891556

设置开机自启动

chkconfig rabbitmq-server on

image-1657306072338

启动RabbitMQ服务

/sbin/service rabbitmq-server start

image-1657520989568

查看RabbitMQ的状态

/sbin/service rabbitmq-server status

image-1657521010507

停止RabbitMQ

/sbin/service rabbitmq-server stop

image-1657306256197

修改 3 台机器的主机名称hostname

vim /etc/hostname

分别修改为host5 host6 host7

在3台机器的 hosts 文件上追加主机名和ip的映射

vim /etc/hosts
192.168.146.105 host5
192.168.146.106 host6
192.168.146.107 host7

image-1657521123275

这样在任意一台机器上可以通过机器名代替ip去连接两外两台机器了

同步cookie 文件

以确保各个节点的 cookie 文件使用的是同一个值
在 host5 上执行文件同步命令

scp /var/lib/rabbitmq/.erlang.cookie root@192.168.146.106:/var/lib/rabbitmq/.erlang.cookie

image-1657522458991

scp /var/lib/rabbitmq/.erlang.cookie root@192.168.146.107:/var/lib/rabbitmq/.erlang.cookie

image-1657522503767

启动 RabbitMQ 服务

需要在三个节点所在的机器上分别执行以以下服务启动命令

rabbitmq-server -detached

配置附属节点 host6

在host6执行

# rabbitmqctl stop 会将 Erlang 虚拟机关闭,rabbitmqctl stop_app 只关闭 RabbitMQ 服务
rabbitmqctl stop_app

# 重置
rabbitmqctl reset

# 加入集群 host1就是host1所在机器的ip
rabbitmqctl join_cluster rabbit@host5

# 启动rabbitmq服务,无需启动erlang虚拟机
rabbitmqctl start_app

image-1657523060725

配置附属节点host7

这里是将host7加入到了host6,加入host5也是可以的

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@host6
rabbitmqctl start_app

集群状态

rabbitmqctl cluster_status

开启 web 管理插件

三台机器都要开启

rabbitmq-plugins enable rabbitmq_management

设置用户

创建账号

rabbitmqctl add_user admin admin

设置用户角色

rabbitmqctl set_user_tags admin administrator

设置用户权限

rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"

解除集群节点(host6 和 host7 机器分别执行)

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
rabbitmqctl cluster_status
rabbitmqctl forget_cluster_node rabbit@host6(host5 机器上执行)

镜像队列

镜像队列的优点

如果 RabbitMQ 集群中只有一个 Broker 节点,那么该节点的失效将导致整体服务的临时性不可用,并且也可能会导致消息的丢失。可以将所有消息都设置为持久化,并且对应队列的durable属性也设置为true,
但是这样仍然无法避免由于缓存导致的问题:因为消息在发送之后和被写入磁盘井执行刷盘动作之间存在一个短暂却会产生问题的时间窗。通过 publisherconfirm 机制能够确保客户端知道哪些消息己经存入磁盘,
尽管如此,一般不希望遇到因单点故障导致的服务不可用。
引入镜像队列(Mirror Queue)的机制,可以将队列镜像到集群中的其他 Broker 节点之上,如果集群中
的一个节点失效了,队列能自动地切换到镜像中的另一个节点上以保证服务的可用性。

镜像队列配置步骤

任选一个节点的web管理端
image-1657526517816

image-1657526592694

image-1657526629808

image-1657526648873

集群的停止和启动

停止集群节点

rabbitmqctl stop_app

启动集群节点

集群创建后每次重启节点即可加入集群

节点disk和ram切换

更改节点类型

rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app
0

评论区