RabbitMQ高级-应用问题、集群搭建

这篇具有很好参考价值的文章主要介绍了RabbitMQ高级-应用问题、集群搭建。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.消息补偿

消息可靠性保障:——消息补偿机制

需求:100%确保消息发送成功

RabbitMQ高级-应用问题、集群搭建,RabbitMQ,rabbitmq,分布式,数据库,java

2.幂等性保障

幂等性指一次和多次请求某一资源,对于资源本身应该具有同样的结果。也就是说,其任意多次执行对资源本身所产生的影响均与第一次执行的影响相同

在MQ中是指,消费多条相同的消息,得到与消费该消息一次相同的结果

消息幂等性保障——乐观锁机制

RabbitMQ高级-应用问题、集群搭建,RabbitMQ,rabbitmq,分布式,数据库,java

3.集群搭建-镜像队列 

集群方案原理

RabbitMQ这款消息队列中间件产品本身是基于Erlang编写,Erlang语言天生具备分布式特性(通过同步Erlang集群各节点的magic cookie来实现)。因此,RabbitMQ天然支持Clustering。这使得RabbitMQ本身不需要像ActiveMQ、Kafka那样通过ZooKeeper分别来实现HA方案和保存集群的元数据。集群是保证可靠性的一种方式,同时可以通过水平扩展以达到增加消息吞吐量能力的目的

RabbitMQ高级-应用问题、集群搭建,RabbitMQ,rabbitmq,分布式,数据库,java

此处展示单机多实例部署,多个节点之间用端口来区分,在使用真正的集群时用ip来区分即可

单机多实例部署

启动单实例RabbitMQ

查看RabbitMQ运行状态,确保RabbitMQ运行正常

查看正常无误后,停止以上单实例RabbitMQ

systemctl stop rabbitmq-server

启动第1个节点实例(前台启动)

端口:5673,web管理插件端默认端口:15672

注: 这里将默认端口5672留给HA使用

RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=rabbit1 rabbitmq-server start

(前台启动方式)

启动第2个节点实例

 RABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15674}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server start

附:结束集群节点命令

rabbitmqctl -n rabbit1 stop

rabbitmqctl -n rabbit2 stop

重置rabbit1实例为主节点

在新的会话窗口,依次执行命令(停止—>重置—>启动)

rabbitmqctl -n rabbit1 stop_app

rabbitmqctl -n rabbit1 reset

rabbitmqctl -n rabbit1 start_app

RabbitMQ高级-应用问题、集群搭建,RabbitMQ,rabbitmq,分布式,数据库,java

重置rabbit2实例为从节点

在新的会话窗口,依次执行命令(停止—>重置—>设为从节点—>启动)

将rabbit2加入到rabbit1节点,作为rabbit1的从节点

命令格式:
rabbitmqctl -n rabbit2 join_cluster rabbit1@'###'

注: 引号''内的“#”换成真实环境的主机名,如master等

rabbitmqctl -n rabbit2 join_cluster rabbit1@'master'

rabbitmqctl -n rabbit2 start_app

RabbitMQ高级-应用问题、集群搭建,RabbitMQ,rabbitmq,分布式,数据库,java

查看集群状态命令 

rabbitmqctl cluster_status -n rabbit1

RabbitMQ高级-应用问题、集群搭建,RabbitMQ,rabbitmq,分布式,数据库,java

说明: 此时在rabbit1节点创建的队列和队列内的消息在rabbit2节点也能看到。但是当rabbit1节点宕机时,rabbit2也将无法看到rabbit1之前的队列和消息(造成消息丢失),原因是配置到此步骤,仍然没能实现队列和消息等的同步 

附:集群管理相关命令

rabbitmqctl join_cluster {cluster_node} [–ram]
将节点加入指定集群中。在这个命令执行前需要停止RabbitMQ应用并重置节点

rabbitmqctl cluster_status
显示集群的状态

rabbitmqctl change_cluster_node_type {disc|ram}
修改集群节点的类型。在这个命令执行前需要停止RabbitMQ应用

rabbitmqctl forget_cluster_node [–offline]
将节点从集群中删除,允许离线执行

rabbitmqctl update_cluster_nodes {clusternode}
在集群中的节点应用启动前咨询clusternode节点的最新信息,并更新相应的集群信息。这个和join_cluster不同,它不加入集群。考虑这样一种情况,节点A和节点B都在集群中,当节点A离线了,节点C又和节点B组成了一个集群,然后节点B又离开了集群,当A醒来的时候,它会尝试联系节点B,但是这样会失败,因为节点B已经不在集群中了

rabbitmqctl cancel_sync_queue [-p vhost] {queue}
取消队列queue同步镜像的操作

rabbitmqctl set_cluster_name {name}
设置集群名称。集群名称在客户端连接时会通报给客户端。Federation和Shovel插件也会有用到集群名称的地方。集群名称默认是集群中第一个节点的名称,通过这个命令可以重新设置

RabbitMQ镜像集群配置

上面已经完成RabbitMQ默认集群模式,但并不保证队列的高可用性,尽管交换机、绑定这些可以复制到集群里的任何一个节点,但是队列内容不会复制。虽然该模式一定程度上解决了项目节点压力,但队列节点宕机直接导致该队列无法应用,只能等待重启,所以要想在队列节点宕机或故障也能正常应用,就要复制队列内容到集群里的每个节点,必须要创建镜像队列(即集群策略Policy)

镜像队列是基于普通的集群模式的,然后再添加一些策略,所以你还是得先配置普通集群,然后才能设置镜像队列,我们就以上面的集群接着做

设置的镜像队列(即添加集群策略Policy:同步交换机和队列)

可以通过RabbitMQ的web管理端设置

RabbitMQ高级-应用问题、集群搭建,RabbitMQ,rabbitmq,分布式,数据库,java

参数说明:

Name:策略名称

Pattern:匹配的规则,如果是匹配所有的队列,是^.

Definition:使用ha-mode模式中的all,也就是同步所有匹配的队列。问号链接帮助文档

 通过dos命令设置

rabbitmqctl set_policy my_ha "^" '{"ha-mode":"all"}'

此时在rabbit1节点rabbit2节点已实现队列和交换机同步

4.集群搭建-安装HAProxy,进行负载均衡 

HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案,包括Twitter,Reddit,StackOverflow,GitHub在内的多家知名互联网公司在使用。HAProxy实现了一种事件驱动、单一进程模型,此模型支持非常大的并发连接数

安装依赖包

下载源码包 :OpenPKG Project: Download

解压到/usr/local目录

tar -xvf haproxy-2.7.5.tar.gz -C /usr/local

进入源码目录、编译、安装

cd /usr/local/haproxy-2.7.5

make TARGET=linux31 PREFIX=/usr/local/haproxy

make install PREFIX=/usr/local/haproxy

添加组、用户,并赋权

groupadd -r -g 149 haproxy

useradd -g haproxy -r -s /sbin/nologin -u 149 haproxy

配置haproxy(创建目录、创建配置文件haproxy.cfg)

mkdir /etc/haproxy

vim /etc/haproxy/haproxy.cfg

haproxy.cfg中写入以下内容 

注: 在配置文件/etc/haproxy/haproxy.cfg中的listen stats下的bind属性中的IP地址需换成服务器IP,不能改为127.0.0.1,否则HAProxy的web管理页面访问不了

#logging options
global
        log 127.0.0.1 local0 info
        maxconn 5120
        chroot /usr/local/haproxy
        uid 99
        gid 99
        daemon
        quiet
        nbproc 20
        pidfile /var/run/haproxy.pid

defaults
        log global

        mode tcp

        option tcplog
        option dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout 5s
   
     clitimeout 60s

     srvtimeout 15s
#front-end IP for consumers and producters

listen rabbitmq_cluster
        bind 0.0.0.0:5672

        mode tcp
        #balance url_param userid
        #balance url_param session_id check_post 64
        #balance hdr(User-Agent)
        #balance hdr(host)
        #balance hdr(Host) use_domain_only
        #balance rdp-cookie
        #balance leastconn
        #balance source //ip

        balance roundrobin

        server node1 127.0.0.1:5673 check inter 5000 rise 2 fall 2
        server node2 127.0.0.1:5674 check inter 5000 rise 2 fall 2

listen stats
        bind 192.168.235.129:8100
        mode http
        option httplog
        stats enable
        stats uri /rabbitmq-stats
        stats refresh 5s

启动HAproxy负载,并查看haproxy进程 

/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg

ps -ef | grep haproxy

其他命令

启动haproxy
# /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
重启haproxy
# /usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg -st `cat /usr/local/haproxy/haproxy.pid` 
停止haproxy
# killall haproxy文章来源地址https://www.toymoban.com/news/detail-857464.html

到了这里,关于RabbitMQ高级-应用问题、集群搭建的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RabbitMQ集群搭建

    说明:集群,不管是Redis集群,还是MQ集群,都是为了提高系统的可用性,使系统不至于因为Redis、MQ宕机而崩溃。本文介绍RabbitMQ集群搭建,RabbitMQ集群分为以下三类: 普通集群 镜像集群 仲裁队列 普通集群下,节点之间并不会进行数据同步,而是节点之间存在引用,当消费者

    2024年02月16日
    浏览(31)
  • RabbitMQ高可用集群搭建

    理论简介 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题。实现高性能、高可用、可伸缩和最终一致性架构,是大型分布式系统不可缺少的中间件。目前在生产环境,使用较多的消息队列有ActiveMQ、RabbitMQ、Kafka、RocketMQ等。 Rabbi

    2024年02月20日
    浏览(34)
  • RabbitMQ集群环境搭建-镜像模式

    集群模式非常经典的就是Mirror镜像模式,保证100%数据不丢失,在实际工作中也是用的最多的。并且实现集群非常的简单,一般互联网大厂都会构建这种镜像集群模式。 Mirror镜像队列,目的是为了保证rabbitmq数据的高可靠性解决方案,主要就是实现数据的同步,一般来讲是2-

    2024年02月14日
    浏览(47)
  • RabbitMQ集群搭建(Docker环境)

    rabbitmq集群搭建,这里我们采用docker的方式来进行搭建,确定安装了docker环境 1.拉取镜像 2.创建rabbitmq容器 创建rabbitmq容器1: 创建rabbitmq容器2: 执行成功后如下图 解释:  3.配置rabbitmq集群 这里我们使用 集群名 rabbit@rabbit1 ,将节点2 加入到节点1号中。 3.1配置rabbit1 进入到my

    2024年02月01日
    浏览(30)
  • 【RabbitMQ】之高可用集群搭建

    一、RabbitMQ 集群原理 1、默认集群原理 2、镜像集群原理 3、负载均衡方案 二、RabbitMQ 高可用集群搭建 1、RabbitMQ 集群搭建 2、配置镜像队列 3、HAProxy 环境搭建 4、Keepalived 环境搭建 3-1、RabbitMQ 集群简介 单台 RabbitMQ 服务器处理消息的能力是有瓶颈的,而且可靠性还无法保证,所

    2024年02月15日
    浏览(33)
  • Docker中搭建RabbitMQ集群

    服务器IP 端口 hostname 管理界面地址 192.168.13.100 5673 rabbitmq-node1 192.168.13.100:15673 192.168.13.100 5674 rabbitmq-node2 192.168.13.100:15674 192.168.13.100 5675 rabbitmq-node3 192.168.13.100:15675 新版本已经不建议通过环境变量设置 Erlang Cookie 了,建议在 home 目录下新建 .erlang.cookie 文件,在 每个节点的 .

    2024年02月10日
    浏览(35)
  • 基于 Docker 搭建 RabbitMQ 集群

    ​ 在RabbitMQ中,有不同的集群模式,包括普通模式、镜像模式和仲裁队列。每种模式具有不同的特点和应用场景。 1.1 普通模式 普通集群,也称为标准集群(classic cluster),具备以下特征: 在集群的各个节点之间共享部分数据,包括交换机和队列的元信息,但不包括队列中的

    2024年04月10日
    浏览(35)
  • Rabbitmq----分布式场景下的应用

    如果单机模式忘记也可以看看这个快速回顾rabbitmq,在做学习 消息队列在使用过程中,面临着很多实际问题需要思考: 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送时丢失: 生产者发送的消息未送达exchange 消

    2024年02月08日
    浏览(31)
  • RabbitMQ在SpringBoot中的高级应用(1)

            1. 在虚拟机中启动RabbitMQ,要先切换到root用户下: su root         2.关闭防火墙: systemctl stop firewalld           3.rabbitmq-server start # 启用服务         4.rabbitmq-server -detached # 后台启动   有两种确认的方式:             自动ACK:RabbitMQ将消息发送给消费者后就

    2024年02月16日
    浏览(16)
  • RabbitMQ——解决分布式事务问题,RabbitMQ的重要作用之一!!!通过可靠生产和可靠消费来完美解决!

    分布式事务是指涉及多个独立的计算机系统(也称为节点或参与者)之间的事务处理。在分布式系统中,每个节点可能各自拥有自己的数据存储和事务管理机制。分布式事务的目标是保证在跨多个节点执行的一系列操作可以以一致和可靠的方式执行和提交,即使在面对故障或

    2024年04月23日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包