00:00
接下来我们再来测试一下re MQ的集群。首先我们来说reda MQ呢,它是使用online语言开发的,它做集群起来呢非常方便,这是因为这个语言的特性,当然我们这个集群呢,它不支持我们的这个负载均衡,但如果想要负载均衡,需要我们自己来结合NG来做一个负载均衡就行了。在我们这个re MQ集群里边,我们常见的两种集群是这样的,一个是它普通模式,默认的集群模式,还有一个镜像模式,这两个有什么区别,我们先说re MQ这个集群里边呢,节点包含我们这么几种节点,一个呢叫内存节点,想我们这个消息呢,现在在内存里边来进行存储的,另外一个是我们的磁盘节点,像面这个消息呢,可以来持久化存储的,而我们整个集群里边呢,至少得有一个磁盘节点,相当于我们一个持久化节点,最终能持久化我们消息的,但是如果是我们这个普通模式下,集群呢,是怎么样的?所以如果是我们这个普通模式。
01:04
MQ假设呢,我们现在有三个,然后我们这个MQ,我们这个集群之间,它呢会同步什么?它只会同步我们这个MQ消息里边的一些原数据,它的对队列是什么,Exchange交换机是什么,但队列里边的真正内容在我们这个普通模式下,它是不会同步的,那如果对于我们这个消费者来说。我们现在呢,A节点,假设我们现在这个re MQ有一个消息进来,被他的这个队列收到了,但是呢,BC都做了,这个跟A做成了一个集群,我们从B里边要进行消费,或者从C里边消费,怎么办呢?我们这个remit MQ啊,他们就会从A里边把这个消息拉出来,然后呢,放到C里边,然后再交给你,这就是我们这么一个过程,那这个过程呢,我们其实大家会发现一个问题,就是它无法解决我们的这个单点故障问题,如果A节点出现了故障,我们这个消息呢,直接就没有了,所以我们现在这种普通模式,我们一般呢,在生产环境,不用在我们生产环境呢,我们一般都是使用镜像模式,镜像模式呢,能保证我们消息的百分百不丢失,我们这个消息可靠可靠性,特别是对于我们这些下单等等这些库存场景,我们都需要使用这个镜像模式,镜像模式跟我们这个普通模式不一样的式ABC。
02:29
单台rabbit MQ他们里边的无论是我们MQ的这些原数据信息,还是它队列里边的内容,他们呢都是需要来进行同步的,也就是他们是一模一样的,你是我的镜像,你是他的镜像,这是我们说的镜像模式,那在我们这个镜像模式的情况下,首先我们这个消息呢,只要一进A,它会主动的在BC之间来进行一个同步,而且呢,这种模式下,我们的整个镜像队列,它呢也都有一套自己的选举算法,我们这个镜像队列ABC3个人,然后呢,我们可以选他为一个MAS,剩下几个人都是Li,然后我们的生产者和消费者的所有请求都会转向马,所以这个BC呢,相当于对A是来做的一个备份,这是我们说的这个镜像队列,如果我们这个master挂掉了,然后呢,我们BC就会有人重新升级为我们的这个master,而且呢,我们说如果想要。
03:29
搭建我们这个镜像模式,首先我们得搭建出普通的集群模式,然后我们再来告诉普通集群使用镜像模式来进行整个集群操作就行了,所以们现在呢,来搭建一下我们rabbit MQ的集群,那这个搭建呢,我们来遵询我这个文档下边的这个步骤,好,我先来做第一步,我们给my data我们的文件夹里边创建一个re MQ,在这个文件夹里边呢,我们再来创建我们三个re MQ节点来准备来做我们的整个集群,好,我现在来来到我们这个玛里边,我们来运行这三句话,走LS,我们现在呢,就在re MQ这个里边,然后呢,我们现在创建了三个MQ 0123,诶我们这三个这个队列呢,现在准备好,然后我们接下来启动上三个MQ就行了,你这个启动呢,跟以前的这个方式基本都是一模一样的,比如我们这个是用这个命令docker run-D,以后台方式运行。但我们现在。
04:29
启动的时候呢,给它指定了一个host name,相当于这个主机名,然后我们可以使用主机名也能连上我们的re MQ,好,现在呢,我们来给每一个启动上主机名,我们后来要用到,然后呢再来加上杠杠name,杠杠name呢就是给我们当前来起一个名字,这个叫re mq1,那我们之前装的这个rabbit MQ我们可以给大家看一下docker PS,我们之前装的这个rabbit MQ呢,它的这个名字就叫rabbit MQ,那么现在呢,叫re mq0102033个,好,然后杠V我们来进行挂载,把re MQ里边的这个数据我们都来挂载到re MQ这个零一文件夹里边,然后杠P暴露端口,这个端口呢,首先这个15672,然后呢,我们这个5672,我们这个端口来暴露出来,当然我们这个东西呢,已经被占用了,所以我们现在从15673开始和5673开始,那么之前有一个MQ了,那。
05:29
外界的15673映射我们的这个15672和5673映射5672,这个15673是我们web界面端口,而5672这个东西呢,是我们集群之间的通信端口,然后再接下来杠一指定一个参数,这个参数特别重要,叫rabbit MQ along cookie,相当于每一个re MQ都有一个cookie值,这个值呢,你随便填,叫at硅谷,然后呢,我们第二集群的时候,三个节点他们都得有一个相同的cookie,这就像一个令牌一样,这样呢他们才能互相信任,互相通过。然后我们的这一块,接下来我们再来以这个镜像,我们来启动我们整个容器,这是我们的第一个,第二个也要我们这个15673,那我们现在就来晋升到15674。
06:16
第二个呢,所有的启动过程都跟第一个是一模一样的,保证cookie跟第一个一模一样,但第二个多了一个就是叫杠杠link,就是呢,我们相当于告诉第二个可以呢去来访问第一个,这是rabbit mq01,现在我来访问它,给它起一个别名还叫rabbit mq01,相当于我们是使用网络连接,这两个呢能进行访问,然后呢,第三个也一样,第三个呢,现在晋升到这个15675,这个呢5675,第三个呢,跟我们第一个的配置也一模一样,除了我们这数据挂载cookie以外,那现在呢,能连接上第一个,也能连接上第二个,相当于第三个与一二都能通信,那么现在呢,就来准备创建我们这三个MQ,好,我先来创建第一个CRC。
07:07
来到这来进行粘贴回车,那第一个软MQ创建成功docker PS来看一下。现在我们第一个的re MQ,那就是这个我们叫re mq015671和15671,我们主要呢,暴露的是这个是5673和15673,我们这个15672端口,我们后来的外表界面所我们来这个呢已经暴露出来了,那第一个我们就准备好了,第二个我们来把第二个呢直接复制过来。Do run,我们又启动了一个rabbit MQ来,直接来进行回车,走第二个启动起来以后呢,我们再来启动第三个rabbit MQ来到这。CTRLC,好,我们来启动第三个re MQ走,那么现在呢,三个re MQ我们都来准备就绪,Docker PS来看一下那三个rabbit MQ,然后呢,分别是15673 15674和15675,那现在来访问测试一下。
08:07
好,那么现在来从我们的这个15673开始,这是我们15673的,然后呢,15674。我们来15674的,还有我们这个15675,那现在呢,有这么三个管理界面,那每一个人里边他的这些交换机队列,这都是呢,他自个儿默认的,好,现在呢,这三个节点我们都来准备好了,那准备好了以后。接下来我们就来配置集群,第一步我们先来创建了三个节点,然后我们想要让节点加入集群也非常方便,那先来进入rabbit MQ这个零一。我们进入零一以后呢,先把这个零一,我们使用这个re MQ ctrl,就是这个命令,我们来把零一的相关信息,我们来初始化一下,好来进入零一走。那进入零一以后呢,我们现在有一个叫rabbit,我们的这个rabbit MQ的这个controltrl,这个CTRL这个命令呢,可以来帮我们操作我们这个re MQ当前节点,比如现在来先来操作我们的第一个,我们可以把它所有的这个数据,我们在这呢,有一个叫stop APP,我们先来暂停一下我们当前的这个应用,然后呢,我们再来把应用整个初始化,所有的这些命令在这一块呢,我们都能找到这一块,比如有stop APP start APP,好们现在第一个那们先来停掉我们这个当前的这个re MQ,好,那么这个呢,Stop停掉了以后,接下来,而且呢,当前这个rabbit是在RABBIT01这个里边,因为我们之前设置了host name停掉了以后呢,接下来我们让当前的这个rabbit MQ来初始化,相当于reset,把它呢,相当于刚新装了一样,出厂设置一下,好,我们现在这个reset重新调整了以后,这。
09:55
第二个重新调整了以后呢,接下来第三个我们让他呢再来启动。
10:01
好,现在呢,我们相当于把我们第一个re MQ的节点,我们现在给它清空初始化,然后呢重新启动起来,那重新启动起来以后,我们接下来再来启动我们第二个rabbit MQ,那么第二个rabbit MQ呢,我们来进入我们的零二,第二个跟第一个不同的是第二个要加入集群,所以呢,它的这个配置是这样子的,那先来stop当前,然后呢把它也重置一下,最后呢,我们让它加入到我们的rabbit MQ这个零一整个这个集群里边CTRLC,所以我们现在先来第一个stop来先给它停掉。走stop APP,然后呢,第二个我们也把它这个reset重置一下,但这两步呢,你可以先停掉重置呢,如果你是刚新装的,可以没必要重置,好那现在再来重置一下,重置好了以后呢,接下来我们来让他加入到rabbit mq1的这个集群里边,好,那现在让他来进行一个加入微车,我们让他来加入这个集群。
11:05
然后呢,我们看到closer node,我们这个当前的零二节点已经呢,已经加入到零一这个节点集群里边了,那接下来我们就可以来启动我们这个零二。好,我们这个零二呢,相当于在这就配置好了,然后呢,我们再来配置零三,来看一下exit,好,退出配置零三,零三也一样来加入到我们这个零一里边,我们来进入零三这个节点,好,我们来进入零三走。那进零三这个节点以后呢,我们来同样运行我们以前的这些命令,应办是办式都是一样的,好,我们先来停止我们当前这个节点运行情况啊,把它先停掉,然后呢,我们再来重置,同样的我们来让它再来加入集群,好这一块呢重置,然后呢,我们再让它加入集群,相当于我们这个re mq1,这就是一个当前的主节点,走现在我们加入到re mq1整个集群,那加入完了以后呢,我们把当前应用启动一下。
12:09
那启动成功以后,我们可以来退出我们这个控制台。好,我们在这exit我们退出,相当于三个MQ都加到集群里边,我们来测试一下,随便来访问一个,比如15675,我来刷新来看它这个O5U,我们看到这三个节点010203,我们都准备好了,而且呢大家注意。这个零一呢,它是一个DSC是我们的磁盘节点,然后零二零三都是一个RAM,我们的内存节点,这个呢,默认现在是一个普通集群,这个普通集群呢会出现单点故障,如果我们这个零一宕机了,磁盘里边的这些持久化数据那就都没有了,所以在基于这个普通集群的基础上,我们可以再把它改造成一个镜像集群,那这个镜像集群怎么改造们非常简单,随便来进入一个我们这个容器里边,我们比如现在就进入到master里边,好,我们现在就进入到master,随便进哪个都行。来进到master里边以后,将下来我们要做的事情就是使用MQ的这个controltr了,Set policy,我们来设置一个策略杠P,杠P呢我们就来设置,设置哪个虚拟主机杠,那就是当前我们这个虚拟主机是杠,然后呢,我们设置设置一个策略,给这个策略呢起一个名,我们现在叫ha,就是高可用这个策略。
13:32
然后这个策略呢,我们现在又写了一个这个监科号,这个上监括号,然后呢,它代表是我们这个v host,这个虚拟主机下所有的这些队列,所有的这些设置,然后呢,H ha Mo,哦,那就是所有的以什么开头的,这个括号以什么开头,如果我写一个尖括号,那就是所有的队列都要进行一个ha Mo的,哦,那就是所有的队列都是高可用的模式,所以呢,我们现在就是我们要做的镜像模式,然后呢,包括我们这个同步,同步呢都是自动让MQ,进行同步的,所以我们来设置一下它,如果我们现在来指定我是让哪个虚拟主机下,比如我们自己来,还除了杠外,我们还建了一些虚拟主机,那在杠P后边这个杠呢,我们就可以不写杠了,写成我们自己的虚拟主机,包括我们想要设置哪个队列,这个队列呢?我们这个监康号是来所有队列都适配的,那如果我写一个监康,哈哈,那就代表。
14:32
所有以hello开头的们这个队列呢,需要来做我们整个镜像设置好,现在呢,我就把这一块我来CTRLC复制一下,我们所有队列都要做整个的高可用镜像,好把这个命令我们在这直接一粘贴,当然这个命令从这个rabbit ctrler,这个help直接就能得到我们所有要用的这个命令提示走,那现在让他给我们来设置上这么一个策略,而这个策略只要设置好了以后,我们看到它的提示setting pro c,我们设置了一个策略,策略名呢叫ha for,是为我们这个监客号,我们这个模式这种匹配情况下,我们设置的这个匹配呢,就是所有的队列,然后呢,设置成什么,就是这个HM的哦,我们的整个高可用镜像队列模式,然后呢,自动同步with property,我们的这个优先级零,然后呢,For host,我们现在是为这个杠这个v host来做的整个设置,那这个设置好了以后我们就可以。
15:32
来退出我们的这个MQ,包括呢,你这个设置好了以后,你还可以确认一下,你查一下你当前的这个策略,可以使用这个命令叫rabbit MQ ctrl list来查出我们所有的这个策略,查出哪个虚拟主机下的策略来写一个杠,我们这个策略呢,就可以查出来,我们现在有一个ha这个策略没问题,我们的优先级零,那这一块呢,都是设置好的,那现在这一块准备好以后,我再来刷新走。
16:03
来刷新以后呢,我们现在整个这个集群就会变成一个我们的整个镜像的这个集群,那我们怎么来验证这个事情很简单,那现在呢,在re mq1这是一个我们的master,那在它里边我如果来创建上一个队列好,那这个队列呢,比如我们就叫hello,我们这个队列创建好这个队列呢是持久化的,我们现在创建到rabbit MQ这个一里边来点一个添加我们这个队列呢,创建好以后,我们来看在我们的这个其他re MQ里边有没有,比如们来看re mq3点进来它的这个队列里边,诶发现有这个re mq1的这个hello队列,我这镜像队列呢是有的,然后呢,我们再来给队列里边发一个消息,你们看行不行,比如来到这个re mq1里边,然后呢,我们给这个队列里边来发布上一个消息来点进哈,然后呢,我们来调用它的publish,我们现在来随便发一个消息,这个消息的内容呢,诶,它是一个持久化消息。
17:03
来点一个发布这个消息,发布过来以后呢,我们来看其他的这个re MQ有没有来到re mq2里边或者三里边都行,来点进来,诶我们发现在这个里边呢,确实其实是是有一个消息的,我们也可以来进来进行消费,来点进这个hello队列,点进这个hello队列以后呢,我来进行消费这个消息,如果我一旦把这个消息在这来消费了以后,我们现在来消费,并且呢给他AC开了,相当于回复了。回复了以后呢,们这个消息就没了,我们在这儿消费,那消费了以后呢,再要消费没消息了,那这样呢,我们其他集群都能同步到这个状态,比如re密MQ3里边这个队列里边呢,已经没这个消息了,没问题,然后呢,再来加上我们的这个rem mq2里边这个队列里边也没有这个消息了,也没问题,所以呢,我们现在这块我们也能看到这是一个ha,那相当于应用了我们这个ha策略,我们整个镜像队列我们就来测试成功了,这是我们的rabbit MQ集群。
我来说两句