IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> centos8.2 RabbitMQ多节点安装及简单使用 -> 正文阅读

[大数据]centos8.2 RabbitMQ多节点安装及简单使用

前言

因近期安装RabbitMQ时踩到了一些小坑,特意将安装步骤总结下来,希望能帮助到大家避开一些问题。
由于我只有一台服务器,我自己采用的是单机多节点部署,所以单机多节点的问题我会记录下来,多机多节点的仅提供部署方式。

一、安装依赖环境

  1. http://www.rabbitmq.com/which-erlang.html页面查看安装rabbitmq需要安装erlang对应的版本;
  2. https://github.com/rabbitmq/erlang-rpm/releases页面找到需要下载的erlang版本,erlang-*.centos.x86_64.rpm就是centos版本的;
  3. 复制下载地址后,使用wget命令下载:
wget -P /home/download https://github.com/rabbitmq/erlang-rpm/releases/download/v21.2.3/erlang-21.2.3-1.el7.centos.x86_64.rpm
  1. 安装 Erlang
sudo rpm -Uvh /home/download/erlang-21.2.3-1.el7.centos.x86_64.rpm
  1. 若上一步不成功,应该是相应的依赖未下载安装,如我自己的服务器则如下提示依赖缺失此时,我们需要在https://rpmfind.net/linux/rpm2html/search.php?query=&submit=Search%20…&system=&arch=下载上述依赖,将is needed by前面的文本拷入search框中搜索,我本次缺失的依赖下载内容如下依赖文件
  2. 将上述依赖下载上传到服务器后,用以下命令执行安装依赖
rpm -ivh {文件} --force
  1. 安装 socat
sudo yum install -y socat

二、安装RabbitMQ

  1. 官方下载页面找到CentOS7版本的下载链接,下载rpm安装包
wget -P /home/download https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.7.9/rabbitmq-server-3.7.9-1.el7.noarch.rpm
  1. 安装RabbitMQ
sudo rpm -Uvh /home/download/rabbitmq-server-3.7.9-1.el7.noarch.rpm

此时,RabbitMQ就已经安装完成。

三、启动和关闭

  1. 启动服务
sudo systemctl start rabbitmq-server
  1. 查看服务状态
sudo systemctl status rabbitmq-server
  1. 关闭服务
sudo systemctl stop rabbitmq-server
  1. 设置开机启动
sudo systemctl enable rabbitmq-server

四、开启Web管理插件

  1. 开启插件
rabbitmq-plugins enable rabbitmq_management
  1. 由于rabbitmq有一个默认的guest用户,但只能通过localhost访问,我们需要重新创建一个系统管理员
rabbitmqctl add_user admin admin
  1. 为用户分配操作权限
rabbitmqctl set_user_tags admin administrator
  1. 为用户分配资源权限
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

五、防火墙添加端口

RabbitMQ 服务启动后,此时还不能进行外部通信,需要将端口添加防火墙

  1. 添加端口
sudo firewall-cmd --zone=public --add-port=4369/tcp --permanent
sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent
sudo firewall-cmd --zone=public --add-port=25672/tcp --permanent
sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
  1. 重启防火墙
sudo firewall-cmd --reload

六、单机多节点的部署

  1. 在启动前,先修改RabbitMQ 的默认节点名(非必要),在/etc/rabbitmq/rabbitmq-env.conf增加以下内容
NODENAME=rabbit1
  1. RabbitMQ 服务默认启动的,单机多节点时需要改为手动启动,先停止运行中的RabbitMQ 服务
sudo systemctl stop rabbitmq-server
  1. 启动第一个节点
rabbitmq-server -detached
  1. 启动第二个节点
RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_managementlistener [{port,15673}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detached

提示:执行后提示如下:
提示并且我在之前执行该命令时,命令错误导致节点未启动成功也会有如上提示,所以需要注意该提示并不能作为启动成功的标识。

  1. 启动第三个节点
RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_managementlistener [{port,15674}]" RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached
  1. 将rabbit2节点加入到集群
# 停止 rabbit2 的应用
rabbitmqctl -n rabbit2 stop_app
# 重置 rabbit2 的设置
rabbitmqctl -n rabbit2 reset
# rabbit2 节点加入到 rabbit1的集群中
rabbitmqctl -n rabbit2 join_cluster rabbit1 --ram
# 启动 rabbit2 节点
rabbitmqctl -n rabbit2 start_app
  1. 将rabbit3节点加入到集群
# 停止 rabbit3 的应用
rabbitmqctl -n rabbit3 stop_app
# 重置 rabbit3 的设置
rabbitmqctl -n rabbit3 reset
# rabbit3 节点加入到 rabbit1的集群中
rabbitmqctl -n rabbit3 join_cluster rabbit1 --ram
# 启动 rabbit3 节点
rabbitmqctl -n rabbit3 start_app
  1. 此时三个节点已全部启动完毕,执行
rabbitmqctl cluster_status

执行命令后,若看到有{running_nodes,[rabbit3@node1,rabbit2@node1,rabbit1@node1]}说明节点已启动成功。

  1. 但此时我再用admin登录管理后台时发现,登录不成功。经过了几分钟挣扎后,我猜测是在部署集群时admin用户被删除了,于是我执行以下命令查看用户
rabbitmqctl list_users

看到如下结果
查看rabbitmq用户
果然证实了我的猜想,这时我们需要重新添加用户并授权(参考四、开启web管理插件命令),执行完成后就可以正常登陆了。登陆后可以看到,3个节点都添加成功。
多节点管理界面

七、多机多节点部署

1.环境准备

准备三台安装好RabbitMQ 的机器

  • 10.10.10.11
  • 10.10.10.12
  • 10.10.10.13

2.修改配置文件

  1. 修改10.10.1.41机器上的/etc/hosts文件
sudo vim /etc/hosts
  1. 添加IP和节点名
10.10.10.11 node1
10.10.10.12 node2
10.10.10.13 node3
  1. 修改对应主机的hostname
hostname node1
hostname node2
hostname node3
  1. 将10.10.10.11上的hosts文件复制到另外两台机器上
sudo scp /etc/hosts root@node2:/etc/
sudo scp /etc/hosts root@node3:/etc/

说明:命令中的root是目标机器的用户名,命令执行后,可能会提示需要输入密码,输入对应用户的密码就行了

  1. 将10.10.10.11上的/var/lib/rabbitmq/.erlang.cookie文件复制到另外两台机器上
scp /var/lib/rabbitmq/.erlang.cookie root@node2:/var/lib/rabbitmq/
scp /var/lib/rabbitmq/.erlang.cookie root@node3:/var/lib/rabbitmq/

提示:如果是通过克隆的VM,可以省略这一步

3. 防火墙添加端口

给每台机器的防火墙添加端口

  1. 添加端口
sudo firewall-cmd --zone=public --add-port=4369/tcp --permanent
sudo firewall-cmd --zone=public --add-port=5672/tcp --permanent
sudo firewall-cmd --zone=public --add-port=25672/tcp --permanent
sudo firewall-cmd --zone=public --add-port=15672/tcp --permanent
  1. 重启防火墙
sudo firewall-cmd --reload

4.启动RabbitMQ

  1. 启动每台机器的RabbitMQ
sudo systemctl start rabbitmq-server

或者

rabbitmq-server -detached
  1. 将10.10.10.12加入到集群
# 停止RabbitMQ 应用
rabbitmqctl stop_app
# 重置RabbitMQ 设置
rabbitmqctl reset
# 加入到集群
rabbitmqctl join_cluster rabbit@node1 --ram
# 启动RabbitMQ 应用
rabbitmqctl start_app
  1. 查看集群状态,看到running_nodes,[rabbit@node1,rabbit@node2]表示节点启动成功提示:在管理界面可以更直观的看到集群信息
rabbitmqctl cluster_status
  1. 将10.10.10.13加入到集群
rabbitmqctl stop_app
# 重置RabbitMQ 设置
rabbitmqctl reset
# 加入到集群
rabbitmqctl join_cluster rabbit@node1 --ram
# 启动RabbitMQ 应用
rabbitmqctl start_app
  1. 重复第3步,查看集群状态
rabbitmqctl cluster_status

八、镜像队列模式集群(高可用)

  • 镜像队列模式是rabbitmq的高可用方案,详情请参考https://www.rabbitmq.com/ha.html#mirroring-arguments

  • 前面的步骤搭建的集群属于普通模式集群,是通过共享元数据实现集群

  • 开启镜像队列模式需要在管理页面添加策略,添加方式:

  1. 进入管理页面 -> Admin -> Policies(在页面右侧)-> Add / update a policy
  2. 在表单中填入:
name: ha-all   
Pattern: ^  
Apply to: Queues  
Priority: 0
Definition: ha-mode = all

参数说明
name: 策略名称,如果使用已有的名称,保存后将会修改原来的信息
Apply to:策略应用到什么对象上
Pattern:策略应用到对象时,对象名称的匹配规则(正则表达式)
Priority:优先级,数值越大,优先级越高,相同优先级取最后一个
Definition:策略定义的类容,对于镜像队列的配置来说,只需要包含3个部分: ha-mode、ha-params和ha-sync-mode。其中,ha-sync-mode是同步的方式,自动还是手动,默认是自动。ha-mode和ha-params组合使用。组合方式如下:

ha-modeha-params说明
all(empty)队列镜像到集群类所有节点
exactlycount队列镜像到集群内指定数量的节点。如果集群内节点数少于此值,队列将会镜像到所有节点。如果大于此值,而且一个包含镜像的节点停止,则新的镜像不会在其它节点创建。
nodesnodename队列镜像到指定节点,指定的节点不在集群中不会报错。当队列申明时,如果指定的节点不在线,则队列会被创建在客户端所连接的节点上。
  • 镜像队列模式相比较普通模式,镜像模式会占用更多的带宽来进行同步,所以镜像队列的吞吐量会低于普通模式
  • 但普通模式不能实现高可用,某个节点挂了后,这个节点上的消息将无法被消费,需要等待节点启动后才能被消费。
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-08-27 11:55:47  更:2021-08-27 11:58:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:21:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码