Rabbitmq 集群

Rabbitmq 集群

集群目的就是为了实现rabbitmq的高可用性,集群分为2种

  • 普通集群:主备架构,只是实现主备方案,不至于主节点宕机导致整个服务无法使用
  • 镜像集群:同步结构,基于普通集群实现的队列同步

普通集群

slave节点复制master节点的所有数据和状态,除了队列数据,队列数据只存在master节点,但是Rabbitmq slave节点可以实现队列的转发,也就是说消息消费者可以连接到slave节点,但是slave需要连接到master节点转发队列,由此说明只能保证了服务可以用,无法达到高可用
在这里插入图片描述

slave节点队列可以查看到,但是不会同步数据

镜像集群
基于普通集群实现队列的集群主从,消息会在集群中同步(至少三个节点)
在这里插入图片描述
镜像集群部署

环境准备
在这里插入图片描述
配置hosts

cat >> /etc/hosts << EOL
192.168.12.10 controller
192.168.12.11 standby1
192.168.12.12 standby2
EOL

配置.erlang.cookie

RabbitMQ 的集群是依赖 erlang 集群,而 erlang 集群是通过这个 cookie 进行通信认证的,因此,三台机器的配置文件需要一致

  • 目录:/var/lib/rabbitmq/.erlang.cookie (隐藏文件)

    rabbitmq-server -detached
    #启动rabbitmq服务才能查看到.erlang.cookie文件(三台都要启动)
    rabbitmqctl stop_app
    #停止掉2个standby节点,不然复制后操作会提示认证问题,因为erlang.cookie改变了,需要kill才行
    scp /var/lib/rabbitmq/.erlang.cookie root@standby1:/var/lib/rabbitmq/
    scp /var/lib/rabbitmq/.erlang.cookie root@standby2:/var/lib/rabbitmq/
    #替换erlang.cookie文件

加入集群(节点操作加入)

rabbitmqctl cluster_status
#查看集群,默认集群就是自己
rabbitmqctl stop_app 
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@controller
rabbitmqctl start_app
#停止服务、重启之前的数据、加入集群

报错解决
在这里插入图片描述

rabbitmqctl start_app
#controller节点

在这里插入图片描述

rabbitmq-server -detached
rabbitmqctl stop_app
#再次启动后停止

查看集群状态
在这里插入图片描述
开启web管理页面

rabbitmq-plugins enable rabbitmq_management (三个节点)
#url:http://192.168.12.10:15672/
#默认账号:guest guest

在这里插入图片描述
实现队列的集群

基于普通镜像通过配置策略的方式实现,policy可以选择exchanges 或者 queue 的数据需要复制同步,以及如何复制同步

  • 可以基于命令行配置
  • 支持web管理界面配置

策略格式

rabbitmqctl set_policy [-p ] [–priority <priorityz] [–apply-to <apply-to2]

  • -p Vhost: 可选参数,针对指定vhost下的queue进行设置
  • Name:priority 名称
  • 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"}'
#策略名 ha-all
#匹配所有的队列,也可以具体单个,比如'^test' 
#三个节点都进行队列镜像
#自动同步

查看策略

rabbitmqctl list_policies

在这里插入图片描述
在这里插入图片描述测试关闭controller节点

rabbitmqctl stop_app

在这里插入图片描述
在这里插入图片描述
查看后发现节点已经变成standby2,数量也减少了一个

恢复controller节点

rabbitmqctl start_app

在这里插入图片描述
查看后,说明集群节点不会被抢回,其实这样也是合理的

参考:https://www.rabbitmq.com/clustering.html
参考视频:https://www.bilibili.com/video/BV1dE411K7MGp=19

卸载rabbitmq(干净)

yum -y remove rabbitmq-server.noarch
yum -y remove erlang-* 
rm -rf /usr/lib64/erlang
rm -rf /var/lib/rabbitmq
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值