rabbitmq集群模式分为两种:普通模式和镜像模式
如果不设置集群模式则为普通模式,下面是将集群修改为镜像模式
镜像集群
RabbitMQ镜像功能,需要基于RabbitMQ策略来实现,策略policy是用来控制和修改群集范围的某个vhost的队列行为和Exchange行为。设置哪些Exchange或者queue的数据需要复制、同步,以及同步的规则
普通集群下,从节点无法复制队列数据,虽然可以从slave节点看到queue;
策略参数
rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern> <definition>
参数说明:
- -p vhost : 可选,针对指定vhost下的queue进行镜像
- name:策略名称(自定义)
- pattern:queue的匹配模式(正则),对匹配到的queue进行镜像
- definition:镜像定义,主要包括三部分:ha-mode,ha-params,ha-sync-mode
1. ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
- all:表示在集群中所有的节点上进行镜像
- exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
- nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
2. ha-params:ha-mode模式需要用到的参数
3. ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual - priority:可选参数,policy的优先级(当有多个策略作用时,该策略的优先级)
查看策略
rabbitmqctl list_policies
如果没有策略则为
Listing policies for vhost "/" ...
添加策略
现添加一个策略:
- 在集群中所有的节点上进行镜像, ha-mode: all
- 只对 hello 开头的队列做镜像, ‘^hello’
- 队列中消息的同步方式为自动,ha-sync-mode: automatic
rabbitmqctl set_policy ha-all '^hello' '{"ha-mode":"all","ha-sync-mode":"automatic"}'
// 说明:策略正则表达式为 “^” 表示匹配所有队列名称 “^hello”:匹配hello开头队列
此时页面上可以看到该策略
删除策略
rabbitmqctl clear_policy ha-all
修改节点类型
节点类型有两种:内存节点和磁盘节点
ram为内存节点;
disc为磁盘节点
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type ram
rabbitmqctl start_app