RabbitMQ Clustering Guide

news/2024/7/9 20:25:08 标签: RabbitMQ, Cluster, 集群

http://previous.rabbitmq.com/v3_6_x/clustering.html

RabbitMQ Broker是一个或多个Erlang节点的逻辑分组,每个节点运行RabbitMQ应用程序,并共享users, virtual hosts, queues, exchanges, bindings, and runtime parameters.有时我们将节点集合称为集群

RabbitMQ Broker操作所需的所有数据/状态将在所有节点之间复制。message queues是一个例外,默认情况下它驻留在一个节点上,但是它们是可见的,并且可以从所有节点访问。

RabbitMQ节点使用短域名或全限定域名(FQDNs)相互寻址。因此,所有集群成员的主机名必须能够从所有集群节点以及可能使用rabbitmqctl等命令行工具的机器上解析。

主机名解析可以使用任何标准os提供的方法:

  • DNS records
  • Local host files (e.g. /etc/hosts)

在限制更严格的环境中,DNS记录或主机文件修改是受限制的、不可能的或不需要的,Erlang VM可以配置为使用其他主机名解析方法,如备用DNS服务器、本地文件、非标准主机文件位置或方法的组合。这些方法可以与标准OS主机名解析方法协同工作。 

集群可以通过以下几种方式创建:

  • Manually with rabbitmqctl (e.g. in development environments)
  • Declaratively by listing cluster nodes in config file
  • Declaratively with rabbitmq-autocluster (a plugin)

集群的组成可以动态更改。所有RabbitMQ代理最初都在单个节点上运行。这些节点可以连接到集群中,然后再次转换回单个代理。

RabbitMQ代理允许单个节点的失败。节点可以随意启动和停止,只要它们能够在关机时联系到已知的集群成员节点。

RabbitMQ集群有几种处理网络分区的模式,主要是面向一致性的。集群是用来跨LAN使用的。不建议运行跨WAN的集群。The Shovel or Federation plugins是跨WAN连接代理的更好解决方案。注意,The Shovel or Federation plugins并不等同于集群 

当从一个主要或次要版本的RabbitMQ升级到另一个版本或升级Erlang时,必须关闭整个集群进行升级(因为集群不能像这样运行混合版本)。

RabbitMQ节点使用主机名彼此通信。因此,所有节点名必须能够解析所有集群节点的名称。对于rabbitmqctl等工具也是如此。

除此之外,默认情况下,RabbitMQ使用系统的当前主机名来命名数据库目录。如果主机名更改,将创建一个新的空数据库。为了避免数据丢失,必须设置一个固定的和可解析的主机名。当主机名改变时,您应该重启RabbitMQ:

$ /etc/init.d/rabbitmq-server restart

当节点位于数据中心或可靠网络上,但被防火墙分隔时,就会出现防火墙集群节点。同样,不建议通过WAN或节点之间的网络链接不可靠时进行集群。在最常见的配置中,您将需要打开一些标准端口:

  • 4369: epmd, a peer discovery service used by RabbitMQ nodes and CLI tools
  • 5672, 5671: used by AMQP 0-9-1 and 1.0 clients without and with TLS
  • 25672: used by Erlang distribution for inter-node and CLI tools communication and is allocated from a dynamic range (limited to a single port by default, computed as AMQP port + 20000). See networking guide for details.
  • 15672: HTTP API clients and rabbitmqadmin (only if the management plugin is enabled)
  • 61613, 61614: STOMP clients without and with TLS (only if the STOMP plugin is enabled)
  • 1883, 8883: (MQTT clients without and with TLS, if the MQTT plugin is enabled
  • 15674: STOMP-over-WebSockets clients (only if the Web STOMP plugin is enabled)
  • 15675: MQTT-over-WebSockets clients (only if the Web MQTT plugin is enabled)

集群中的所有节点必须运行相同的Erlang小版本:19.3.4和19.3.6可以混合使用,但19.0.1和19.3.6(或17.5和19.3.6)不能混合使用。不同版本之间的Erlang/OTP补丁版本之间的兼容性可能有所不同,但这种情况通常很少见。

Client可以正常连接到集群中的任何节点。如果某个节点失败,而集群的其余部分节点正常,那么Client应该注意到关闭的连接,并且应该能够重新连接到集群中其他正常的节点。通常,不建议将节点主机名或IP地址放入client端应用程序中:这带来了不灵活性,如果集群的配置或节点数量发生变化,将需要编辑、重新编译和重新部署client端应用程序。我们推荐一种更抽象的方法:这可以是一个动态DNS服务,它具有非常短的TTL配置,或者一个普通的TCP负载均衡器,或者使用pacemaker或类似技术实现的某种移动IP。一般来说,管理到集群中节点的连接的这方面超出了RabbitMQ本身的范围,我们建议使用专门为解决这些问题而设计的其他技术。


http://www.niftyadmin.cn/n/1519265.html

相关文章

shell脚本初解

一、shell介绍: shell是一个用C语言编写的程序,它被称为用户使用linux的桥梁。 Shell既是一种命令语言,又是一种程序设计语言。 Shell 脚本(shell script),是一种为shell编写的脚本程序。 二、shell脚本运行环境和运行方式 1…

修改Rabbitmq Management UI访问端口

[{rabbit, [{vm_memory_high_watermark_paging_ratio, 1}]},{rabbitmq_management, [{listener, [{port, 8080},{ip, "0.0.0.0"},{ssl, false}]}]} ].注意,每个配置项后应跟一个逗号分隔,最后一个配置项后不用逗号分隔。 改完配置文件之后&am…

Shell脚本 字符串

字符串是shell编程中最常用最有用的数据类型(除了数字和字符串,也没有其它类型好用),字符串可以用单引号,也可以用双引号,也可以不用引号。 1、单引号 strthis is a string [roothadoop01 shell]# vi String.sh#!/bin/bash str…

RabbitMQ QA

1.为什么要有connection和channel? ConnectionFactory、Connection、Channel都是RabbitMQ对外提供的API中最基本的对象。Connection是RabbitMQ的socket链接,它封装了socket协议相关部分逻辑。ConnectionFactory为Connection的制造工厂。Channel是我们与RabbitMQ打…

Shell脚本 数组

bash支持一维数组(不支持多维数组),并且没有限定数组的大小。 类似与C语言,数组元素的下标由0开始编号,获取数组中的元素要利用下标,下标可以是整数或算术表达式,其值应大于或等于0。 1、定义…

RabbitMQ发布/订阅

官方文档: http://www.rabbitmq.com/tutorials/tutorial-three-java.html 文档翻译: https://blog.csdn.net/leisure_life/article/details/78667618

Shell脚本 注释

以"#"开头的行就是注释,会被解释器忽略。(除第一行的解释器以外) shell里没有多行注释,只能每一行加一个#号。 #!/bin/bash#################################### #################################### ## ## this is my first shell scrip…

Shell脚本 基本运算符

目录 基本运算符 一、算术运算符 二、关系运算符 三、布尔运算符 四、逻辑运算符 五、字符串运算符 六、文件测试运算符 基本运算符 Shell 和其他编程语言一样,支持多种运算符,包括: 算数运算符关系运算符布尔运算符字符串运算符文件…