00:00
好,接下来呢,大家思考一个问题哈,在生产环境当中,如果leader或者follower挂了怎么办呢?你说不管你是leader挂了还是偷挂了,那他在底层他是怎么做的呢?好,那下面呢,我们来看一下具体的原理哈,双击打开。打开之后啊,首先映入我们眼帘的呢,是三台。这里面有对应的leader follow follow,还有呢,接收到了对应的数据,那为什么这个leader和follow的数据啊,没有对齐呢?大家思考一个问题,咱们说副本当中leader它是负责跟生产者和消费者进行直接交互的,那所有的呢,都是从这呢进行拉取数据进行同步。那就有一个时间先后的问题,比如说leader呢,他是先收到数据。那很显然它的数据啊就要多一些,那你follow呢就要少一些啊,就会出现这种情况啊好,那上面呢这块呢是对应的IR,那目前表示0123台服务器正常启动啊。
01:04
那介绍完这个之后,首先看第一个概念啊,这里面介绍两个概念。第一个概念呢,叫Leo,叫log end offset,比如说最后一个日志的offset,那啥意思呢?说每个副本最后一个offet。那你看这个最后一个offet,最后一个offet,大家再往后看,说Luo呢,其实是最新的offset加一啊,其实这个相当于这个数组的概念啊,比如说01234567,排到这儿呢,你认为是七七实数是八个数据啊,哎,是八个数据啊。行,那其实呢,Leo就是每个副本当中最后一个ET加一。哎,这是它的命名,那下面来看另一个概念,叫高水位线,叫嗨,Water。那这个呢,就是所有负数当中最小的Luo。那你看一下谁最小,是不是它最小,那它最小的话就相当于是,诶大家都有的是四,那对应的这个HW是谁呢。
02:07
其实啊,它就是每一个负数当中最小的Leo,那Leo是不是最后一个offset加一啊,那就对应的就是啊五这块就是aw。啊,就这意思啊,比如说在你最低的共有的这个up后面加上一个一,就是这个还用什么啊是他啊,那大家思考一个问题啊,那么消费者能够见到的。最大的一个up是谁呀?哎,其实它能够见到的最大的奥赛是不是这个四啊,比如说这个这个高水位线啊,比它少一个对应的那个奥赛,也就是说这个高水位线比它低一个的那个offset减一是不是啊,因为你这个高水位线不是五吗?那五的话比五少一,那不就是四嘛,也就说消费者能够看到的最大的奥赛的就是这个四。这个呢,要理解一下啊。那下面来看这个问题,那么如果这个情况下呢,Follow挂了。
03:03
那会出现什么情况?那假设呢,我们现在假设他挂了。好了,他挂了之后,第一件事儿就是会把他从那个isr队列里面踢出去。是不是这样啊,诶把它踢掉。那踢掉之后,那你这个博零和博一上的leader和for是不还能够正常工作呀,那你正常工作就继续接收出去呗。那你只要接受数据,它对应的HW和对应的Leo是不是最后往往后走啊,那好,那你看它的Leo呢,就这个位置,它的Leo是这个位置。那么当前这个,呃,高水位线呢,是谁呢?哎是它是不是加一啊,说到这个八这个位置啊,到这个位置。行,那走到这儿,那这个风路不可能一直挂,哎正常,比如说挂了之后啊,那我们可以把它再启动,那启动之后它如何来恢复后续的一个工作呢。
04:00
那这时候要注意他这样做的啊,首先第一个。恢复了。他会先把高于自己之前水位线的部分给它删掉,看这块儿,比如说follow会读取本地磁盘记录上次的HW,这不知道上次的HW吗?那并将log文件高于HW部分截取掉,删掉,因为他认为这个呢是没有验证过的数据,是要把它干掉的。那从HW开始向后进行同步,比如说从这呢开始跟他们进行一个同步,好往后走,你看那现在呢,假如说我追到了哪儿呢?追到了你的水位线。比如说七加一这块追到这追到这儿的话,相当于什么呢。哎,相当于我达到了一个基本的水平了,知道吗?那这时候我就可以重新的加入到这个IR队列。那这时候咔,我就恢复过来了,哎,这就是整个这个过程哈。行,那我稍微再回顾一下啊,大家再回顾一下。
05:03
你说在这个过程当中follow挂了,挂了之后第一件事儿先从这个IR队列里面踢出去啊,这是没啥说的啊踢。踢掉之后,那不能因为你的不存在我就不工作了,那他继续会接收后续的数据,那么对应的HW和Leo也会往后走好。那么我这个follow呢,哎,故障处理完毕之后,我希望能够归队恢复,那恢复的时候呢,你要把以前没有经过校验的,因为这是经过校验干掉。哎,干掉干掉之后呢,继续接收新的数据,直到达到这个高水位线这个位置之后,那我们就可以。哎,就可以恢复到IR队列了,恢复。啊,这就是整个这个附故障我们的处理步骤哈。
我来说两句