Elasticsearch数据的蓝绿部署?

5

我计划从一个网页中提取(基本上是带有许可的抓取)一些数据,并将其存储在elasticsearch中(你知道,用于搜索)。

虽然我有从网站抓取数据的许可,

  • 但没有API或其他结构化数据源
  • 它是手动编写到HTML中的
  • 没有唯一标识符来区分每个条目(我基本上会从DOM中提取大约1,000-5,000个条目)。

当我将这些内容存储到es中时,我计划将其放入一个索引和映射类型中,比如说thing

然而,随着时间的推移,来源(HTML网页)很可能会发生变化,因为他们添加/删除/更改某些条目的内容。由于源中没有标识符,我无法轻松地识别新条目(甚至更糟的是删除或更改的条目)。

我想保持我的es索引最新状态,我的想法是一种蓝绿机制:

  • 我按一定的时间表(每天/每周)运行抽取过程,具体取决于数据源变化的速度
  • 每次运行该过程都会生成另一个索引(或完全可以是一个新的集群)。假设当前索引为index-prod,而进程构建的新索引为 index-rc
  • 根据某些启发式方法(基于条目数量的灵活速率检查、我们知道应该起作用的样本查询等),它会验证 index-rc
  • 如果它有效,则会执行以下操作之一:
    • A. 将查询慢慢切换到新的集群/索引中
    • B. 一次性切换到新的集群/索引

我计划使用AWS Elasticsearch Service托管elasticsearch集群,并可能使用Route 53 CNAMEs(以及可能是ELB?),但我想知道elasticsearch本身是否有更隐式的支持来执行此操作?

基本上,我想要交换一个索引的数据和另一个索引的数据。
3个回答

3
你不需要在索引之间交换整个数据... 如果我理解正确,你可以使用别名从实际版本更改为下一个索引版本。
为了逐渐更改查询端点,我还建议使用一些负载均衡器,比如nginx,这是最好的解决方案。网络上有很多案例

1

reindex 看起来很有用,可以从一个复制到另一个。我需要重新生成索引。根据其他答案,别名似乎是正确的解决方案。 - or9ob

0

我从 Stackoverflow 以外的另一个来源得到了回复。

  • 索引别名 可以解决这个问题。

  • 对于时间序列数据,这是一个常见的情况。在 ES 时间序列文档 中有一个原子交换索引、标记一个为 当前 并清除旧索引的示例。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接