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 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> RabbitMQ集群的构建 -> 正文阅读

[大数据]RabbitMQ集群的构建

集群的设计

设计目标:

  • 允许消费者和生产者在节点崩溃的情况下继续运行;

  • 通过添加节点线性扩展消息通信的吞吐量。

可以保证消息的万无一失吗?
不行,当一个节点崩溃时,该节点上队列的消息也会消失,rabbitmq默认不会将队列的消息复制到整个集群上。

队列

集群中队列信息只在队列的所有者节点保存队列的所有信息,其他节点只知道队列的元数据和指向所有者节点的指针,节点崩溃时,该节点的队列
和其上的绑定信息都消失了。

为什么集群不复制队列内容和状态到所有节点?主要考虑存储空间和性能,如果消息需要复制到集群中每个节点,网络开销不可避免,持久化消息还
需要写磁盘。
所以其他节点接收到不属于该节点的队列的消息时会将该消息传递给该队列的所有者节点上。

交换器

本质上是个这个交换器的名称和队列的绑定列表,可以看成一个类似于 hashmap 的映射表,交换器会在整个集群上复制。

元数据

元数据主要包括:

  • 队列元数据:队列名称和属性(是否可持久化,是否自动删除)

  • 交换器元数据:交换器名称、类型和属性

  • 绑定元数据:交换器和队列的绑定列表

  • vhost元数据:vhost 内的相关属性,如安全属性等等

元数据也会在整个集群进行复制。

节点

根据节点将队列、交换器、用户等信息保存的位置可以将节点分为以下两种类型:

  • 内存节点

  • 磁盘节点

RabbitMQ只要求集群中至少有一个磁盘节点,从高可用的角度讲每个集群应该至少配备两个磁盘节点。因为只有一个磁盘节点的情况下,当这个磁
盘节点崩溃时,集群可以保持运行,但任何修改操作,比如创建队列、交换器、添加和删除集群节点都无法进行。

如果集群中全部是磁盘节点,当声明队列、交换器等等时,RabbitMQ必须将数据保存在所有节点后才能表示操作完成。

集群

的构建

RabbitMQ集群对延迟非常敏感,只能在本地局域网内使用。

主机规划:

主机名IP地址节点类型
node05192.168.80.205磁盘节点
node06192.168.80.206磁盘节点
node07192.168.80.207内存节点
  1. 在node05、node06、node07三台主机的/etc/hosts分别添加如下内容:
192.168.80.205 node05
192.168.80.206 node06
192.168.80.207 node07
  1. Erlang Cookie文件:/var/lib/rabbitmq/.erlang.cookie。将node05的该文件复制到node06、node07,由于这个文件权限是400,所以需要先修改 node06、
    node07中的该文件权限为777,然后将node05中的该文件拷贝到node06、node07,最后将权限和所属用户组修改回来。

  2. 运行各节点
    ,systemctl restart rabbitmq-server

  3. 在node06运行:

# rabbitmqctl stop_app
# rabbitmqctl reset
# rabbitmqctl join_cluster rabbit@node05
# rabbitmqctl start_app
  1. node07上运行
# rabbitmqctl stop_app
# rabbitmqctl reset
# rabbitmqctl join_cluster rabbit@node05
  --ram
# rabbitmqctl start_app
  1. 查看集群的状态
# rabbitmqctl cluster_status

如果要将集群中的节点移除,可以使用下面的命令:

# rabbitmqctl stop_app
# rabbitmqctl reset
# rabbitmqctl start_app

严格来说,rabbitmqctl reset
不属于集群命令,reset的作用是将node节点恢复为空白状态,包括但不限于,比如,用户信息,虚拟主机信息,所有
持久化的消息。在集群下,通过这个命令,可以让节点离开集群。

元数据的变更这些消息都要记录在磁盘节点上。当有节点离开集群时,所有的磁盘节点上都要记录这个信息。如果磁盘节点在离开集
群时不用reset命令,会导致集群认为该节点发生了故障,并会一直等待该节点恢复才允许新节点加入,所以,当磁盘节点是被暴力从集群中脱离时,有
可能导致集群永久性的无法变更(不单单是加入新节点,包括申明队列,交换器等操作)。

RabbitMQ常用命令

管理虚拟主机

  • rabbitmqctl add_vhost [vhost_name]

  • rabbitmqctl delete_vhost [vhost_name]

  • rabbitmqctl list_vhosts

用户管理

  • rabbitmqctl add_user [username] [pwd]

  • rabbitmqctl delete_user [username]

  • rabbitmqctl change_password [username] [newpwd]

  • rabbitmqctl list_users

用户权限

  • rabbitmqctl set_permissions [-p ]

可以针对virtual host中所有资源的配置、写、读权限进行配置权限。

注意在win上,字符全部使用双引号,linux上使用单引号

windows上 : rabbitmqctl set_permissions -p / xxx"." "." “.*”

linux上 :rabbitmqctl set_permissions -p / xxx ‘.’ '.’ ‘.*’

其中.*是正则表达式,表示全部

  • rabbitmqctl set_user_tags User Tag

User为用户名, Tag为角色名(对应于下面的administrator,monitoring,policymaker,management,none)

例子:赋予xxx为administrator角色

rabbitmqctl set_user_tags xxx administrator

查看队列

  • rabbitmqctl list_queues

查看交换器

  • rabbitmqctl list_exchanges

查看绑定

  • rabbitmqctl list_bindings
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-07-11 16:42:24  更:2021-07-11 16:43:58 
 
开发: 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年5日历 -2024/5/1 17:32:55-

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