Mongodb副本集故障测试
副本节点故障测试
关闭192.168.1.101副本节点:
发现,主节点和仲裁节点对101从节点的心跳失败。因为主节点还在,因此,没有触发投票选举。
如果此时,在主节点写入数据。
db.comment.insert({"_id":"1","articleid":"100001","content":"我们不应该把清晨浪费在 手机上,健康很重要,一杯温水幸福你我他。","userid":"1002","nickname":"相忘于江 湖","createdatetime":new Date("2019-08- 05T22:08:15.522Z"),"likenum":NumberInt(1000),"state":"1"})
启动从节点,会发现,主节点写入的数据,会自动同步给从节点。
主节点故障测试
关闭192.168.1.100节点,从节点和仲裁节点对100节点的心跳失败,当失败超过10秒,此时因为没有主节点了,会自动发起投票。而副本节点有192.168.1.101,开始投票。102向101投了一票,101本身自带一票,因此共两票,超过了“大多数” 102是仲裁节点,没有选举权,101不向其投票,其票数是0.最终结果,101成为主节点。具备读写功能。
在192.168.1.101写入数据查看。
db.comment.insert({"_id":"2","articleid":"100001","content":"我夏天空腹喝凉开水,冬天喝温开水","userid":"1005","nickname":"伊人憔悴","createdatetime":new Date("2019-08-05T23:58:51.485Z"),"likenum":NumberInt(888),"state":"1"})
再启动 100节点,发现100变成了从节点,101仍保持主节点。登录100节点,发现是从节点了,数据自动从101同步。从而实现了高可用。
仲裁节点和主节点故障
先关掉仲裁节点192.168.1.102
关掉现在的主节点192.168.1.100
登录101后,发现,101仍然是从节点,副本集中没有主节点了,导致此时,副本集是只读状态,无法写入。
为啥不选举了?因为101的票数,没有获得大多数,即没有大于等于2,它只有默认的一票(优先级是1)
如果要触发选举,随便加入一个成员即可。
- 如果只加入 102仲裁节点成员,则主节点一定是101,因为没得选了,仲裁节点不参与选举,但参与投票。(不演示)
- 如果只加入 103节点,会发起选举。因为101和103都是两票,则按照谁数据新,谁当主节点
仲裁节点和从节点故障
先关掉仲裁节点102,
关掉现在的副本节点101
10秒后,101主节点自动降级为副本节点。(服务降级)
副本集不可写数据了,已经故障了。