3

根据这篇博文:https ://www.elastic.co/blog/changeing-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;
    });
}
4

0 回答 0