零停机重建索引

Rebuild index with zero downtime

目前正在做某事,需要一些帮助。我将从 sql 数据库中填充一个弹性索引。 sql 数据库将有一个初始的完整重建索引,然后将有更新/删除/插入更新的夜间作业。

如果出现重大故障,我可能需要进行完整的重建索引。理想情况下,我想要零停机时间。我确实找到了一些关于创建别名等的文章,但是这似乎是对字段映射的更多更新。我的情况是对源数据库中的数据进行完整的重新索引。我可以让数据将文档推送到 elastic 和 elastic 只会更新现有索引,因为 id 相同吗?或者我需要做其他事情吗?

此致

伊斯梅尔

对于零停机时间,您可以创建一个新索引,从您的数据库中填充它,然后使用别名从旧索引切换到新索引。步骤:

  1. 将您的主索引命名为 main_index_1(或任何您喜欢的名称)
  2. 为名为 main_index

    的索引创建一个别名

    curl -XPUT 'localhost:9200/main_index_1/_alias/main_index?pretty

  3. 设置您的应用程序以指向此别名

  4. 创建一个名为 main_index_2 的新索引,并从您的数据库中为它编制索引
  5. 切换别名指向新索引

    curl -XPOST 'localhost:9200/_aliases?pretty' -H 'Content-Type: application/json' -d { "actions": [ { "remove": { "index": "main_index_1", "alias": "main_index" }}, { "add": { "index": "main_index_2", "alias": "main_index" }} ] }