2017-03-08 47 views
1

目前正在开展工作,需要一些帮助。我将从一个sql数据库中填充一个弹性索引。从sql数据库中将会有一个初始完整的reindex,然后会有更新/删除/插入更新的夜间工作。重建索引零停机时间

如果发生重大故障,我可能需要做完全重新索引。理想情况下,我希望零宕机。我确实找到了一些关于创建别名等的文章,但是这看起来是字段映射的更新。我的情况是来自我的源数据库的数据的完全重新索引。我能得到的数据推文档弹性和弹性只会更新现有的索引,因为id将是相同的?还是我需要做点别的?

问候

伊斯梅尔

回答

0

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

  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" }} ] }

+0

酷,但只是推高的数据应该只是更新现有数据,仍然保持索引了这么0停机呢? – Ismail

+0

理论上是的,但你说的是重大失败。在这种情况下什么会失败? – paqash

+0

对不起可能不好。我从数据库获得的数据更新必须在一段时间内提取并推出。在那段时间之后,数据会被写入新的数据。如果在那段时间数据提取失败,那么我需要重建完整的索引。然而,在重建期间,我希望索引仍然可用,即使它可能有过时的数据。 – Ismail