我需要构建一个解决方案来托管内部 git 存储库。它需要支持数十万个(或更多)存储库。
我计划使用多个带有共享存储的“哑”服务器,因此基本上当客户端尝试访问存储库时 - 负载平衡器会将其重定向到任何可用的服务器。对存储库的任何更改都将复制到所有节点。
我最初的想法是使用 GlusterFS,但我读到它不能很好地处理小文件。我也在考虑使用 DRBD 自己复制所有内容,但这需要更多设置,与 GlusterFS 相比似乎更复杂。
两者中哪一个提供更好的性能?基本上,我试图解决的问题是,当任何服务器发生故障时 - 我希望其他服务器仍然能够提供数据。
答案1
这是一个典型的横向扩展用例,在我看来,GlusterFS 应该符合要求。您可以尝试一下 - 只需启动几个虚拟机,设置几个用于存储库存储的存储块,然后运行压力测试。
无论如何,DRBD 在这里不是一个选择——它不可扩展。如果 Gluster 运行得不够好,我会考虑其他对象存储项目(例如 Swift),但它们都不是极其注重性能的
答案2
我为 Cyrus 邮件服务器设置了类似的设置,其中 gluster 已被证明无法在压力测试期间处理负载。我们最初选择 gluster 是因为它很简单,但不得不回到 drbd。然而,正如 dyasny 所强调的那样,drbd activs/active cfg 并不可取(更不用说痛苦了)。如果您需要所有服务器同时挂载共享存储,drbd 不是一个选择。您可能想要查看的另一件事是带有锁管理器的 clvmd。lvm2 现在支持 raid 类型 lv 并使用 man 代码来实现此目的。它可以与适当的文件系统(如果需要,一些集群感知文件系统)混合使用。但是,我从未在生产中亲自测试过它,只是作为 PoC。
答案3
答案4
我还会推荐 Glustet,因为它最容易、最快地安装和配置。而且它的扩展性非常好。问题在于速度,我的看法是,您需要在易于配置和易于扩展之间做出选择,并在一些技术难题(一些花哨的 drbd / ocfs2 / Glances 块存储)与速度增益之间做出选择。但是……您能获得多少速度?您需要进行一些压力测试并选择……