一、副本节点选择(机架感知)

说明
第一个副本,因为我们的client可能是web页,也可能是shell终端。
如果是web页,则随机选取一个节点,如果是shell终端,则选择当前shell终端所在的节点。
节点距离最近,保证了性能。
第二个副本,选择机架2的n0节点,为了保证数据的可靠性。
第三个副本,为什么不选择机架3上的节点呢?
因为,第二个副本已经保证了可靠性,所以,第三副本,更注重性能,所以,根据节点距离最近原则,选择机架2的n1节点。
二、两个节点间距离计算
1、什么是机架式服务器?
每个机架式服务器,独立配备一个交换机,机架里面,是一台台独立的服务器。
类似下图

2、节点距离计算
节点距离:两个节点到达最近的共同祖先节点的距离总和。

情况1:
集群中,任何一个节点,到自身的距离,是0

情况2
同一个机架上的服务器,共同的祖先节点,就是这台机架
n1到机架的距离为1,n2到机架的距离为1,所以,距离为2

依次类推,应该明白后面两个的计算逻辑了。
当然,不一定所有的集群节点分布都是上图这种树形结构。
例如下图

此时
节点5到节点9的距离就是3
节点10到节点2的距离就是3