@lijiang

Sculpting in time

Do one thing and do it well.
Every story has a beginning and an end.

1 分钟

我自己设计了一套简陋的k8s persistentvolumeclaims方案,后端采用Moosefs做为分布式数据存储,原理是基于kubernetes events机制,当接收到create pvc的消息时,后台control应用会在moosefs上创建对应的pv,并绑定相应的pvc,为了方便应用在各个节点间移动,我将moosefs文件系统挂载到了每一个worker节点下,这里就产生了一个问题:如何保证moosefs master高可用!moosefs官方有两个版本一个是opensource,另外一个是Pro,Pro版本自带HA功能,而opensource只有备份master的功能,当出现故障时只能通过手动恢复master。为了满足高可用的需求,我申请了Pro版本为期一个月的使用权限,购买永久授权官方价格是1425EUR/10TBi,其中包括了一年的维护费570EUR,这个价格对于我个人使用Raspberry Pi来说实在过于昂贵,并且我测试了mfsmaster pro的性能,发现和opensource版本相比没有显著的提升,考虑到mfsmaster是单线程应用,我决定以后自己维护一套mfs源码,增加它在kubernetes上的功能。这样经过调研,我发现了mfs master高可用的方案(上图所示)。

MFS Opensource Master HA 总共分为三部分:

  • mfsmaster

  • DRBD

  • Keepalived

mfsmaster:存储mfs的元数据。

DRBD:实现网络层块设备的实时复制,类似RAID 1。

Keepalived:监控两台mfsmaster的健康状况。

当mfsmaster A出现异常时,keepalived会将VIP迁移到mfsmaster B上,并将A由原先的master变成backup,同时卸载mfs metadata的DRBD USB磁盘,将B由原先的backup变成master,同时挂载mfs metadata的DRBD USB磁盘,启动mfsmaster,这样就完成了故障节点的恢复。

在使用moosefs之前,我测试过openebs,longhorn,beegfs,glusterfs这些分布式文件系统,对比了它们之间的性能和易用性,最终还是选择了moosefs,因为mfs的扩展实在是太方便了,并且客户端是通过fuse访问文件系统,像macos,freebsd,netbsd都可以使用,在ARM64平台上的读写性能也是优于其他几个分布式文件系统的。当然最后的缺点是官方好像停止维护mfs v3版本了(github一直没有更新),v4版本仍然处于闭源状态。

最新文章

分类

关于

Keep thinking, Stay curious
Always be sensitive to new things