RabbitMQ(三)集群

一、rabbitmq节点
1、节点分类
1)磁盘节点:配置信息和元信息存储在磁盘上
2)内存节点:配置信息和元信息存储在内存中,RAM节点不提供更高的消息速率
 
2、节点的选择
1)在单机情况下,节点必须为磁盘节点
2)在集群模式下,至少有一个节点是磁盘节点
如果唯一磁盘的磁盘节点崩溃了,不能进行如下操作:
  • 不能创建队列
  • 不能创建交换器
  • 不能创建绑定
  • 不能添加用户
  • 不能更改权限
  • 不能添加和删除集群几点
 
3)集群中所有节点都是对等的,不存在主从关系
 
二、rabbitmq的三种模式
1、单机模式,就是单独运行一个rabbitmq服务
 
2、普通集群模式
1)节点之间同步元数据
  • 队列元数据:队列名称和它的属性;
  • 交换器元数据:交换器名称、类型和属性;
  • 绑定元数据:一张简单的表格展示了如何将消息路由到队列;
  • vhost元数据:为vhost内的队列、交换器和绑定提供命名空间和安全属性;
  • 用户元数据
  • 权限元数据
2)消息不会在节点之间同步
3)队列只会在创建的节点中存在,其他节点只知道这个queue的metadata信息和一个指向queue的owner node的指针
 
3、生产和消费消息
1)如果生产者消费者连接的节点为队列所在节点,集群中的消息收发只与该节点有关
2)如果连接的节点为队列非所在节点,该节点起路由转发作用,
生产消息:根据节点上有关的元数据,将数据转发至队列所在节点上,最终发送的消息还是会存储至队列所在节点上。
消费消息:根据节点上有关的元数据,从队列所在节点拉取消息,发送给消费者
 
3、镜像集群模式
1)每一个镜像队列都包含一个master和1个或多个slave队列
2)一旦主节点不可用,最老的从队列将被选举为新的主队列。
3)镜像模式是在普通模式的基础上,通过配置同步策略,将消息同步到从队列

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]
-p Vhost: 可选参数,针对指定vhost下的queue进行设置
Name: policy的名称
Pattern: queue的匹配模式(正则表达式)
Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode
        ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes
            all:表示在集群中所有的节点上进行镜像
            exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
            nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
        ha-params:作为参数,为ha-mode的补充
        ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual
priority:可选参数,policy的优先级

实例: rabbitmqctl set_policy ha
-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to all
三、docker部署镜像模式

 

cat>>/etc/hosts<<EOF

10.31.4.45  test-prd-10-31-4-45
10.31.4.96  test-prd-10-31-4-96
EOF

systemctl enable docker

systemctl start docker

docker run --name rabbitmq-3.7.16 \
-e RABBITMQ_DEFAULT_PASS="12345678" \
-e RABBITMQ_DEFAULT_USER="root" \
-v /data/rabbitmq:/var/lib/rabbitmq \
-e RABBITMQ_ERLANG_COOKIE="NLZZHgKCFB123XSVWXGD" \
--network=host -d rabbitmq:3.7.16-management



在节点10.31.4.45
docker exec abf6fe67724e  rabbitmqctl stop_app
docker exec abf6fe67724e  rabbitmqctl join_cluster rabbit@test-prd-10-31-4-96
docker exec abf6fe67724e  rabbitmqctl start_app

在其中一个节点执行同步策略
docker exec 51189b820642 rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}' --apply-to all

 

posted @ 2020-11-16 14:55  guoxianqi  阅读(401)  评论(0)    收藏  举报