众所周知:swift存储时要初期化3个ring,这个容易理解。对rebalance理解起来有困难。现分析如下:
先看这张图:
(因为一般1个region中的1个zone中要做3个对象复制)
利用上图指示的关系,假如我们要存入一个对象,首先通过对象的account/container/object的md5值的前四个字节(32位)右移动part_shift位,得到具体对象对应的分区号,然后通过replica2part2dev_id(备份到分区到设备的映射), 找到当前分区对应的三个备份设备的Id,获得id后从devs里面得到具体的dev,因dev里面存有设备的ip,port,以及存储数据的磁盘,分别创建请求这三个设备,将数据存入设备上。
待续。。。
阅读(661) | 评论(0) | 转发(0) |