ceph, tikv, 小米飞马, GFS, etcd
存储系统分片后,如果不均衡,某一片写满了一台服务器,其他服务器还很空怎么处理的呢
ceph
ceph架构
ceph存储集群包括osd、monitor和client三个组件
- osd提供单机存储与数据复制
- monitor负责保存集群元数据,包括osd map(包括osd状态等),crush map(包括物理层次结构及访问规则),pg map等,monitor本身也是一个paxos强一致性集群
- client是请求接入的地方,会去monitor请求osd map,crush map,crush rules,然后根据objid -> pgid -> osd sets
crush算法
ceph说自己没有leader,根据crush算法来算的,算到谁就是谁,那算出来的leader挂掉的呢,是需要向monitor拿视图吗?
CRUSH 算法是一个伪随机的过程,他可以从所有的 OSD 中,随机性选择一个 OSD 集合,但是同一个 PG 每次随机选择的结果是不变的,也就是映射的 OSD 集合是固定的。
根据crush算法,计算出pg -> 3 osd的映射,如果某个副本挂了,通过心跳检测会报告给monitor,monitor决策标记为down,更新osd map中的osd状态,再次调用crush算法时,会跳过down(选个临时主吧,此时应该不会踢出down的)
推荐阅读
- 大话Ceph--CRUSH那点事儿
- CRUSH算法的原理与实现
- [weil-crush-sc06.pdf]CRUSH: Controlled, Scalable, Decentralized Placement of Replicated Data
io复制
心跳机制
选主
故障恢复
小米飞马
字节跳动的几个项目
tikv
GFS & HDFS
HBASE
etcd
分布式对象存储
多了解一些