Distribute System Quick Q&A
分布式系统常见疑问
Leader节点和Follower节点的关系
- Leader节点是干活的节点,所有的客户端请求都会被发送到leader节点,leader节点更新数据后,同步到所有的follower节点。
- 一个cluster只有一个leader节点,其他的都是follower节点。
- Follower节点接收leader的状态更新消息,并等待准备成为新的leader节点。
什么是quorum
法定票数,就是cluster在选新的leader时,必须获得最少的得票数,这个值是(n/2)+1。(n是所有节点数)
节点个数为什么是奇数?
就是一个原因,奇数和(奇数+1)对应的clustor能够允许的最大的失败数是一样的,然后可以减少一个节点的资源。
例如5个节点和6个节点的clustor,运行的最大失败数都是2,所以配置5个节点能够提供同样的服务,而减少资源。
节点数/法定票数/最大允许失败节点数 关系
节点数 | 法定票数 | 最大允许失败节点数 |
---|---|---|
1 | 1 | 0 |
2 | 2 | 0 |
3 | 2 | 1 |
4 | 3 | 1 |
5 | 3 | 2 |
6 | 4 | 2 |
7 | 4 | 3 |
8 | 5 | 3 |
9 | 5 | 4 |
Client如何知道cluster里面谁是leader节点。
Client不需要知道谁是leader节点,client只需要把请求发给任意一个节点就行,如果这个节点不是leader节点,那么它就转发请求到leader节点,最终都是由leader节点完成数据更新操作,然后同步到所有的follower节点。
替换失效的节点时是否需要先删除原先的节点
是的,强烈建议这么操作。举例来说:
假如一个3节点的集群(法定票数是2,最大允许失效数是1),有一个节点失效了,整个集群仍能继续运行,因为满足法定票数2;
此时如果新增一个节点,那么集群总节点上变成了4,而4节点集群的法定票数是3,这相当于新加了一个节点后,还是处在危险状态,不能允许新的节点失效,还得继续想办法把原先已失效的那个节点恢复,才能保证4节点的安全状态。更严重的后果是,如果此时新节点由于配置错误等原因无法正确加入到集群,反而导致整个集群无法工作,因为4节点集群需要3个法定票数,而此时只有两个节点有效。相反的,如果先删除失效节点,则能避免上述问题,因为此时总的集群节点上变成了2,其法定票数还是2,新加入的节点不影响集群的功能,即使新节点出问题,不能加入集群,也不影响整个集群的工作。