开发者学堂课程【MongoDB精讲课程(下):故障测试2】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/727/detail/12979
故障测试2
刚刚模拟主节点的这个故障,现在也知道主节点故障了之后,副本节点会自动的升级为主节点,现在再把这个主节点给它启动起来,主节点直接就在这改就行了。
主节点的应该就是2701再启动起来,再检查 mongo 一下服务,同样,27017 27018 27019这三个服务,27017因为刚才是挂机,给它退出一下,再重新连一下,会发现它变成了副本节点了,这个结点也就是副本节点,副本节点它就算带起来之后它也不是老大了,老大其实现在是27018,因为它已经升级成这个主节点了,那升它升级成主节点之后,当原来的这个主节点27017在启动的时候,它并不会去触发这个选举规则,它已经降级为老二了。
降级为这个副本节点了,接下来再来看,如果说这个仲裁结点和这个主节点都故障之后只剩下这个2701,现在这个主节点应该是27018 ,27019仲裁节点,这两个都给它挂了之后。同样在这一块,先给它 clean 一下,看得清楚一点,现在要挂的是主节点,是这个27018,然后再挂掉这个仲裁节点27019,把这两个给它挂掉,那这两个挂掉之后,再来看一下现在的这个副本节点,再敲回车,发现它还是副本节点。
按理说这个主节点挂了之后,它应该会触发重新选举,再来看一下选举规则:
第一,它不仅是要票数最高,按理说它现在应该是票数最高,因为只有它自己存在,它给自己投票它的票数就是最高的。
第二个条件,是否满足它需要大多数成员的一个支持,那什么叫大多数,再来看一下之前的这个架构图:
看一下这个架构目标。首先来看一下,现在是这个主节点和这个副本节点都挂了。
主节点和这个仲裁者,这两个都挂了,都挂了之后它就剩它自己了,它虽然拿到的是一票,它拿到最高,但是它不满足第二个条件,因为第二个条件,是需要获得大多数成员的一个认同,现在获得的是一,一个人给投票,就是自己给自己投票。
但是副本级里面是有三个成员,它并不满足第二个条件呢,大多数成员,至少可以获得两个人的赞同,现在这里面只有一个一,只有一个一之后,也没办法去获得这个主节点,它还是作为一个副本节点,说白了它自己指纹也没有老大,它自己还是老二,作为这个副本节点,虽然在这个架构图上也是,但是实际上现在这个副本节点应该是27017。刚刚模拟的是这个仲裁结点和这个主结点的故障。
仲裁节点和主节点故障之后,并不会导致这个剩下的这个副本节点升级为主节点。因为它不满足一个大多数成员的条件。
最后再来演示一下,如果仲裁结点和这个,从节点也就是这个副本节点,副本节点两个都挂了。这两个都挂了之后,它会怎么样,它这个主节点会成为一个什么样的情况,在模拟之前呢,还是需要把这个这两个服务,给它启动一下,找到们在一起的就不是27017了,要把这个27018和这个27019呢,都给它启动起来。
现在这时候会发现又触发了重新选取,因为成员数已经够了,这时候27017又成为这个主节点了,因为默认的情况下,刚刚的那个主节点挂了之后,这个数据默认是最新的,所以它触发了一个重新选取之后,还有这块儿27017又升级为主节点了,那刚刚的这个主节点它就会降级为这个副本节点。
27018就变成了这个副本节点,就是这个从节点,现在再来模拟一下,就是说如果说要去关掉,再去把这个27019和这个的副本节点27018都给它关掉试一下,首先查看一下,把它 clean 一下吧,看的清晰, mongo 服务找到27018和2019,分别给它挂了。
找一下27018和27019,把这两个再给它划掉,再来看现在的这个主节点27017,按回车。
会发现过了大概十秒钟的时间吧,它又降级成这个副本节点。就降级成这个从节点,这实际上就是一个服务降级,就是当前仲裁也没有了,这个副本节点也没有了,现在只剩下自己一个孤家寡人,也因为也没办法去触发这个读写分离,那这时候,它会自动的降级为副本节点,通俗意义上,这个叫服务降级啊,就是现在只剩下副本集里面只剩下一个主节点了,这个主节点,它自己又干不了,没办法去完成整个副本级的服务,把它主动的将为副本节点,这是这个故障相关的一些测试,测试完之后去了解这个主节点的一些选举原则。