深入浅析RabbitMQ镜像集群原理 - 网站

深入浅析RabbitMQ镜像集群原理

分类:Erlang · 发布时间:2021-09-10 16:51 · 阅读:10508

当单台 RabbitMQ 服务器的处理消息的能力达到瓶颈时,此时可以通过 RabbitMQ 集群来进行扩展,从而达到提升吞吐量的目的

集群架构

RabbitMQ 集群是一个或多个节点的逻辑分组,集群中的每个节点都是对等的

每个节点共享所有的用户,虚拟主机,队列,交换器,绑定关系,运行时参数和其他分布式状态等信息。

一个高可用,负载均衡的 RabbitMQ 集群架构应类似下图:

在这里插入图片描述

这里对上面的集群架构做一下解释说明:

1)首先一个基本的 RabbitMQ 集群不是高可用的

虽然集群共享队列,但在默认情况下,消息只会被路由到某一个节点的符合条件的队列上,并不会同步到其他节点的相同队列上。

假设消息路由到 node1 的 my-queue 队列上,但是 node1 突然宕机了,那么消息就会丢失

想要解决这个问题,需要开启队列镜像,将集群中的队列彼此之间进行镜像,此时消息就会被拷贝到处于同一个镜像分组中的所有队列上。

2)其次 RabbitMQ 集群本身并没有提供负载均衡的功能

也就是说对于一个三节点的集群,每个节点的负载可能都是不相同的,想要解决这个问题可以通过硬件负载均衡或者软件负载均衡的方式

这里我们选择使用 HAProxy 来进行负载均衡,当然也可以使用其他负载均衡中间件,如LVS等。

HAProxy 同时支持四层和七层负载均衡,并基于单一进程的事件驱动模型,因此它可以支持非常高的井发连接数。

3)接着假设我们只采用一台 HAProxy

那么它就存在明显的单点故障的问题

所以至少需要两台 HAProxy ,同时这两台 HAProxy 之间需要能够自动进行故障转移,通常的解决方案就是 KeepAlived 。

KeepAlived 采用 VRRP (Virtual Router Redundancy Protocol,虚拟路由冗余协议) 来解决单点失效的问题

它通常由一组一备两个节点组成,同一时间内只有主节点会提供对外服务,并同时提供一个虚拟的 IP 地址 (Virtual Internet Protocol Address ,简称 VIP) 。

如果主节点故障,那么备份节点会自动接管 VIP 并成为新的主节点 ,直到原有的主节点恢复。

4)最后,任何想要连接到 RabbitMQ 集群的客户端

只需要连接到虚拟 IP,而不必关心集群是何种架构。

搭建集群准备:

1、准备3个虚拟机

 vi /etc/hostname   #修改虚拟机名称  node1  node2  node3 
虚拟机(机器)名称node1node2node3
ip192.168.0.101192.168.0.102192.168.0.103
安装Erlang+RabbitMQErlang+RabbitMQErlang+RabbitMQ

2、设置node1、node2、node3的hosts

 vi /etc/hosts  #修改虚拟机hosts  node1  node2  node3 

文件内容:

 192.168.0.101 node1 192.168.0.102 node2 192.168.0.103 node3 

安装Erlang:

由于RabbitMQ是基于Erlang(面向高并发的语言)语言开发,所以在安装RabbitMQ之前,需要先安装Erlang。

1.选择Erlang和RabbitMQ版本,这里选择RabbitMQ3.9.x、Erlang24.0,查看对应版本   

2.Erlang官网下载Github下载

在这里插入图片描述

3.更新基本系统,安装任何软件包之前,建议使用以下命令更新软件包和存储库

 yum -y update 

4、安装 tar

 yum install -y tar 

5、首先要先安装GCC、 GCC-C++、 Openssl等依赖模块:

 yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel 

6、再安装ncurses模块

 yum -y install ncurses-devel yum install ncurses-devel 

7、将安装包拷贝到linux下:

在这里插入图片描述

8、解压ErLang安装包

 [root@node1 /]# cd /usr/local/  #先切换到安装包目录 [root@nodel local]# ls  #查看文件 bin  etc  games  include  lib  lib64  libexec  otp_src_24.0  otp_src_24.0.tar.gz  sbin  share  src [root@nodel local]# tar -xvf otp_src_24.0.tar.gz  #解压文件 

9、创建安装的目录/usr/local/erlang

 [root@node1 local]# mkdir erlang [root@node1 local]# ls bin  erla                    
        
标签:
RabbitMQ 镜像集群

相关文章

Erlang中的匹配模式总结

这篇文章主要介绍了Erlang中的匹配模式总结,本文讲解了赋值时匹配、流程控制中的匹配、消息传递匹配等内容,需要的朋友可以参考下

Erlang并发编程介绍

这篇文章主要介绍了Erlang并发编程介绍,本文讲解了进程的创建 、进程间通信、超时设置以及给出代码实例,需要的朋友可以参考下

Erlang IO编程之文件目录操作常用方法小结

这篇文章主要介绍了Erlang IO编程之文件目录操作常用方法小结,本文讲解了常用的文件操作如打开文件、读取文件、写入文件、删除文件等,需要的朋友可以参考下

Erlang中的函数与流程控制介绍

这篇文章主要介绍了Erlang中的函数与流程控制介绍,本文先是讲解了函数的一些知识,然后讲解了case语句和if语句及算术表达式等内容,需要的朋友可以参考下

Erlang中3种生成随机数的方法

这篇文章主要介绍了Erlang中3种生成随机数的方法,它们分别是random:uniform()、erlang:now()、crypto:strong_rand_bytes(N),需要的朋友可以参考下

返回分类 返回首页