【问题标题】:Designing an ElaticSearch cluster for massive data为海量数据设计 ElasticSearch 集群
【发布时间】:2015-03-22 18:10:05
【问题描述】:

我是 ElasticSearch 的新手,我正在尝试使用它为我们的用户索引文档内容。文档内容将使用 Apache Tika 连同文件元数据和相关信息(大小、日期、扩展名等)一起提取,并将全部存储在 ElasticSearch 中并建立索引。

问题是我无法事先知道我将索引多少数据,因为这将是新客户的一项附加服务。

我的想法是从集群中的单个节点开始,该节点将有 1000 个分片和 1 个副本(总共 2000 个分片)。每个客户端都有自己的索引,这意味着这个节点将只支持 1000 个客户端,这应该足够了,因为我们一开始没有很多客户端。一旦节点已满,我们将扩展集群并添加一个新节点,这将扩展集群以支持 2000 个客户端等等。

我关心的是存储。由于我将索引大型数据集,因此存储的数据会迅速扩大。

为了争论,假设我将一个 1GB 的卷附加到我的节点上,并假设我无法将其扩展至此之外。现在,如果我向集群添加一个新节点,假设第一个节点已经达到其存储限制(假设它现在使用 999MB),elasticsearch 将如何表现。

假设客户端 A 有一个要索引的新文档并且文档大小为 5MB。 Elasticsearch 将如何处理这个问题?它会将索引移动到新节点吗?还是保留原始索引并将新的索引请求标记为失败?

我问这个的原因是因为我将在 Amazon EC2 上托管我的 ElasticSearch 集群,并附加一个 EBS 卷,并且由于 Amazon 按 EBS 预置 GB 收费,因此明智的做法是从小处着手并在以下情况下扩展卷需要,因此我们不必在项目开始时产生大量成本。

【问题讨论】:

    标签: amazon-web-services amazon-ec2 elasticsearch


    【解决方案1】:

    出于您的目的,您需要担心分片;每个索引 1000 个分片可能 疯狂 过大了。每个索引(不是每个节点!)由一定数量的分片及其副本组成。 Elasticsearch 将自动在集群中的节点上分配分片,以尝试平衡它们在整个集群中的分布。当磁盘使用量达到节点上配置的高水位线时,Elasticsearch 将停止向该节点分配分片。分片可以透明地迁移到不同的节点。

    您可以通过附加具有更多存储空间的新节点来升级集群的总存储容量。您应该注意您的分片大小保持足够小,以便它可以存在于单个节点上,但如果它太小,那么管理这么多分片的开销可能会变得令人望而却步。请记住,ES 可以跨多个索引进行查询;大量按时间顺序写入的常见模式是每 N 天创建一个新索引,当需要数据时,您对保存数据集的所有索引运行查询。这使您可以控制单个索引的大小,同时满足重要的扩展需求。

    【讨论】:

    • 每个节点的 1000 个分片不是索引。每个索引只有一个分片和一个副本。
    • 我不会太担心设置每个节点的分片最大值;让它根据磁盘可用性进行管理,然后如果您发现自己的 RAM 不足,可以对其进行调整。将每个索引的分片数设置为更高的数字,例如 4-5,这将极大地帮助您随着时间的推移分配工作负载。
    猜你喜欢
    • 2014-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多