如何在 MongoDB 分片集群中处理不同的服务器类型

How to handle different server types in MongoDB sharded cluster

有没有办法处理分片集群中的不同服务器类型?根据 MongoDB 文档,平衡器试图在集群中的所有分片之间实现块的均匀分布。所以,它似乎纯粹是基于数据量。

但是,当您将新服务器添加到现有的分片集群时,新服务器通常有更多的磁盘 space,磁盘速度更快并且 CPU 具有更多的功能。尤其是当你运行一个申请好几年的时候,这种情况可能会成为事实。

平衡器是否考虑了这些主题,或者您是否必须确保分片集群中的所有服务器具有相似的性能和资源?

你是正确的,平衡器会假设集群的所有部分都具有相似的硬件。但是,您可以使用 zone sharding 来定制平衡器的行为。

引用区域分片文档页面:

In sharded clusters, you can create zones of sharded data based on the shard key. You can associate each zone with one or more shards in the cluster. A shard can associate with any number of zones. In a balanced cluster, MongoDB migrates chunks covered by a zone only to those shards associated with the zone.

使用区域,您可以将数据分布指定为 by location, by hardware spec, by application/customer,等等。

要直接回答您的问题,您最感兴趣的用例是 Tiered Hardware for Varying SLA or SLO。请参阅 link 以获取有关如何实现此目的的教程。

请注意,定义区域是您的设计决定,目前服务器没有自动方式为您执行此操作。

小记:balancer是纯粹使用shard key来平衡集群的。它根本没有考虑数据量。因此,在设计不当的分片键中,可能会出现一些分片数据溢出而另一些分片完全为空的情况。在病态的错误设计案例中,一些块是不可分割的,导致集群永远不平衡的情况,直到完成广泛的重新设计。