参考文档:
https://blog.csdn.net/kozazyh/article/details/79904428
ceph源码分析(常涛)
1. iSCSI如何维持多通道并行?
MPIO允许1个Initiator(client)通过多个Session连入同1个Target(server)设备,以便利用多网卡或iSCSI HBA启用负载均衡与故障失效切换机制。(Multiple Sessions per Initiator)
2. Ceph(0.94)为什么先写journal,后写底层?
优点:可以先在journal中合并小IO,形成顺序写盘,提高IOPS;
出现故障可以从journal中恢复;
提供了事物的一致性和原子性,避免 FileStore 在执行多个操作时发生意外造成中间状态而无法追溯或者回滚;
缺点:性能抖动,一段高速率之后会有一段低速率
FileJournal 与 FileStore 耦合严重,优化阻力大。
3. Journal写失败怎么办?
从副本需要给主副本发送两次ACK,一次是事务提交到journal,并没有应答到实际的对象数据中,一次是完成应按操作返回ACK。如果是收到事务提交到journal中的ACK,就从ip_op.waiting_for_applied中删除对应的osd。最后检查,如果ip_op.waiting_for_applied空了,就说明所有的从osd的请求都已经返回来了。
如果journal写失败了,则最后检查会发现ip_op.waiting_for_applied并不空,此时就会调用该Context的complete函数。
4. Crush算法能否保证分布均匀?
crush采用以概率为基础的统计上的均衡,在大规模集群中可以实现数据均衡,但是在小规模集群中,会有一定的数据不均衡现象。
5. bucket选择算法?
- Uniform Bucket
- List Bucket
- Tree Bucket
- Straw Bucket
6. PG状态变化契机?
creating:PG正在创建,当创建或增加一个pool里的pg数量时,PG会出现creating状态。
down:PG处于失效或离线状态。
repair:PG正在被检查,出现不一致将被修复。
peering:等待互联,由主osd发起,使所有存放pg副本的osd,就pg的所有对象和元素数据的状态达成一致。
active:完成peering过程后,pg状态变为active,意味着pg中的数据可以进行读写了。
clean:此时,主osd与副本osd成功同步并且没有异步复制,pg中的所有对象都已经具有正确的副本数量了。
replay:当osd崩溃后,pg等待客户端重新发起操作。
degraded:当客户端写对象到主osd,主osd会把数据复制到副本osd,在主osd把对象写入存储后,pg会显示为degraded状态,直到主osd从副本osd中接收到创建副本对象完成信息。
当pg处于active+degraded,原因是因为OSD是处于活跃,但并没有完成所有对象副本的写入,加入osd down,ceph会标记每个pg分配到这个相关osd的状态为degraded,当osd重新上线,osd将会重新恢复。
假如osd down并且degraded状态持续,ceph会标记down osd,并且会迁移相关osd的数据,时间由mon osd down out interval决定。
pg被标记为degraded状态后,如果在pg中找不到相关的对象时,不可以读写unfound对象,但仍然可以访问标记为degraded的pg.
inconsistent:pg副本出现不一致,对象大小不正确或者某个副本出现对象丢失的现象。
recovering:ceph设备容忍在一定范围的软件与硬件问题,当osd变down,那么包含该osd的pg的副本都会有问题,当osd恢复时,osd对应的pg将会更新,并出现当前状态,一段时间后,osd将会恢复recovering状态。
backfilling:当新的osd加入集群中,crush将会为集群新添加的osd重新分配pg,强制新的osd接收重新分配的pg并把一定数量的负载转移到新的osd中,backfilling osd会在后台处理,当backfilling完成,新的osd完成后,将开始对请求进行服务。
remapped:当pg改变,数据从旧的osd迁移到新的osd,新的主osd应该请求将会话费一段时间,在这段时间内,将会继续向旧主osd请求服务,直到pg迁移完成,当数据迁移完成后,mapping将会继续向新的osd响应主osd服务。
当pg的action set变化后,数据将会从旧的acting set迁移到新的acting set,新主osd需要过一段时间后才能提供服务,因此它会让旧的主osd继续提供服务,直到pg迁移完成,pgmap将会使用新的acting set中的主osd.
scrubbing:pg在做不一致性校验。
inactive:pg很长时间没有显示为active状态,不可执行读写请求,等待osd更新数据到最新的备份状态。
unclean:pg很长时间都不是clean状态,不可以完成之前恢复的操作。
stale:pg很长时间没有被ceph-osd更新过,存储在该pg中的节点标记为down,pg处于unknow状态,因为osd没有报告monitor,由mon osd report timeout定义超时时间。