00:00
好,接下来呢,我们就来看一下主K分非常重要的选举机制,绝对的面试重点。那主会员选举呢,其实它是比较复杂的,它分第一次启动的时候,它是如何来选举出来leader,以及呢,这个leader已经工作了之后,他突然挂了,那二次选举,甚至三次选举,那么他这个leader又是怎么选举?那它是不一样的,好,那我们先来看一个最基本的,比如说服务器刚启动的时候,它是怎么选择老大呢。一个这是主key service对吧?哎,好,那我们假设呀,这个主key service集群里面有五台服务器,OK吧,现在呢,是由第一台服务器闪亮登场,它启动。那启动之后,他就要发起选举,那每一台服务器都有一个选票。那这个选票投给谁呢?每个人都是自私的,先把这个票啊投给自己。投给自己以后,以后他要判断判断什么,判断他自己手里的选票有没有超过总集群个数的一半,那集群一半就300。
01:07
哎,你说选票有没有大于三,那当前你刚启动一个,是不是肯定不够三票啊。那不够三票,那这台服务器就要保持一个状态,既不是leader,也不是follow。那接下来他就等着呗。那第二台服务器又来了,对吧?哎,SERVE2,它的麦D呢是二。那第二台服务器启动之后,他要再一次他也要。选举对吧,投票那他是干嘛的呢?他也是自私的,他首先呢,把这个选票啊投给自己,投给自己。那好,那整个集群当中,服务器一一票,服务器二也是一票,那如果再来个三,他也投给自己的话,是不是始终就选举不出来老大了。那怎么办呢?哎,他们会相互去传递自己的选票,就是把选票传给对方。那投给对方之后。那比如说我把这个选票投给他,投给他之后,他就会判断他的麦D和传过来选票,这个麦D他俩谁的。
02:07
谁大的,那比如说你传来这个二,给他传来,你发现啊,对方传了选票,你的麦D比我大,那怎么办?它自动将自己的选票投给大的这个麦迪。OK吧,那你说他会这样操作。把自己的选票投给了二。那二的话是不是就两张选票了好。那大家判断一下,两张选票有没有达到半数?是不是还是没有半数,那怎么办?那仍然保持如屏状态。那现在呢,服务器一服务器二都是毒品。爱观察着对吧?好,那接下来第三台服务器闪亮登场。那他的麦呢,是三。对吧,那同样道理,他启动之后,他是不是也要发去选票啊,那他干什么事儿呢?它也是要先投自己一票,自己有一票,然后呢,你这个SERVE2是不发过来选票,你这是两票。
03:02
他的麦ID是不是也小于他呀,哎,那就把这个选票通通都归给投给这个麦ID比较大的服型。那这样的话,整个集群当中,这个S3他就拿到了三张选票,那三张选票是不是就大于了。半数对吧,整个集群舞台嘛。那他要干一些什么事呢?他马上就会,诶选举出来leader,那其他服务器自动变为菠萝。就是这样的一个选举过程。那现在老大有了,那老大有了之后,那集群有可能还在启动一台服务器。对吧,哎,那这个SERVER4有可能会启动。那他启动之后,他其实也会选举,那他还是先选举,哎,自己选给自己。选给自己之后,然后他会把选票发给别人,对吧,来相互发,那同学说那你这是四的话,那这个leader会不会把这个老大让给他呢,对不起。
04:01
不会,一旦集群当中产生了老大。别人谁想来?那都不好使,对不对,哎,比如说这个四起来之后,他能不能把这个老大拿走呢,拿不走。它自动变为俘虏,你说只要集群当中已经有了老老大了,后来的那都得靠边站。那接下来再往下走,那第五台服务器启动之后,那规则也是一样的啊,有同学说这个第五台服务器我很厉害,对不对,哎,我这个麦D特别大,我有没有机会呢?老大没有。这几点有了,那其他人都没有机会。那除非这个leader他挂了之后,那其他的节点才可以再次选举的时候,有机会当成这个机群的leader对吧?哎,这是第一次启动啊,是这样一个空选举过程,他们呢,都是先选自己,选完自己之后呢,发现啊选完之后这个他的选票不够,那就会把这个选票啊投给麦D比较大的节点。
05:02
那这是第一条投给麦D比较大的,第二条呢,就是一旦leader选举成功之后,其他节点自动变成暴露状态。然后再次启动的这个节点。那么他们也只能服从对应的力。OK吧,好,那下面呢,再给大家交代几个概念。这呢是客户端,客户端呢可以操作对应的服务,对吧,那每一次操作,尤其是写服务的话,是不是有一个j sidd啊,也叫事务ID。哎,它是事物类型的,之前我们讲它特点的时候啊,说过一句对吧,那下面有三个概念,第一个概念叫sid。什么叫ID?也叫服务器ID,它和谁一样呢?和这个MY是一致的。记住哈,这是服务器的编号,类似于身份证。对吧,诶,每一个服务器的唯一标识啊。那叫下一个呢,叫zidd,那z sidd干嘛呢?它叫每一次操作集群,哎的更改集群状态的。
06:04
操作,那就是一个事物。会形成对应的是YD。啊,一个是操作集群的事务ID,一个是服务器自己的编号,那还有一个概念。还有一个概念叫。那它是每一个任期的代号。怎么理解?你想啊,当前这一时刻是服务器三他当了老大了。他当老大,那他后续发生,呃,这个创建的这些事物啊,啊,或者一些全局的这个编号啊,是不是得由他来统一发布啊,举个简单例子,比如说秦始皇,秦始皇的时候,他说有一个秦始皇自己的编号,然后到唐太宗啊,唐太宗有自己的编号,然后唐玄宗,唐玄宗有自己的这个年号,对吧?啊年号。好啊,你说谁当老大之后呢,会重新发布啊,这个当老大之后001号命令啊,002号命令对不对,是这个意思。那有同学说,那如果没有老大的时候,那我这个淘汰编号啊,怎么写呢?啊,没有老大的时候呢,有这个叫逻辑之中。
07:08
哎,学过硬件的同学应该知道啊,里面有那个时钟啊。啊,这种周期性是吧,啊这种时钟那好,那这个是同一轮投票中逻辑时钟是相同的,你没有老大嘛,那大家要选举老大,那选举老大的时候,那这一轮投票。对吧,那这个编号与po的编号都是相同的。好吧,啊,这个稍微了解一下这三个概念后续有没有用。这就是初始化的时候的一个选举机制。
我来说两句