作者:Sanjay Ghemawat
          Howard Gobioff
          Shun-Tak Leung
翻译:tinyfool

4.3 创建,重新复制,负载均衡

块副本创建有三种原因:块创建,重新复制和负载均衡。

当主服务器创建一个块,它会选择哪里放置初始的空副本。具体策略取决于几个因素。(1)我们希望把新的副本放置在低于平均硬盘使用率的块服务器。这样平衡块服务器之间的硬盘使用率。(2)我们希望限制每一个块服务器上"近期"创建操作的数量。虽然创建操作本身是廉价的,但是它总是会紧跟着沉重的写操作,因为写入者需要写的时候才会进行创建,而在我们的"追加一次多多次"的工作负载下块一旦被成功写入就会变为只读。(3)如上面讨论过的,我们希望把块分布在机架之间。

一旦块的可用副本数少于用户指定的值,主服务器会重新复制它。这可能发生在几个原因下:一个块服务器变得不可用,块服务器报告存储在之上的副本损坏了,因为错误它的硬盘不可用了,或者副本数目标提高了。每个需要被重新复制的块基于几个因素排序。一是,块离它的副本数量目标有多远。例如,我们给已经丢失两个副本的块比只丢失一个副本的块更高的优先级。另外,我们优先重新复制活着的文件而不是属于那些近期删除的文件的块(查看4.4章节)。最后,为了失效对正在运行的应用程序的影响,我们提高阻塞客户机流程的块的优先级。

主服务器选择优先级最高的块,然后通过通知一些块服务器上直接从已有的可用的副本复制数据的方式来"克隆"它。新副本位置的策略根创建操作类似:平均硬盘使用率,限制同一块服务器上的活动的克隆操作数量,在机架间分布副本。为了防止克隆所需的网络流量超过客户端流量,主服务器限制块和块服务器的活跃克隆操作数量。另外,每个块服务器,通过调节它对源块服务器的读请求来限制它花在每个克隆操作上面的带宽。

最后,主服务器周期性地对副本进行负载均衡:它检查当前的副本分布情况,然后移动副本以得到更好的硬盘剩余空间以及负载的均衡。同时在这个过程中,主服务器逐渐的填满一个新的块服务器,而不是用新块以及随之同时涌入的沉重的写通讯淹没它。新副本的布置标准根上面讨论的相同。另外,主服务器必须选择哪些现有的副本要被移走。一般来说,它移动那些剩余空间低于平均值的块服务器上面的副本,这样就可以平衡硬盘使用率。


<< 4.2 副本布置 | 4.4 垃圾收集 >>