RabbitMQ集群方案

目录

1.集群方案的原理

2.单机多实例部署

3.RabbitMQ镜像集群配置

4.负载均衡-HAProxy

4.1 安装HAProxy

4.2 配置HAProxy


实际生产应用中都会采用消息队列的集群方案,如果选择RabbitMQ那么有必要了解下它的集群方案原理

一般来说,如果只是为了学习RabbitMQ或者验证业务工程的正确性那么在本地环境或者测试环境上使用其单实例部署就可以了,但是出于MQ中间件本身的可靠性、并发性、吞吐量和消息堆积能力等问题的考虑,在生产环境上一般都会考虑使用RabbitMQ的集群方案。

1.集群方案的原理

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

2.单机多实例部署

由于某些因素的限制,有时候你不得不在一台机器上去搭建一个rabbitmq集群,。真实生成环境还是要配成多机集群的。有关怎么配置多机集群的可以参考其他的资料,这里主要论述如何在单机中配置多个rabbitmq实例。

主要参考官方文档:Clustering Guide — RabbitMQhttps://www.rabbitmq.com/clustering.html 首先确保RabbitMQ运行没有问题,能看到这个页面就ok

 然后,停止rabbitmq服务

systemctl stop rabbitmq-server

启动第一个节点:

[root@localhost ~]# RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management listener [{port,15673}]" RABBITMQ_NODENAME=rabbit1 rabbitmq-server start

              RabbitMQ 3.6.5. Copyright (C) 2007-2016 Pivotal Software, Inc.
  ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
  ##  ##
  ##########  Logs: /var/log/rabbitmq/rabbit2.log
  ######  ##        /var/log/rabbitmq/rabbit2-sasl.log
  ##########
              Starting broker...
 completed with 3 plugins.

启动第二个节点:

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

              RabbitMQ 3.6.5. Copyright (C) 2007-2016 Pivotal Software, Inc.
  ##  ##      Licensed under the MPL.  See http://www.rabbitmq.com/
  ##  ##
  ##########  Logs: /var/log/rabbitmq/rabbit2.log
  ######  ##        /var/log/rabbitmq/rabbit2-sasl.log
  ##########
              Starting broker...
 completed with 6 plugins.

结束命令如下:

rabbitmqctl -n rabbit1 stop
rabbitmqctl -n rabbit2 stop

rabbit1操作作为主节点:

[root@locahost ~]# rabbitmqctl -n rabbit1 stop_app  
Stopping node rabbit1@super ...
[root@locahost ~]# rabbitmqctl -n rabbit1 reset	 
Resetting node rabbit1@locahost ...
[root@locahost ~]# rabbitmqctl -n rabbit1 start_app
Starting node rabbit1@locahost ...

rabbit2操作为从节点 :

[root@locahost ~]# rabbitmqctl -n rabbit2 stop_app
Stopping node rabbit2@locahost ...
[root@locahost ~]# rabbitmqctl -n rabbit2 reset
Resetting node rabbit2@locahost ...
[root@locahost ~]# rabbitmqctl -n rabbit2 join_cluster rabbit1@'localhost' ###''内是主机名换成自己的
Clustering node rabbit2@locahost with rabbit1@super ...
[root@locahost ~]# rabbitmqctl -n rabbit2 start_app
Starting node rabbit2@locahost ...

3.RabbitMQ镜像集群配置

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

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

**设置的镜像队列可以通过开启的网页的管理端Admin->Policies**

  • Name:策略名称

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

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

4.负载均衡-HAProxy

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

4.1 安装HAProxy

//上传haproxy源码包
//解压
tar -zxvf haproxy-1.6.5.tar.gz -C /usr/local
//进入目录、进行编译、安装
cd /usr/local/haproxy-1.6.5

//编译成Linux 3.10内核使用  //rpm -q kernel 查看内核的命令
make TARGET=linux31 PREFIX=/usr/local/haproxy


make install PREFIX=/usr/local/haproxy
mkdir /etc/haproxy

//创建haproxy配置文件

vi /etc/haproxy/haproxy.cfg

4.2 配置HAProxy

配置文件路径:/etc/haproxy/haproxy.cfg

#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 xxx.xxx.xxx.xxx:5673 check inter 5000 rise 2 fall 2
        server node2 xxx.xxx.xxx.xxx:5674 check inter 5000 rise 2 fall 2

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

注意讲XXX替换为ip,然后启动HAproxy负载

/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg
//查看haproxy进程状态
ps -ef | grep haproxy

访问如下地址对mq节点进行监控
http://xxx.xxx.xxx.xxx:8100/rabbitmq-stats

代码中访问mq集群地址,则变为访问haproxy地址:5672即可

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RabbitMQ 提供了一种高可用性的集群解决方案,通过将多个 RabbitMQ 节点组成一个集群来实现。 在 RabbitMQ集群中,每个节点都是一个独立的 RabbitMQ 服务器,它们之间通过网络进行通信和数据同步。集群中的节点可以在同一台物理服务器或不同的物理服务器上运行。 以下是 RabbitMQ 集群的一些关键特点和实现方式: 1. 数据复制和同步:在集群中,消息、交换器、队列等对象会在所有节点之间进行复制和同步,以确保数据的一致性和可用性。当一个节点接收到消息后,它会将消息复制到其他节点上,以实现数据的冗余备份。 2. 负载均衡:集群中的消息会自动在各个节点之间进行分发和负载均衡。当一个节点接收到消息时,它会根据一定的策略将消息分发给其他节点,以实现消息的平衡处理和提高系统的吞吐量。 3. 高可用性:如果集群中的某个节点发生故障或宕机,其他节点可以接管其工作,并继续提供服务。这种故障转移机制确保了系统的高可用性和持续可靠的消息传递。 4. 集群模式:RabbitMQ 提供了两种集群模式,即镜像队列模式和队列分区模式。镜像队列模式将队列的消息复制到集群中的所有节点,以实现数据的冗余备份。队列分区模式将队列的消息分散到不同的节点上,以提高系统的吞吐量和并发性能。 需要注意的是,RabbitMQ集群配置需要正确地进行节点配置、网络设置和集群连接等,以确保集群的正常运行和数据的一致性。同时,集群配置还需要考虑到负载均衡、故障转移和性能调优等因素,以满足具体业务需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值