中间件之RabbitMQ的单机以及集群部署

RabbitMQ是咩???

RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue 高级消息队列协议 )的开源实现,
能够实现异步消息处理

言简意赅的讲:RabbitMQ是一个消息代理:它接受和转发消息

rabbitmq 优势:
基于 erlang 语言开发, 具有高并发优点、 支持分布式
具有消息确认机制、 消息持久化机制, 消息可靠性和集群可靠性高
简单易用、 运行稳定、 跨平台、 多语言
开源

Queue 的特性:
消息基于先进先出的原则进行顺序消费
消息可以持久化到磁盘节点服务器
消息可以缓存到内存节点服务器提高性能

一.RabbitMQ 单机部署

在这里插入图片描述

官方版本 https://www.rabbitmq.com/
https://www.rabbitmq.com/download.html #官网下载地址
https://github.com/rabbitmq/rabbitmq-server/releases #github 下载地址
服务器环境:
Ubuntu 1804 安装单机版 RabbitMQ:
https://www.rabbitmq.com/install-debian.html#apt

第一种方式:apt直接安装 (版本不可选,默认安装)

1.查看当前系统内软件的版本

apt-cache madison rabbitmq-server

2.配置主机名解析

[root@mq-sever1 ~]#cat /etc/hosts
10.0.0.101 mq-sever1 mq

3.执行安装

apt -y install  rabbitmq-server

4.RabbitMQ 插件管理
端口使用说明

5672 #客户端使用,类似于mysql 3306
15672 #web界面,可以显示rabbitmq的运行状态
25672 #集群通信使用
查看有哪些插件
rabbitmq-plugins list
开启web界面管理插件
rabbitmq-plugins enable rabbitmq_management

在这里插入图片描述
(3.8.4版本之前账号密码默认是guest登录的)

第二种方式:(可以选择版本)
https://www.rabbitmq.com/download.html
1.安装依赖

apt-get install curl gnupg debian-keyring debian-archive-keyring apt-transport-https -y

2.导入签名的key

apt-key adv --keyserver "hkps://keys.openpgp.org" --recv-keys "0x0A9AF2115F4687BD29803A206B73A36E6026DFCA"

3.添加一个erlang仓库

curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/gpg.E495BB49CC4BBE5B.key | sudo apt-key add -

Cloudsmith:RabbitMQ 存储库

curl -1sLf https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/gpg.9F4587F226208342.key | sudo apt-key add -

4.添加apt源
直接在命令行添加 回车即可

sudo tee /etc/apt/sources.list.d/rabbitmq.list <<EOF
## Provides modern Erlang/OTP releases
##
deb https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic main
deb-src https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-erlang/deb/ubuntu bionic main

## Provides RabbitMQ
##
deb https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic main
deb-src https://dl.cloudsmith.io/public/rabbitmq/rabbitmq-server/deb/ubuntu bionic main
EOF

查看
在这里插入图片描述
5.执行更新;

apt update

6.执行安装

apt-cache madison rabbitmq-server查看

在这里插入图片描述
7.开启web界面管理插件

rabbitmq-plugins enable rabbitmq_management

8.设置登录账户

设置账号密码 rabbitmqctl add_user smart 12345678
给账户设置权限 rabbitmqctl set_user_tags smart administrator

登录web界面
在这里插入图片描述
查看基本信息
在这里插入图片描述
Admin-Add a user 可以创建账号
在这里插入图片描述
点击用户名可以做修改权限;
第一种方法
点击创建的用户名smart
在这里插入图片描述
点击set permission
在这里插入图片描述
第二种方法

执行rabbitmqctl set_permissions smart ".*" ".*" ".*"

验证结果;
在这里插入图片描述
创建用户名密码以及授权总结三个命令:

rabbitmqctl add_user  smart 12345678
rabbitmqctl set_user_tags smart administrator
rabbitmqctl set_permissions smart ".*" ".*" ".*"

二.rabbitmq的集群部署

普通模式:
创建好 RabbitMQ 集群之后的默认模式。(只同步源数据)
queue创建后,消息只存在一个节点,其他节点仅有相同的元数据,即队列结构,队列数据保存一部分,该模式存在一个问题就是当 A 节点故障后,B 节点无法取到 A 节点中还未消费的消息实体

镜像模式:
把需要的队列做成镜像队列。(数据会同步)
把需要的队列做成镜像队列, 存在于多个节点, 属于 RabbitMQ 的 HA 方案(镜像模式是在普通模式的基础上, 增加一些镜像策略)该模式解决了普通模式中的数据丢失问题,
消息实体会主动在镜像节点间同步, 而不是在 consumer 取数据时临时拉取
缺点是:降低系统性能,要先设置policy

集群中有两种节点类型:

内存节点: 只将数据保存到内存;

磁盘节点: 保存数据到内存和磁盘。

内存节点虽然不写入磁盘, 但是它执行比磁盘节点要好, 集群中, 只需要一个磁
盘节点来保存数据就足够了如果集群中只有内存节点, 那么不能全部停止它们,
否则所有数据消息在服务器全部停机之后都会丢失。

推荐设计架构:
在一个 rabbitmq 集群里, 有 3 台或以上机器, 其中 1 台使用磁盘模式, 其它节
点使用内存模式, 内存节点无访问速度更快, 由于磁盘 IO 相对较慢, 因此可作
为数据备份使用。
环境准备:

3台安装rabbitmq的机器;安装步骤参考上面单机部署过程;
mq1: 10.0.0.101
mq2: 10.0.0.102
mq3:10.0.0.103

1.主机名解析配置
vim /etc/hosts
10.0.0.101 mq-server1  mq1
10.0.0.102 mq-server2  mq2
10.0.0.103 mq-server3  mq3
改完后重启;systemctl restart rabbitmq-server.service

先知:

Rabbitmq 的集群是依赖于 erlang 的集群来工作的, 所以必须先构建起 erlang 的集群环境,而 Erlang 的集群中各节点是通过一个 magic cookie 来实现的, 这个cookie 存放在 /var/lib/rabbitmq/.erlang.cookie 中, 文件是 400 的权限,所以必须保证各节点 cookie 保持一致, 否则节点之间就无法通信

集群原理示意图:
在这里插入图片描述

1.三台cookie不一样 为了要保证cookie保持一致,将其中一台的cookie 同步到另外两台

[root@mq-server1 ~]#cat /var/lib/rabbitmq/.erlang.cookie
CHMPABUQTTUBQKOOREBF
scp  /var/lib/rabbitmq/.erlang.cookie 10.0.0.102:/var/lib/rabbitmq/.erlang.cookie
scp  /var/lib/rabbitmq/.erlang.cookie 10.0.0.103:/var/lib/rabbitmq/.erlang.cookie
#拷贝完成后每台服务器重启服务
systemctl restart rabbitmq-server.service 

2.查看当前集群状态

rabbitmqctl cluster_status

以mq3为目标,将两个两个服务器添加

3.创建 RabbitMQ 集群:

mq1和mq2上操作
rabbitmqctl stop_app #停止mq1和mq2的写入服务
rabbitmqctl reset #清空元数据
#将rabbitmq-server1 添加到集群当中,并成为内存节点,不加--ram 默认是磁盘节点
rabbitmqctl join_cluster rabbit@mq-server3 --ram
#添加完成后开启app
rabbitmqctl start_app

在这里插入图片描述
在任何一台主机查看 结果一样rabbitmqctl cluster_status
在这里插入图片描述
4.将集群设置为镜像模式 :只要在其中一台节点执行以下命令即可:

rabbitmqctl set_policy ha-all "#" '{"ha-mode":"all"}'

5.验证当前集群状态

rabbitmqctl cluster_status

6.页面验证;
由于刚刚执行了rabbitmqctl reset #清空元数据 操作,没有账户密码了。重新设置

rabbitmqctl add_user  smart 12345678
rabbitmqctl set_user_tags smart administrator
rabbitmqctl set_permissions smart ".*" ".*" ".*"

在这里插入图片描述
7.web 界面验证集群状态出错情况:
在这里插入图片描述
不启用 web 插件的 rabbitmq 服务器, 会在 web 节点提示节点统计信息不可用

rabbitmq-plugins enable rabbitmq_management  #执行后即可解决

设置完成,谢谢观赏
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Lcongming/article/details/119720470