在分片集群中是否可以处理不同的服务器类型?根据MongoDB文档,平衡器试图在集群中的所有分片上实现块的均匀分配。因此,它似乎完全基于数据量。
但是,当您将新服务器添加到现有分片群集时,通常新服务器具有更多的磁盘空间,更快的磁盘速度和CPU的功率。尤其是当您运行应用程序数年时,这种情况可能会成为事实。
平衡器是否考虑了此类主题,还是必须确保分片群集中的所有服务器具有相似的性能和资源?
答案 0 :(得分:2)
您是正确的,平衡器将假定群集的所有部分都具有相似的硬件。但是,您可以使用zone sharding来定制平衡器的行为。
要引用区域分片文档页面:
在分片群集中,您可以基于分片键创建分片数据区域。您可以将每个区域与集群中的一个或多个分片关联。分片可以与任意数量的区域关联。在平衡的集群中,MongoDB仅将区域覆盖的块迁移到与该区域关联的碎片。
使用区域,您可以将数据分布指定为by location,by hardware spec,by application/customer等。
要直接回答您的问题,您最感兴趣的用例是Tiered Hardware for Varying SLA or SLO。请参阅有关如何实现此目标的教程的链接。
请注意,定义区域是您的设计决定,服务器目前没有自动的方法来为您执行此操作。
小笔记:平衡器仅使用分键即可平衡集群。它根本没有考虑数据量。因此,在分片密钥设计不当的情况下,可能会有一些分片溢出数据,而其他分片则完全为空。在病理设计错误的情况下,某些块无法被整除,从而导致集群永远不平衡,直到进行了大规模的重新设计为止。