follower:从节点,如果主节点挂了可以参与选举,可以处理所有的读请求,如果有写请求则转发给leader 节点
leader 主节点,将受到的所有写请求同步给所有的follower 节点询问,如果有超过一半同意则发送更改
observer 工作节点,可以处理读请求,如果有些请求则转发给leader 节点
主从选举1.每个节点包含observer 节点都有 myid 就是节点id,不能重复
2.每个节点都有 maxId ,表示每个节点中最后一个数据的编号,大多数都是一样的
3.选举的时候每个节点(follower)都发送广播,将当前节点选举的结果推出去,同时收到其他的节点选举结果,然后一起计算
4.每个follower 节点收到的选举广播消息先对比 maxId 最大的一个为主,如果都一样,则再对比myid, 最大的为当选,然后再广播当前节点选举的结果,循环步骤,知道所有的follower 选举的结果一样 则 将当选的主节点 角色变更为leader
示例:
myid:1 maxId=4 leader
myid:2 maxId = 3 follower
myid:3 maxId = 4 follower
myid:4 maxId = 4 observer
如果 myid:1 主节点挂了之后 2 和3 会发送广播
第一轮广播:2 选举2 ,3 选举3 => 然后两个节点都进行计算 2节点计算结果为 3 ,3 计算结果为3
第二轮广播: 2 选举3 ,3 选举3 =》 2 节点没有后续操作,3节点判断结果为自己,则将自己的角色变更为 leader