ES 索引别名和零停机时间

转载 2016年05月30日 15:48:44

重新索引过程中的问题是必须更新你的应用,来使用另一个索引名。索引别名正是用来解决这个问题的!

索引 别名 就像一个快捷方式或软连接,可以指向一个或多个索引,也可以给任何需要索引名的 API 使用。别名带给我们极大的灵活性,允许我们做到:

  • 在一个运行的集群上无缝的从一个索引切换到另一个
  • 给多个索引分类(例如,last_three_months
  • 给索引的一个子集创建 视图

我们以后会讨论更多别名的使用场景。现在我们将介绍用它们怎么在零停机时间内从旧的索引切换到新的索引。

这里有两种管理别名的途径:_alias 用于单个操作,_aliases 用于原子化多个操作。

在这一章中,我们假设你的应用采用一个叫 my_index 的索引。而事实上,my_index 是一个指向当前真实索引的别名。真实的索引名将包含一个版本号:my_index_v1my_index_v2 等等。

开始,我们创建一个索引 my_index_v1,然后将别名 my_index 指向它:

PUT /my_index_v1 <1>
PUT /my_index_v1/_alias/my_index <2>

<1> 创建索引 my_index_v1

<2> 将别名 my_index 指向 my_index_v1

你可以检测这个别名指向哪个索引:

GET /*/_alias/my_index

或哪些别名指向这个索引:

GET /my_index_v1/_alias/*

两者都将返回下列值:

{
    "my_index_v1" : {
        "aliases" : {
            "my_index" : { }
        }
    }
}

然后,我们决定修改索引中一个字段的映射。当然我们不能修改现存的映射,索引我们需要重新索引数据。首先,我们创建有新的映射的索引 my_index_v2

PUT /my_index_v2
{
    "mappings": {
        "my_type": {
            "properties": {
                "tags": {
                    "type":   "string",
                    "index":  "not_analyzed"
                }
            }
        }
    }
}

然后我们从将数据从 my_index_v1 迁移到 my_index_v2,下面的过程在【重新索引】中描述过了。一旦我们认为数据已经被正确的索引了,我们就将别名指向新的索引。

别名可以指向多个索引,所以我们需要在新索引中添加别名的同时从旧索引中删除它。这个操作需要原子化,所以我们需要用 _aliases 操作:

POST /_aliases
{
    "actions": [
        { "remove": { "index": "my_index_v1", "alias": "my_index" }},
        { "add":    { "index": "my_index_v2", "alias": "my_index" }}
    ]
}

这样,你的应用就从旧索引迁移到了新的,而没有停机时间。

提示:

即使你认为现在的索引设计已经是完美的了,当你的应用在生产环境使用时,还是有可能在今后有一些改变的。

所以请做好准备:在应用中使用别名而不是索引。然后你就可以在任何时候重建索引。别名的开销很小,应当广泛使用。

Elasticsearch索引别名的介绍和操作

ES版本 :1.4.1   elasticsearch中的API可以接受一个对应于某个索引的索引名,也可以接受多个索引。索引别名API允许使用一个名字来作为一个索引的别名,所有的API会将别名转化成...
  • cnweike
  • cnweike
  • 2014年12月16日 14:34
  • 18533

Elasticsearch模块功能之-索引别名(Index aliases )

Elasticsearch的API支持给索引起别名,有了别名之后可以像使用索引一样使用它。但不只是这些,一个别名可以映射多个索引,所以在需要经常指定多个索引查询的情况下,大可将所查询的索引起一个别名来...

Elasticsearch索引别名的介绍和操作

ES版本 :1.4.1   elasticsearch中的API可以接受一个对应于某个索引的索引名,也可以接受多个索引。索引别名API允许使用一个名字来作为一个索引的别名,所有的API会将别名转化成...

elasticsearch 别名的操作

在使用es过程中,如果已存在一个es,需要增加新内容的时候,而且是一个不了解之前数据存贮的人进行添加内容时,就很有可能破坏原有的数据,并且es并没有数据回滚的操作。因此,需要这样的一个功能,有两个in...
  • lxg0807
  • lxg0807
  • 2016年07月12日 10:13
  • 1523

elasticsearch分页的实现方式

对于搜索命中的结果,分页浏览是一项基本的需求。在es内部,分页有两种实现方式。 1:通过设置查询参数from和size size:返回结果的数量。 from:从哪一条结果返回。 比如,返回前三...

ElasticSearch(四)--分布式文档存储

第三节学习了文档的检索,更新,删除,索引的操作方法,本节主要学习这些操作的原理,有利于深入的了解ElasticSearch. 1. 路由文档 每个文档都会存储在单独的一个分片上,那么在检索文档的时候...

ElasticSearch中默认映射、重索引、索引别名、零停机时间

原文地址:http://blog.csdn.net/dm_vincent/article/details/41643793 默认映射(Default Mapping) 一般情况下,...

零意外停机时间——梦想还是现实?

本文讨论制造商如何使用预测分析来管理资产和最小化停机时间,零意外停机时间,会是真的吗?...
  • saaspad
  • saaspad
  • 2017年06月08日 16:07
  • 151

多种方式(含docker容器)实现零停机时间(Zero-Downtime)部署

零停机时间 (Zero-Downtime) 对于互联网上需要直接面向用户的应用在更新时一般要求尽可能地减少停机时间,所谓零停机时间意思就是应用更新或回滚时不会导致服务不可用,一般实现有如下几种 ...
  • kmter
  • kmter
  • 2016年07月21日 11:56
  • 1122

零停机时间备份解决方案

零停机时间备份 解决方案 高数据保护性,又不以牺牲系统性能/停机为代价 现状及问题 在技术飞速发展和信息量急剧增长的今天,全球各地的企业已充分认识到数据是其最具战略性的资产。电子化服务的出现使...
  • ponymwt
  • ponymwt
  • 2011年09月29日 15:02
  • 394
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ES 索引别名和零停机时间
举报原因:
原因补充:

(最多只允许输入30个字)