Elasticsearch - 更新别名时索引丢失

时间:2015-04-24 19:44:43

标签: c# elasticsearch nest elasticsearch-net

根据这篇博文:https://www.elastic.co/blog/changing-mapping-with-zero-downtime/,我使用建议的最佳做法来更新生产中的索引,使用别名零停机。尽管如此,我们还是会定期看到"指数缺失"在更新运行时,我们的应用程序中存在异常。我似乎无法诊断出这种行为,我不确定问题是什么。

当前流程

  • 确定默认别名(最多1个)
  • 所定位的索引
  • 通过附加/递增计数器对当前索引名称进行排序: index-name-v1
  • 创建新索引并填充数据
  • 在一个操作中更新别名:删除旧索引并添加新索引
  • 从当前索引中删除-2个版本的索引 - 这样做是为了确保不删除在别名更新之前返回数据的索引

尽管如此,我们在查询数据时会发现随机和常规索引缺失错误。别名永远不会被删除,只能原子地更新。这种方法有什么不妥之处我不考虑吗?

public virtual void SwapAlias(string aliasName, string oldIndexName, string newIndexName)
{
    Client.Alias(a =>
    {
        a.Add(add => add.Alias(aliasName).Index(newIndexName));

        if (oldIndexName != null && oldIndexName != newIndexName)
            a.Remove(remove => remove.Alias(aliasName).Index(oldIndexName));

        return a;
    });
}

0 个答案:

没有答案