openstack-Swift中ring的通俗理解

openstack-Swift中ring的通俗理解,第1张

概述先看拓扑图:   每个文件和虚拟节点之间是一对一的关系,每上传一个文件就会分配一个虚拟节点,虚拟节点数一般是2的n次幂。 每个虚拟节点和zone是一对多的关系,假设每个文件有两个副本的话,那么每个虚拟节点对应到两个zone,这里只讨论文件只有一个副本,所以一个虚拟节点只对应到一个zone。 而一个zone可以对应到多个虚拟节点,比如上图有6个虚拟节点3个zone,那么每个zone对应两个虚拟节点。

先看拓扑图:

650) this.wIDth=650;" src="http://img.jb51.cc/vcimg/static/loading.png" alt="800?pt=0&ek=1&kp=1&sce=0-12-12" src="http://qqadapt.qpic.cn/adapt/0/f4ec0bbf-df87-eb72-1308-6464c896bada/800?pt=0&ek=1&kp=1&sce=0-12-12">

每个文件和虚拟节点之间是一对一的关系,每上传一个文件就会分配一个虚拟节点,虚拟节点数一般是2的n次幂。

每个虚拟节点和zone是一对多的关系,假设每个文件有两个副本的话,那么每个虚拟节点对应到两个zone,这里只讨论文件只有一个副本,所以一个虚拟节点只对应到一个zone。

而一个zone可以对应到多个虚拟节点,比如上图有6个虚拟节点3个zone,那么每个zone对应两个虚拟节点。如果2^n个虚拟节点怎么分配给zone,就要看每个zone的权重(weight)了。

如上图,file1对应的1号虚拟节点,1号虚拟节点对应的是zone1,所以file1是存储在zone1里的,file2对应的4号虚拟节点,4号虚拟节点对应的是z1,那么file2也是存储在zone1里的(这里假设file4对应的是4号虚拟节点)。

现在准备在环境里添加一个新的zone,如下图:

650) this.wIDth=650;" src="http://img.jb51.cc/vcimg/static/loading.png" alt="800?pt=0&ek=1&kp=1&sce=0-12-12" src="http://qqadapt.qpic.cn/adapt/0/a21d1f4d-dbff-f879-e9bd-ce754580e692/800?pt=0&ek=1&kp=1&sce=0-12-12">

增加一个新的zone之后,那么虚拟节点和zone之间的对应关系就要重新分配(rebalance),如上图。

此时4号虚拟节点对应的是zone4,按照现在的分配,file2应该是存储在zone4里,但是根据前面的分析,file2已经存储在zone1里了,那么就要开始把file2从zone1复制到zone4里去。

下面开始测试:

当前swift就使用一个zone,所以这三个对象都是放在同一个zone里的:

650) this.wIDth=650;" src="http://img.jb51.cc/vcimg/static/loading.png" alt="800?pt=0&ek=1&kp=1&sce=0-12-12" src="http://qqadapt.qpic.cn/adapt/0/5b00e82b-310d-b2f2-809a-49bc8d07029a/800?pt=0&ek=1&kp=1&sce=0-12-12">

现在添加一个新的zone:

650) this.wIDth=650;" src="http://img.jb51.cc/vcimg/static/loading.png" alt="800?pt=0&ek=1&kp=1&sce=0-12-12" src="http://qqadapt.qpic.cn/adapt/0/61f092e6-f6b0-05f6-04b9-38794a3abfbd/800?pt=0&ek=1&kp=1&sce=0-12-12">

现在把新的分区添加到build文件里:

650) this.wIDth=650;" src="http://img.jb51.cc/vcimg/static/loading.png" alt="800?pt=0&ek=1&kp=1&sce=0-12-12" src="http://qqadapt.qpic.cn/adapt/0/177ec3b3-bf12-0178-a4ce-d64f0b60b2ed/800?pt=0&ek=1&kp=1&sce=0-12-12">

650) this.wIDth=650;" src="http://img.jb51.cc/vcimg/static/loading.png" alt="800?pt=0&ek=1&kp=1&sce=0-12-12" src="http://qqadapt.qpic.cn/adapt/0/ef6ed2a0-1bc9-a675-c905-77eabb689b2e/800?pt=0&ek=1&kp=1&sce=0-12-12">

此时原来分布在swiftloopbak里的数据会搬到新的zone里:

650) this.wIDth=650;" src="http://img.jb51.cc/vcimg/static/loading.png" alt="800?pt=0&ek=1&kp=1&sce=0-12-12" src="http://qqadapt.qpic.cn/adapt/0/6b89133d-62f6-bbe1-67de-b7286df713bf/800?pt=0&ek=1&kp=1&sce=0-12-12">

上传一些新的文件测试:

650) this.wIDth=650;" src="http://img.jb51.cc/vcimg/static/loading.png" alt="800?pt=0&ek=1&kp=1&sce=0-12-12" src="http://qqadapt.qpic.cn/adapt/0/35966ccd-5d53-a0d1-ec46-a814f749d188/800?pt=0&ek=1&kp=1&sce=0-12-12">

总结

以上是内存溢出为你收集整理的openstack-Swift中ring的通俗理解全部内容,希望文章能够帮你解决openstack-Swift中ring的通俗理解所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1076476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存