首页 > 解决方案 > 关于OpenStack Swift ring 函数的两个问题

问题描述

我是 Swift 的新手,我正在尝试学习它的功能。关于环和一致的散列算法,我有两个问题要问你。

当我们要存储一个对象时,我们取它的路径(例如“.../v1/account_name/container_name/object_name.ext”),用这个路径输入MD5哈希函数,然后我们得到一个哈希值。从这个哈希值中,我们取前 n 位,其中 n 是部分幂,并使用这些位来获得分区号。现在,如果我们使用分区号访问环,我们可以发现该分区在哪个节点并以这种方式存储对象。

第一个问题:如果该分区已满怎么办?

假设现在 swift 将对象存储在正确的节点中,第二个问题是:swift 如何决定存储副本的位置?

谢谢你们!

标签: openstack-swiftconsistent-hashing

解决方案


如何迅速决定将副本存储在哪里?

当您创建一个通知集群的所有节点和所有磁盘的环时,它会自动定义每个副本的位置以及在发生故障时使用哪些切换节点。因此,当您询问环在哪里可以找到/存储带有哈希 ABC123DEF 的对象时......它会回答您:

Look at here:
SERVER1/DISK2/PATH/TO/FILE
SERVER2/DISK4/PATH/TO/FILE
SERVER4/DISK1/PATH/TO/FILE

And if you don't find, look at here.
Handoff: SERVER2/DISK2/PATH/TO/FILE
Handoff: SERVER8/DISK7/PATH/TO/FILE
Handoff: SERVER3/DISK1/PATH/TO/FILE

推荐阅读