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