栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Linux RabbitMQ高可用普通集群搭建

Linux RabbitMQ高可用普通集群搭建

Linux RabbitMQ高可用普通集群搭建

-清理单机和网络开发

1.关闭原先的单节点
2.阿里网络安全组开放对应的端口
3.防火墙一定要关闭

-准备3个节点安装好rabbitmq,形成集群 (记得每个节点间隔几十秒再启动,如果失败删除宿主机文件重新搭建)

#节点一,主节点,创建-v映射目录

docker run -d --hostname rabbit_host1 --name rabbitmq1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin  -e RABBITMQ_ERLANG_cookie='rabbitmq_cookie_admin' --privileged=true -v /usr/local/rabbitmq/1/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/1/log:/var/log/rabbitmq rabbitmq:management


#节点二,创建-v映射目录

docker run -d --hostname rabbit_host2 --name rabbitmq2  -p 15673:15672 -p 5673:5672 --link rabbitmq1:rabbit_host1 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_cookie='rabbitmq_cookie_admin' --privileged=true -v /usr/local/rabbitmq/2/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/2/log:/var/log/rabbitmq rabbitmq:management


#节点三,创建-v映射目录

docker run -d --hostname rabbit_host3 --name rabbitmq3 -p 15674:15672 -p 5674:5672 --link rabbitmq1:rabbit_host1 --link rabbitmq2:rabbit_host2 -e RABBITMQ_NODENAME=rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -e RABBITMQ_ERLANG_cookie='rabbitmq_cookie_admin' --privileged=true -v /usr/local/rabbitmq/3/lib:/var/lib/rabbitmq -v /usr/local/rabbitmq/3/log:/var/log/rabbitmq rabbitmq:management

参数说明

  • –hostname 自定义Docker容器的 hostname
    配置hostname需要在vim /etc/hosts
    比如
    192.168.115.136 rabbit_host1
    192.168.115.138 rabbit_host2
    192.168.115.139 rabbit_host3

  • –link 容器之间连接,link不可或缺,使得三个容器能互相通信

  • –privileged=true 使用该参数,container内的root拥有真正的root权限,否则容器出现permission denied

  • -v 宿主机和容器路径映射


参数 RABBITMQ_NODENAME,缺省 Unix*: rabbit@$HOSTNAME
参数 RABBITMQ_DEFAULT_USER=admin
参数 RABBITMQ_DEFAULT_PASS=xdclass.net168

  • Erlang cookie 值必须相同,也就是一个集群内 RABBITMQ_ERLANG_cookie 参数的值必须相同,
    相当于不同节点之间通讯的密钥,erlang.cookie是erlang的分布式token文件,集群内各个节点的erlang.cookie需要相同,才可以互相通信

配置集群

节点一配置集群

docker exec -it rabbitmq1 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit



节点二加入集群,–ram是以内存方式加入,忽略该参数默认为磁盘节点。

docker exec -it rabbitmq2 bash
rabbitmqctl stop_app
rabbitmqctl join_cluster --ram rabbit@rabbit_host1
rabbitmqctl start_app
exit



节点三加入集群,–ram是以内存方式加入,忽略该参数默认为磁盘节点。

docker exec -it rabbitmq3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbit_host1
rabbitmqctl start_app
exit
​

#查看集群节点状态,配置启动了3个节点,1个磁盘节点和2个内存节点

  • rabbitmqctl cluster_status

访问节点一的web管控台,可以看到多个节点

到此为止,我们已经完成了RabbitMQ普通模式集群的建立,启动了3个节点,1个磁盘节点和2个内存节点

测试
node1 主节点创建队列,发送消息 (可以选择消息是否持久化)
node2和node3通过节点自身的web管控台可以看到队列和消息
问题:如果把node1节点停止,node2和node3会收不到消息
备注:如果是在非主节点(非磁盘节点)创建队列和发送消息,则其他队列可以显示

Spring boot项目配置文件
#配置文件修改
#消息队列
spring:
  rabbitmq:
    addresses: 10.211.55.13:5672,10.211.55.13:5673,10.211.55.13:5674
    virtual-host: /dev
    password: admin
    username: admin
    #开启消息二次确认,生产者到broker的交换机
    publisher-/confirm/i-type: correlated
​
​
    #开启消息二次确认,交换机到队列的可靠性投递
    publisher-returns: true
    #为true,则交换机处理消息到路由失败,则会返回给生产者
    template:
      mandatory: true
​
    #消息手工确认ACK
    listener:
      simple:
        acknowledge-mode: manual
​

其他不用变动,正常的发消息
模拟异常
先发送消息,然后停止node1, 启动SpringBoot项目,消息则消费不了,且报错
重新启动node1,启动SpringBoot项目,恢复正常

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/487846.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号