CentOS上进行RabbitMQ安装到集群

通过 Bilibili 中的UP主视频学习 : 编程不良人 如果不想看视频,可以直接看本文进行集群,与视频内容有所改变。主要是为了更快速和更方便。


目录

普通(副本)集群

模型

镜像集群

模型

集群实战

Step1 安装JDK 环境

Step 2 安装Erlang 环境

Step 3 安装 RabbitMQ

3.1 安装

3.2 添加新用户

Step 4 克隆虚拟机开始集群

4.1 配置各自主机名

4.2 配置主机映射

4.3 保持 .erlang.cookie 一致

4.4 开始普通集群

Step 5 验证


 

在实际的生产环境中,RabbitMQ一般应用在分布式系统之中,因此要进行集群。

在 RabbitMQ 官网中,讲述了两种集群的方式:一种是普通(副本)集群,一种是镜像集群

我们先看看什么是普通(副本)集群和什么是镜像集群:

 

普通(副本)集群

RabbitMQ 官方解释

What is Replicated?

All data/state required for the operation of a RabbitMQ broker is replicated across all nodes. An exception to this are message queues, which by default reside on one node, though they are visible and reachable from all nodes. To replicate queues across nodes in a cluster, use a queue type that supports replication. This topic is covered in the Quorum Queues and Classic Mirrored Queues guides.

翻译:RabbitMQ代理操作所需的所有数据/状态都在所有节点上复制。这是一个例外是消息队列,默认情况下驻留在一个节点上,尽管它们可以从所有节点可见并可到达。在群集中跨节点跨节点复制队列。

简单地说,就是虽然进行集群了,但是消息队列不能进行复制到从节点,主节点宕机,从节点也访问不到数据了。也就是所谓的大哥凉了,小弟一起遭殃

模型

主/从模式;主/备模式

用户可以订阅主/从节点,但是从集群的目的下,并不建议你直接订阅主节点(那你集群集个寂寞?)。

集群的目的是为了分担主节点的压力,通过从节点去进行消息队列的消费,能有效降低主节点的负荷,提高系统的性能。

 

潜在问题:当主节点宕机后,从节点丢失与主节点的连接,从节点中也不能进行数据的访问,同时所有的消息也丢失了,因为从节点并不能拷贝主节点的队列存储到从节点。

这一点在上面官网的解释中有解释道。只有主节点是和生产者真正进行交互的

因此在实际开发中,使用的一般都是更加高级的集群方式:镜像集群。

但是镜像集群是基于普通集群的,也就是说,要搭建一个镜像集群的环境,必须先搭建好普通集群环境

 

镜像集群

官方解释:

This guide covers mirroring (queue contents replication) of classic queues. Quorum queues is an alternative, more modern queue type that offers high availability via replication and focuses on data safety.

译:本指南涵盖了经典队列的镜像(队列内容复制)。仲裁队列是一种替代,更现代的队列类型,通过复制提供高可用性,并专注于数据安全性。

What is Queue Mirroring

By default, contents of a queue within a RabbitMQ cluster are located on a single node (the node on which the queue was declared). This is in contrast to exchanges and bindings, which can always be considered to be on all nodes. Queues can optionally be made mirrored across multiple nodes.

译:缺省情况下,RabbitMQ集群中的队列的内容位于单个节点上(声明队列的节点)。这与交换和绑定相反,可以始终被认为是所有节点。队列可以可选地在多个节点上镜像。

模型

从大体结构上看,和普通集群几乎是一样的

但是其中有细微的差别>>

>>>>>>从节点能拿到主节点的队列,并且在主节点宕机的时候,从节点依旧运行,能正确的访问到数据,不会造成数据的丢失

这就是镜像队列最直接的 差别/好处

 

集群实战

在VM上,我们先创建一个 CentOS-Server 的虚拟机 命名为 mq1,等会会克隆mq2 and mq3

 

首先安装 java 环境,因为 Erlang 编译需要。

安装 Erlang ,因为RabbitMQ 基于Erlang。像极了套娃<<<

当然,首先请换到 yum的国内源,提高速度。这里不做教程,自行百度一大把,谢谢!

 

Step1 安装JDK 环境

这里我们为了方便,使用 CentOS 自带的yum 进行安装

首先,搜索关于 jdk 相关的内容

[root@mq1 ~]# yum search java|grep jdk

安装指定版本

[root@mq1 ~]# yum install java-1.8.0-openjdk -y

安装完成后,相关内容位于 /usr/lib/jvm/ 下

然后就是配置环境变量了

[root@mq1 ~]# vim /etc/profile

在文件的末尾添加

#  Java
export JAVA_HOME=/usr/java/jdk1.8.0_181
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib

保存退出: Shift+: wq

更新

[root@mq1 ~]# source /etc/profile

 然后就可以在终端使用 `java -version` 验证安装了

Step 2 安装Erlang 环境

很简单

直接使用 yum安装

[root@mq1 ~]# yum install erlang -y

配置环境变量

[root@mq1 ~]# vim /etc/profile

在文件的末尾添加

#Erlang
PATH=$PATH:/usr/local/erlang/bin

保存退出: Shift+: wq

更新

[root@mq1 ~]# source /etc/profile

Step 3 安装 RabbitMQ

3.1 安装

首先要有 wget 工具,没有的话

[root@mq1 ~]# yum install wget -y
[root@mq1 ~]# wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.8/rabbitmq-server-3.6.8-1.el7.noarch.rpm

然后安装公共库密钥

[root@mq1 ~]# rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc

启用 web 端管理插件

    # 启用插件
    rabbitmq-plugins enable rabbitmq_management

启动 rabbitmq

[root@mq1 ~]# systemctl start rabbitmq-server

当然,我们使用的是 CentOS  防火墙还没开启 15672 端口,需要先开启端口[这里先把后面要用的端口一起开启]

firewall-cmd --zone=public --add-port=15672/tcp --permanent
firewall-cmd --permanent --add-port={4369/tcp,25672/tcp}
firewall-cmd --reload

因为 guest 用户无法远程访问,我们需要添加一个新的用户

3.2 添加新用户

// TODO下面代码中 {userName} {password} 为你的用户名、密码,请自行配置

[root@mq1 ~]# rabbitmqctl add_user {userName} {password}

设置tag

[root@mq1 ~]# rabbitmqctl set_user_tags {userName} administrator

配置权限

[root@mq1 ~]# rabbitmqctl set_permissions -p "/" {userName} ".*" ".*" ".*"

 

Step 4 克隆虚拟机开始集群

将这个虚拟机进行克隆:mq2、mq3

开启三个虚拟机

4.1 配置各自主机名

三次循环开始>>

每个虚拟机上 查看ip

[root@mq1 ~]# ip addr

修改主机名

[root@mq1 ~]# vim /etc/hostname

虚拟机 mq1 设置为 mq1,虚拟机 mq2 设置为 mq2。。重复操作

保存退出: Shift+: wq

END<<<

 

4.2 配置主机映射

修改主机映射文件

[root@mq1 ~]# vim /etc/hosts

保存退出: Shift+: wq

将文件同步到其他两台虚拟机:

# 因为当前是 mq1 所以要复制到 mq2、mq3中

[root@mq1 ~]# scp /etc/hosts root@mq2:/etc/
[root@mq1 ~]# scp /etc/hosts root@mq3:/etc/

过程中要进行 yes 和输入 mq2、mq3的密码,因为我们是直接克隆的,所以密码都一样。也就是重复操作两次

 

4.3 保持 .erlang.cookie 一致

因为是直接部署好基本环境后克隆的电脑, 所以 要求的Erlang 的cookie 保持一致就不需要进行配置了

Linux : /var/lib/rabbitmq/.erlang.cookie

Windows: C://用户//当前用户//.erlang.cookie

在 CentOS三个 中

[root@mq1 ~]# cat /var/lib/rabbitmq/.erlang.cookie

可以看到三个文件输出的内容是一样的,也就是达到了 cookie 一致的效果,

如果你不是按着我的步骤进行配置的,那么可以通过 scp 直接覆盖掉其他两个虚拟机的 .erlang.cookie 文件达到这个效果

# 因为当前是 mq1 所以要复制到 mq2、mq3中

[root@mq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@mq2:/var/lib/rabbitmq/
[root@mq1 ~]# scp /var/lib/rabbitmq/.erlang.cookie root@mq3:/var/lib/rabbitmq/

 

 

4.4 开始普通集群

因为集群需要 rabbitmq 以后台的方式运行,我们先关闭 rabbitmq-server【三台虚拟机都需要】

[root@mq1 ~]# systemctl stop rabbitmq-server

后台运行【三台虚拟机都需要】

[root@mq1 ~]# rabbitmq-server -detached

 

【我们这里选择mq1为主节点,2、3为从节点,所以只需要在mq2、mq3上进行下面的操作】

mq2、mq3 都进行的操作>>>

停止从节点

[root@mq1 ~]# rabbimqctl stop_app

加入集群

[root@mq1 ~]# rabbitmqctl join_cluster rabbit@mq1

开启rabbitmq

[root@mq1 ~]# rabbimqctl start_app

end<<<

 

Step 5 验证

打开 Window 界面下的 浏览器,

地址栏输入 {mq1的ip}:15672

登录之后,就可以看到

下面有三个节点了:rabbit@mq1 rabbit@mq2  rabbit@mq3,

普通集群配置完成

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值