Ceph crush-map与调优

Crush Map

crush是基于hash的数据分布式算法,是ceph中独有的一种数据分布机制,算法将object自身的标志符x,以及结合当前集群中的crush map运行图,以及对应至上的规制组规则placement rule作为hash函数的stdin,经过计算将对象落在哪些osd上的pv中

  • Crush运行图 :crush运行图是一种树状的层级结构,这种层级结构主要是来反应设备间的关系,只有更好的明确设备间的关系运行图才能更好的去定义 故障域的概念 ,也可以定义识别不同的硬盘接口来,区分p-cie/ssd/hdd来将不同的数据量存放在不同的数据盘中加以使用 性能域
  • ceph完美的规避了查询表,或者查询,通过实时的crush运算将对象准确的落盘,从而大大提升存储的速率

  • 客户端只需要提供对象标志位由crush运算后写入主osd中,后经过集群的网络主osd同步数据到辅助osd中完成本次数据存储操作

  • 注意:无论是使用纠删码池还是副本池根本上都是数据落盘到osd上一定要考虑 故障域 不能多副本或者多纠删码块都落盘到同一机柜或同一物理主机的虚拟机中, 严重的会导致数据的丢失

管理monitor map

多Monitor同步机制

在生产环境建议最少三节点monitor,以确保cluster map的高可用性和冗余性,monitor节点不应该过多甚至操作9节点的行为,会导致数据读写时间下降,影响系统集群的性能

  • monitor使用 paxos算法 作为集群状态上达成一致的机制。paxos是 一种分布式一致性算法 。每当monitor修改map时,它会通过paxos发送更新到其他monitor。Ceph只有在大多数monitor就更新达成一致时提交map的新版本

  • cluster map的更新操作需要Paxos确认,但是读操作不经由Paxos,而是直接访问本地的 kv存储

Monitor选举机制

  • 多个monitor之间需要建立仲裁并选择出一个leader,其他节点则作为工作节点(peon)

  • 在选举完成并确定leader之后,leader将从所有其他monitor请求最新的map epoc,以确保leader具有集群的最新视图

  • 要维护monitor集群的正常工作,必须有超过半数的节点正常

Monitor租期

  • 在Monitor建立仲裁后,leader开始分发短期的租约到所有的monitors。让它们能够分发cluster map到OSD和client

  • Monitor租约默认每3s续期一次

  • 当peon monitor没有确认它收到租约时,leader假定该monitor异常,它会召集新的选举以建立仲裁

  • 如果peon monitor的租约到期后没有收到leader的续期,它会假定leader异常,并会召集新的选举

  • 所以如果生产环境中存在多个monitor时候某个节点的超时会猝发节点的重新选举导致client无法第一时间拿到最新的crushmap图像也就无法去对应的osd上的pv写入数据了

常用的monitor管理

#打印monitor map信息
ceph mon dump

#将monitor map导出为一个二进制文件
ceph mon getmap -o ./monmap

#打印导出的二进制文件的内容
monmaptool --print ./monmap

#修改二进制文件,从monmap删除某个monitor
monmaptool ./monmap --rm <id>

#修改二进制文件,往monmap中添加一个monitor
monmaptool ./monmap --add <id> <ip:port>

#导入一个二进制文件,在导入之前,需要先停止monitor
ceph-mon -i <id> --inject-monmap ./monmap

集群调优

我来评几句
登录后评论

已发表评论数()

相关站点

+订阅
热门文章