`
frank1998819
  • 浏览: 751743 次
  • 性别: Icon_minigender_1
  • 来自: 南京
文章分类
社区版块
存档分类

rabbitmq单机多实例集群与负载均衡(转)

 
阅读更多

原作者:http://blog.csdn.net/engourdi/article/details/19334961

 

1.rabbitmq集群

单机多实例的集群测试

10.5.16.222上

$ RABBITMQ_NODE_PORT=5672 RABBITMQ_NODENAME=rabbit1 rabbitmq-server -detached

$ RABBITMQ_NODE_PORT=5673 RABBITMQ_NODENAME=hare1 rabbitmq-server -detached

$ rabbitmqctl -n hare stop_app

$ rabbitmqctl -n hare join_cluster rabbit@`beta`

$ rabbitmqctl -n hare start_app

 

停掉

root@beta:~# rabbitmqctl -n hare1 stop

Stopping and halting node hare1@beta ...

...done.

root@beta:~# rabbitmqctl -n rabbit1 cluster_status

Cluster status of node rabbit1@beta ...

[{nodes,[{disc,[hare1@beta,rabbit1@beta]}]},

 {running_nodes,[rabbit1@beta]},

 {partitions,[]}]

...done.

重新启动hare1

root@beta:~# rabbitmqctl -n hare1 cluster_status

Cluster status of node hare1@beta ...

[{nodes,[{disc,[hare1@beta,rabbit1@beta]}]},

 {running_nodes,[rabbit1@beta,hare1@beta]},

 {partitions,[]}]

...done.

 

 

         单机简单集群搭建完毕,使用消息发送与接收测试,增加节点客户端消息接收器需重启,删除节点不需重新配置,使用镜像队列可防止消息单节点丢失,但性能会打折扣。

         减少客户端配置可以使用dns服务器来代替ip+端口,也可以使用下一节调研的负载均衡器。

 

2.负载均衡(可选)

于是在另外一台128上搭建tcp负载均衡器

 

10.5.16.128

apt安装haproxy

配置 /etc/haproxy/haproxy.cfg:

listen rabbitmq 0.0.0.0:56720

mode tcp

balance roundrobin

option tcpka

server rabbit1 10.5.16.222:5672 check inter 5000 rise 2fall 5

server hare1 10.5.16.222:5673 check inter 5000 rise 2fall 5

 

客户端配置到haproxy所在服务器的地址与监听端口

       stats uri /haproxy-stats

        stats realm Haproxy\ statistics

        stats auth franklin:111111

状态监听http://XXX/haproxy-stats

 

3.镜像队列

spring 镜像队列配置

<rabbit:template id="amqpTemplate" connection-factory="connectionFactory" reply-queue-arguments="haArgs" />

    <rabbit:queue auto-delete="true" durable="false"id="mailQueue"

        name="#{config.project.mailQueueName}" queue-arguments="haArgs"></rabbit:queue>

    <rabbit:queue-arguments id="haArgs">

        <entry key="x-ha-policy" value="all" />

    </rabbit:queue-arguments>

 

 

 4.额外参考说明

    不做镜像队列的话,节点down掉则必须等他回复,不然消息就丢失了。master节点退出集群会选一个slave作为master,那么要是不幸选中了一个刚刚加入集群的节点怎么办?不就丢消息了么?放心RabbitMQ会维护节点的状态是否已经同步,使用rabbitmqctl的synchronised_slave_pids参数,就可以查看状态. 对于publish,客户端任意连接集群的一个节点,转发给创建queue的节点存储消息的所有信息;

    对于consumer,客户端任意连接集群中的一个节点,如果数据不在该节点中,则从存储该消息data的节点拉取。可见当存储有queue内容的节点失效后,只要等待该节点恢复后,queue中存在的消息才可以获取消费的到。显然增加集群的节点,可以提高整个集群的吞吐量,但是在高可用方面要稍微差一些

   mirror queue是为rabbitMQ高可用的一种方案,相对于普通的集群方案来讲,queue中的消息每个节点都会存在一份copy,这个在单个节点失效的情况下,整个集群仍旧可以提供服务。但是由于数据需要在多个节点复制,在增加可用性的同时,系统的吞吐量会有所下降。

在实现机制上,mirror queue内部实现了一套选举算法,有一个master和多个slave,queue中的消息以master为主,对于publish,可以选择任意一个节点进行连接,rabbitmq内部若该节点不是master,则转发给master,master向其他slave节点发送该消息,后进行消息本地化处理,并组播复制消息到其他节点存储,对于consumer,可以选择任意一个节点进行连接,消费的请求会转发给master,为保证消息的可靠性,consumer需要进行ack确认,master收到ack后,才会删除消息,ack消息会同步(默认异步)到其他各个节点,进行slave节点删除消息。若master节点失效,则mirror queue会自动选举出一个节点(slave中消息队列最长者)作为master,作为消息消费的基准参考;在这种情况下可能存在ack消息未同步到所有节点的情况(默认异步),若slave节点失效,mirror queue集群中其他节点的状态无需改变。

 

 
分享到:
评论

相关推荐

    rabbitmq-server资源安装包

    多个RabbitMQ节点可以组成集群,提供高可用性和负载均衡。队列可以在节点间镜像,保证即使有节点故障,数据也不会丢失。 9. **持久化与消息策略**: 消息可以被持久化,即使RabbitMQ重启,队列和消息依然存在。还...

    rabbitMq安装教程以及软件

    - **节点(Node)**:RabbitMQ服务器的实例称为节点,可以是单机部署或集群部署。 - **队列(Queue)**:消息的存储区域,多个消费者可以从同一个队列中消费消息,但每个消息只被消费一次。 - **交换器(Exchange)*...

    rabbitmq-server-windows-3.9.13

    1. **集群(Clustering)**:通过将多个RabbitMQ节点组成集群,实现高可用性和负载均衡。如果一个节点故障,其他节点可以接管其职责。 2. **镜像队列(Mirrored Queues)**:在集群中,队列可以被镜像到多个节点,...

    RabbitMQ实战高效部署分布式消息队列.pdf+rabbitmq学习手册.pdf

    - **集群部署**:多个RabbitMQ实例组成集群,提高可用性和扩展性。 - **高可用集群**:通过Erlang分布式的特性,实现无单点故障的集群。 - **网络分区容错**:使用 Federation 插件和 Shovel 插件进行跨集群的...

    RabbitMQ实战-随书源码

    - **节点与集群**:RabbitMQ服务器可以单机运行,也可以组建集群,实现高可用性和负载均衡。 - **Exchange**:消息的路由中心,根据预设的绑定规则将消息分发到相应的队列。 - **Queue**:消息的存储容器,消费者...

    RabbitMQ实战.高效部署分布式消息队列.rar

    1. **节点(Nodes)**:RabbitMQ服务器的实例称为节点,可以是单机或集群模式,提供高可用性和容错性。 2. **虚拟主机(Vhosts)**:类似于Unix系统的目录,用于隔离不同的应用或用户,提供安全策略管理。 3. **...

    RabbitMQ安装说明文档.zip

    - **工作队列**: 工作队列模式常用于负载均衡和并发处理,多个消费者可以从队列中取出并处理消息。 - **持久化**: 通过设置消息和队列的持久化,可以在RabbitMQ重启后保持数据,确保消息不丢失。 - **集群**: 多个...

    rabbitmq笔记整理

    1. **节点(Node)**:RabbitMQ服务运行的实例,可以是单机或集群模式。 2. **交换机(Exchange)**:根据预定义的路由规则,负责将消息分发到正确的队列。 3. **队列(Queue)**:存储消息的容器,消息在此等待被消费者...

    Java思维导图xmind文件+导出图片

    Nginx反向代理服务器及负载均衡服务器配置实战 利用keepalived+Nginx实战Nginx高可用方案 基于Nginx实现访问控制、连接限制 Nginx动静分离实战 Nginx Location ReWrite 等语法配置及原理分析 Nginx提供https...

    人群

    5. **负载均衡**:在处理人群请求时,负载均衡技术是必不可少的。Nginx、HAProxy等工具可以将请求分发到不同的服务器,防止单一节点过载,提升整体服务的可用性和响应速度。 6. **数据库优化**:优化SQL查询,合理...

Global site tag (gtag.js) - Google Analytics