我对ElasticSearch非常陌生,我试图用它来为用户索引文档内容。文档内容将使用Apache以及文件元数据和相关信息(大小、日期、扩展名等)提取。并将全部存储在ElasticSearch中并编入索引。
问题是,我无法事先知道我将索引多少数据,因为这将是一个新增的服务,为新的客户端。
我想的是从集群中的一个节点开始,它将有1000个碎片和1个副本(总共有2000个碎片)。每个客户端都有自己的索引,这意味着这个节点只支持1000个客户机,这应该足够了,因为我们一开始没有很多客户机。一旦节点满了,我们将展开集群并添加一个新节点,这将扩展集群以支持2000个客户端等等。
我关心的是仓库。由于我将索引大型数据集,存储的数据将迅速扩展大小。
为了便于讨论,让我们假设我将在我的节点上附加一个1GB的卷,并且假设我不能将它扩展到该卷之外。现在,如果我向集群添加一个新节点,假设第一个节点已经达到其存储限制(假设它现在使用的是999 is ),那么elasticsearch将如何运行。
如果假设客户端A有一个要索引的新文档,并且文档大小是5MB。Elasticsearch将如何处理这个问题?它会将索引移动到新节点吗?还是将索引保持在原来的位置,并将新的索引请求标记为失败?
我之所以问这个问题,是因为我将在亚马逊EC2上托管我的EC2集群,并附带一个EBS卷,而且由于亚马逊为EBS提供的每一个GB收费,因此在需要时开始小规模并扩大容量是明智的,因此我们不必在项目开始时支付大量费用。
发布于 2015-03-21 18:23:47
就您的目的而言,您需要担心碎片;每个索引有1000个碎片可能是疯狂的过度使用。每个索引(不是每个节点!)由一些碎片和它们的复制品组成。Elasticsearch将自动在集群中的节点上分配碎片,以平衡它们在整个集群中的分布。当磁盘使用率达到节点上配置的高水印时,Elasticsearch将停止向该节点分配碎片。碎片可以透明地迁移到不同的节点。
您可以通过附加一个具有更多存储空间的新节点来升级集群的总存储容量。您应该注意,您的碎片大小仍然足够小,可以在单个节点上生存,但是如果它太小,那么管理这么多碎片的开销可能会变得很高。请记住,ES可以跨多个索引进行查询;高容量时间顺序写入的一个常见模式是每N天创建一个新索引,当需要数据时,您可以跨所有保存数据集的索引运行查询。这使您可以控制单个索引的大小,同时满足重要的缩放需求。
https://stackoverflow.com/questions/29185196
复制相似问题