我是ElasticSearch的新手,我正在尝试使用它为我们的用户索引文档内容。文档内容将使用Apache Tika以及文件元数据和相关信息(大小,日期,扩展名等)提取,并将全部存储并在ElasticSearch中编制索引。
问题在于我无法预先告诉我将索引多少数据,因为这将为新客户增加一项服务。
我在想的是从群集中的单个节点开始,该节点将有1000个分片和1个副本(总共2000个分片)。每个客户端都有自己的索引,这意味着该节点将只支持1000个客户端,这应该足够,因为我们没有很多客户端可以开始。一旦节点已满,我们将扩展集群并添加一个新节点,这将扩展集群以支持2000个客户端,依此类推。
我关心的是存储空间。由于我将索引大型数据集,因此存储的数据将会迅速扩展。
为了参数,我们假设我将1GB的卷附加到我的节点,并假设我无法将其扩展到该节点之外。现在,如果我向集群添加一个新节点,假设第一个节点已经达到其存储限制(例如它现在使用999MB),elasticsearch将如何表现。
如果让我们说客户A有一个要索引的新文档,文档大小就是5MB。 Elasticsearch将如何表现?它会将索引移动到新节点吗?或者它是否将索引保留在原始索引中并将新索引请求标记为失败?
我问这个的原因是因为我将在Amazon EC2上托管我的ElasticSearch集群并附加一个EBS卷,并且由于Amazon为EBS按规定每GB收费,因此从小处开始并扩展音量是明智的。需要,所以我们不必在项目开始时产生巨额费用。
答案 0 :(得分:2)
出于您的目的,您需要担心碎片;每个索引1000个分片可能疯狂过度杀伤。每个索引(不是每个节点!)都包含一些碎片及其副本。 Elasticsearch将自动在集群中的节点上分配分片,以尝试平衡整个集群中的分布。当磁盘使用率达到节点上配置的高水印时,Elasticsearch将停止为该节点分配分片。碎片可以透明地迁移到不同的节点。
您可以通过附加具有更多存储空间的新节点来升级群集的总存储容量。您应该注意您的分片大小足够小以至于它可以存在于单个节点上,但如果它太小,那么管理这么多分片的开销可能会变得过高。请记住,ES可以跨多个索引进行查询;高容量按时间顺序写入的常见模式是每N天创建一个新索引,当需要数据时,您将对包含数据集的所有索引运行查询。这使您可以控制单个索引的大小,同时满足显着的扩展需求。