为海量数据设计ElasticSearch集群
Designing an ElaticSearch cluster for massive data
我是 ElasticSearch 的新手,我正在尝试使用它为我们的用户索引文档内容。将使用 Apache Tika 提取文档内容以及文件元数据和相关信息(大小、日期、扩展名等),并将全部存储在 ElasticSearch 中并为其编制索引。
问题是我无法事先知道我将索引多少数据,因为这将是新客户的一项附加服务。
我的想法是从集群中的单个节点开始,该节点将具有 1000 个分片和 1 个副本(总共 2000 个分片)。每个客户端都有自己的索引,这意味着该节点将仅支持 1000 个客户端,这应该足够了,因为我们一开始并没有很多客户端。一旦节点已满,我们将扩展集群并添加一个新节点,这将扩展集群以支持 2000 个客户端等。
我担心的是存储空间。由于我要为大型数据集编制索引,因此存储的数据的大小会迅速扩大。
为了争论起见,假设我将向我的节点附加一个 1GB 的卷,并假设我无法将其扩展到此之外。现在,如果我向集群添加一个新节点,假设第一个节点已经达到其存储限制(假设它现在正在使用 999MB),elasticsearch 将如何运行。
假设客户端 A 有一个新文档要编制索引,文档大小为 5MB。 Elasticsearch 将如何应对?它会将索引移动到新节点吗?还是保留原始索引并将新索引请求标记为失败?
我问这个问题的原因是因为我将在 Amazon EC2 上托管我的 ElasticSearch 集群,并附加一个 EBS 卷,并且由于 Amazon 对 EBS 按配置的 GB 收费,所以明智的做法是从小处着手并扩展在需要的时候进行批量处理,这样我们就不必在项目开始时产生大量成本。
出于您的目的,您需要担心分片;每个索引 1000 个分片可能 疯狂 矫枉过正。每个索引(不是每个节点!)都由一定数量的分片及其副本组成。 Elasticsearch 将自动在集群中的节点上分配分片,以尝试在整个集群中平衡它们的分布。当磁盘使用率达到节点上配置的高水位线时,Elasticsearch 将停止向该节点分配分片。分片可以透明地迁移到不同的节点。
您可以通过附加具有更多存储空间的新节点来升级集群的总存储容量。您应该注意您的分片大小保持足够小以使其可以存在于单个节点上,但如果它太小那么管理这么多分片的开销可能会令人望而却步。请记住,ES 可以跨多个索引进行查询;大量按时间顺序写入的常见模式是每 N 天创建一个新索引,当需要数据时,您 运行 查询包含数据集的所有索引。这使您可以控制单个索引的大小,同时满足显着的扩展需求。
我是 ElasticSearch 的新手,我正在尝试使用它为我们的用户索引文档内容。将使用 Apache Tika 提取文档内容以及文件元数据和相关信息(大小、日期、扩展名等),并将全部存储在 ElasticSearch 中并为其编制索引。
问题是我无法事先知道我将索引多少数据,因为这将是新客户的一项附加服务。
我的想法是从集群中的单个节点开始,该节点将具有 1000 个分片和 1 个副本(总共 2000 个分片)。每个客户端都有自己的索引,这意味着该节点将仅支持 1000 个客户端,这应该足够了,因为我们一开始并没有很多客户端。一旦节点已满,我们将扩展集群并添加一个新节点,这将扩展集群以支持 2000 个客户端等。
我担心的是存储空间。由于我要为大型数据集编制索引,因此存储的数据的大小会迅速扩大。
为了争论起见,假设我将向我的节点附加一个 1GB 的卷,并假设我无法将其扩展到此之外。现在,如果我向集群添加一个新节点,假设第一个节点已经达到其存储限制(假设它现在正在使用 999MB),elasticsearch 将如何运行。
假设客户端 A 有一个新文档要编制索引,文档大小为 5MB。 Elasticsearch 将如何应对?它会将索引移动到新节点吗?还是保留原始索引并将新索引请求标记为失败?
我问这个问题的原因是因为我将在 Amazon EC2 上托管我的 ElasticSearch 集群,并附加一个 EBS 卷,并且由于 Amazon 对 EBS 按配置的 GB 收费,所以明智的做法是从小处着手并扩展在需要的时候进行批量处理,这样我们就不必在项目开始时产生大量成本。
出于您的目的,您需要担心分片;每个索引 1000 个分片可能 疯狂 矫枉过正。每个索引(不是每个节点!)都由一定数量的分片及其副本组成。 Elasticsearch 将自动在集群中的节点上分配分片,以尝试在整个集群中平衡它们的分布。当磁盘使用率达到节点上配置的高水位线时,Elasticsearch 将停止向该节点分配分片。分片可以透明地迁移到不同的节点。
您可以通过附加具有更多存储空间的新节点来升级集群的总存储容量。您应该注意您的分片大小保持足够小以使其可以存在于单个节点上,但如果它太小那么管理这么多分片的开销可能会令人望而却步。请记住,ES 可以跨多个索引进行查询;大量按时间顺序写入的常见模式是每 N 天创建一个新索引,当需要数据时,您 运行 查询包含数据集的所有索引。这使您可以控制单个索引的大小,同时满足显着的扩展需求。