1.集群
rabbitmq集群:RabbitMQ broker 集群是多个erlang节点的逻辑组,每个节点运行rabbitmq应用,他们之间共享用户、虚拟主机、队列、exchange、绑定和运行时参数。
集群之间复制什么信息:除了message queue(存在一个节点,从其他节点都可见、访问该队列,要实现queue的复制就需要做queue的HA)之外,任何一个rabbitmq broker上的所有操作的data和state都会在所有的节点之间进行复制。
集群运行的前提:
1、集群所有节点必须运行相同的erlang及rabbitmq版本
2、hostname解析,节点之间通过域名相互通信。centos默认主机名是localhost,需先进行修改
端口及用途
5672 客户端连接用途
15672 web管理接口
25672 集群通信用途
集群的搭建方式:
1、通过rabbitmqctl手工配置 (推荐)
2、通过配置文件声明
3、通过rabbitmq-autocluster插件声明
4、通过rabbitmq-clusterer插件声明
集群故障处理机制:
1、rabbitmq broker集群允许个体节点down机
存消息的节点挂掉了,consumer只能等到节点恢复后才能读到消息。
2、对应集群的的网络分区问题( network partitions)
集群推荐用于LAN环境,不适用WAN环境;
要通过WAN连接broker,Shovel or Federation插件是最佳的解决方案。
Shovel or Federation不同于集群。
节点运行模式:
为保证数据持久化,节点跑在disk模式,如果今后压力大,需要提高性能,考虑采用ram模式
持久化需同时设置队列及消息,否则无效
集群节点之间是如何相互认证的:
通过Erlang Cookie,相当于共享秘钥的概念,长度任意,只要所有节点都一致即可。
rabbitmq server在启动的时候,erlang VM会自动创建一个随机的cookie文件。
cookie文件的位置: /var/lib/rabbitmq/.erlang.cookie
为保证cookie的完全一致,采用从一个节点copy的方式。
2.镜像队列
将queue镜像到cluster中其他的节点之上。在该实现下,如果集群中的一个节点失效了,queue能自动地切换到镜像中的另一个节点以保证服务的可用性。在通常的用法中,针对每一个镜像队列都包含一个master和多个slave,分别对应于不同的节点。slave会准确地按照master执行命令的顺序进行命令执行,故slave与master上维护的状态应该是相同的。除了publish外所有动作都只会向master发送,然后由master将命令执行的结果广播给slave们,故看似从镜像队列中的消费操作实际上是在master上执行的。
一旦完成了选中的slave被提升为master的动作,发送到镜像队列的message将不会再丢失:publish到镜像队列的所有消息总是被直接publish到master和所有的slave之上。这样一旦master失效了,message仍然可以继续发送到其他slave上。
rabbitmq集群:RabbitMQ broker 集群是多个erlang节点的逻辑组,每个节点运行rabbitmq应用,他们之间共享用户、虚拟主机、队列、exchange、绑定和运行时参数。
集群之间复制什么信息:除了message queue(存在一个节点,从其他节点都可见、访问该队列,要实现queue的复制就需要做queue的HA)之外,任何一个rabbitmq broker上的所有操作的data和state都会在所有的节点之间进行复制。
集群运行的前提:
1、集群所有节点必须运行相同的erlang及rabbitmq版本
2、hostname解析,节点之间通过域名相互通信。centos默认主机名是localhost,需先进行修改
端口及用途
5672 客户端连接用途
15672 web管理接口
25672 集群通信用途
集群的搭建方式:
1、通过rabbitmqctl手工配置 (推荐)
2、通过配置文件声明
3、通过rabbitmq-autocluster插件声明
4、通过rabbitmq-clusterer插件声明
集群故障处理机制:
1、rabbitmq broker集群允许个体节点down机
存消息的节点挂掉了,consumer只能等到节点恢复后才能读到消息。
2、对应集群的的网络分区问题( network partitions)
集群推荐用于LAN环境,不适用WAN环境;
要通过WAN连接broker,Shovel or Federation插件是最佳的解决方案。
Shovel or Federation不同于集群。
节点运行模式:
为保证数据持久化,节点跑在disk模式,如果今后压力大,需要提高性能,考虑采用ram模式
持久化需同时设置队列及消息,否则无效
集群节点之间是如何相互认证的:
通过Erlang Cookie,相当于共享秘钥的概念,长度任意,只要所有节点都一致即可。
rabbitmq server在启动的时候,erlang VM会自动创建一个随机的cookie文件。
cookie文件的位置: /var/lib/rabbitmq/.erlang.cookie
为保证cookie的完全一致,采用从一个节点copy的方式。
2.镜像队列
将queue镜像到cluster中其他的节点之上。在该实现下,如果集群中的一个节点失效了,queue能自动地切换到镜像中的另一个节点以保证服务的可用性。在通常的用法中,针对每一个镜像队列都包含一个master和多个slave,分别对应于不同的节点。slave会准确地按照master执行命令的顺序进行命令执行,故slave与master上维护的状态应该是相同的。除了publish外所有动作都只会向master发送,然后由master将命令执行的结果广播给slave们,故看似从镜像队列中的消费操作实际上是在master上执行的。
一旦完成了选中的slave被提升为master的动作,发送到镜像队列的message将不会再丢失:publish到镜像队列的所有消息总是被直接publish到master和所有的slave之上。这样一旦master失效了,message仍然可以继续发送到其他slave上。
3.其他功能
https://www.sojson.com/blog/48.html