Atom feed of this document
  

 构建环

环构建器的过程包括三个主要步骤:

  1. 此工具计算分配给每个设备的分区数量是基于设备的权重。举例来说,对于一个设备是2的20次方,那么环就有1,048,576个分区。成千个有此权重的设备每个都需要1,048.576 个分区。设备是按照分区的数量来排序的,而且通过初始化的进程来保持顺序。

    [注意]注意

    每个设备会被分配一个随机的决胜值,此值是用于在两个设备都想要同样数量的分区时使用。此决胜值并不在磁盘中保存,所以基于相同的参数创建了两个不同的环会有不同的分区分配。对于可重复的分区分配来说,RingBuilder.rebalance()需要一个可选的种子值,此值使用Python pseudo-random数字生成器生成。

  2. 环构建器分配每个分区副本给设备,需要在此点的多数分区尽可能的远离其它副本。环构建器优先分配副本到那些区域中还没有副本的设备。如果没有此种区域,环构建器会搜索不同区的设备或是不同的服务器。如果还是没有找到结果,它就会找没有副本的设备。最后,如果所有的选项都不满足,环构建器就会分配副本到已经分配到最新副本的设备。

    [注意]注意

    环构建器分配多个副本给一个设备的情况,仅在环拥有的设备少于其副本。

  3. 当从一个旧的环构建一个新的环时,环构建器会重新计算每个设备打算要的分区的数量。

  4. 构建器不会分配用于重新分配的分区和聚集这些分区,如下所示:

    • 环构建器不会分配已经分配过的分区,即使是这些分区来自任何已经删除的设备,或者是添加这些分区到聚集列表。

    • 环构建器不会分配任何的可以展开更好的耐用性分区副本,以及添加这些分区到聚集列表。

    • 环构建器不会分配哪些来自拥有的分区多于实际需要的设备的随机分区,以及添加这些分区到聚集列表。

  5. 环构建器重新分配聚集的分区给设备,通过使用前面所描述的非常类似大方法。

  6. 当环构建器重新分配一个副本给一个分区时,环构建器会记录重新分配的时间。在收集分区用于重新分配时环构建器使用此值,所以在一个可配置的时间内不会出现移动两次分区的情形。RingBuilder类通过min_part_hours获知可配置的时间。环构建器忽略此在已经删除的设备上的分区副本的限制,因为移除设备仅在设备失效的情况下才会发生,而且重新分配时仅有的选择。

这些步骤并不能保持一直完美,重新平衡一个环由于收集的随机性质分区来用于重新分配。要帮助达到更加平衡的环,重新平衡进程会一再重复直到接近完美(少于1%)或者当平衡在至少1%下无法再进一步(表明了我们可能无法获得最完美的平衡,在大范围没有平衡的区域或者最近移动了太多的分区。)

Questions? Discuss on ask.openstack.org
Found an error? Report a bug against this page


loading table of contents...