问题考虑:
1):故障隔离,降低数据损坏的风险;2)负载均衡,避免部分节点空闲,部分节点超载,影响系统性能;3)控制节点加入离开引起的数据迁移量。
对象存储中一致性hash和Ceph的CRUSH算法是使用比较多的数据分布算法,Amazon的Dyanmo键值存储系统采用一致性hash算法,并对它做了很多优化,OpenStack的Swift对象存储系统也采用一致性hash算法。
CRUSH是一种基于伪随机控制数据分布、复制的算法,CRUSH为解决数据的平衡分布、负载、最大化系统性能以及系统的扩展和硬件容错而被设计的。在Ceph集群中,CRUSH需要一个简洁而层次清晰的设备描述,包括存储集群和副本放置策略,从而有效的将数据对象映射大存储设备上,而这个过程完成是分布式的。
CRUSH原理
存储设备具有吞吐量限制,影响读写性能和可扩展性,所以存储系统需要支持条带化以增加存储系统的吞吐量并提升性能。数据条带化常见方式是做RAID,同Ceph的条带化最相似的是RAID 0,Ceph条带化提供类似RAID 0的吞吐量。决定Ceph条带化数据的3个因素:
- 对象大小:处于分布式集群中的对象拥有一个最大可配置的尺寸,对象大小应该足够大以适应大量的条带单元
- 条带宽度:条带有一个可配置的单元大小,每个条带宽度应该是对象大小的一小部分
- 条带总量:
Ceph条带化后,获得N个带有唯一object ID, object ID是进行线性映射生成,由file的元数据、Ceph条带化产生的Object的序号连缀而成。对象映射到PG,映射包括两部分:静态hash计算Object