文章目录
- 背景介绍
- 操作和优化方法
- 步骤一、新建空索引,按照业务规划设计进行创建
- 步骤二、重建索引准备,禁用刷新和副本复制
- 步骤三、重建索引,并通过参数设置加快索引重建效率
- 步骤四、恢复新索引副本数和刷新间隔
- 步骤五、检查索引重建情况
- elasticsearch _reindex api详细介绍
- request parameter 请求参数详解
- request body 请求主体参数详解
- response Body
背景介绍
在实际的业务生产中,经常由于主分片的调整,或者数据的迁移,索引名称规则的改变,都可以通过索引重建的方式来进行处理。但当生产环境数据量较大时,使用重建索引必定要注意很多细节,才能顺利完成索引重建工作,这里就讲解如何总性能优化。
操作和优化方法
步骤一、新建空索引,按照业务规划设计进行创建
新建空索引,用于放置重建后的数据
# 设置索引分片方式
PUT /tags-release
{
"settings": {
"number_of_shards":3,
"number_of_replicas":2
}
}
# 新建别名
POST /_aliases
{
"actions": [
{
"add": {
"index": "tags-release",
"alias": "tags-public"
}
}
]
}
# 删除原有别名
POST /_aliases
{
"actions":{
"remove":{
"index":"tags",
"alias":"tags-public"
}
}
}
步骤二、重建索引准备,禁用刷新和副本复制
# 新索引的临时禁用刷新和副本复制
PUT /tags-release/_settings
{
"refresh_interval": -1,
"number_of_replicas": 0
}
步骤三、重建索引,并通过参数设置加快索引重建效率
POST /_reindex?slices=3&refresh&timeout=1000000s
{
"source": {
"index": "tags",
"size": 10000
},
"dest": {
"index": "tags-release"
}
}
请求参数解释:
- slices
参数用于指定主分片数量; - refush
用于指定是否刷新; - timeout
为超时时长
请求主体参数解释: - source:
源索引信息
– index
源索引名称
– size
batch_size大小;这里需要注意,size最大可设置为10000; - desc
目标索引信息
– index
目标索引名
这里的size为batch_size,可根据实际数据量情况进行调大或调小,通常的原则是设置在10万以内;
步骤四、恢复新索引副本数和刷新间隔
# 恢复副本复制和刷新间隔
PUT /tags-release/_settings
{
"refresh_interval": "1s",
"number_of_replicas": 2
}
步骤五、检查索引重建情况
检查思路如下:
- 检查重建索引后的mapping是否一致,若不一致,则检查第一步put的setting和mapping
- 重建索引后的记录数是否一致
- 重建索引后的文档数是否一致
- 重建后的索引主分片书和分片副本数是否符合规划
elasticsearch _reindex api详细介绍
请求格式:
POST _reindex?请求参数
{
"请求主体"...
}
响应格式:
{
"took" : *****,
"timed_out" : false,
"total" : *****,,
"updated" : 0,
"created" : *****,,
"deleted" : 0,
"batches" : *****,,
"version_conflicts" : 0,
"noops" : 0,
"retries" : {
"bulk" : 0,
"search" : 0
},
"throttled_millis" : 0,
"requests_per_second" : -1.0,
"throttled_until_millis" : 0,
"slices" : [
{
"slice_id" : 0,
"total" : *****,,
"updated" : 0,
"created" : *****,,
"deleted" : 0,
"batches" : *****,,
"version_conflicts" : 0,
"noops" : 0,
"retries" : {
"bulk" : 0,
"search" : 0
},
"throttled_millis" : 0,
"requests_per_second" : -1.0,
"throttled_until_millis" : 0
},
...
],
"failures" : [ ]
}
request parameter 请求参数详解
- refresh
(可选,枚举)如果为true,Elasticsearch刷新受影响的分片以使该操作可见以进行搜索,如果是,wait_for则等待刷新以使该操作可见以进行搜索,如果false不进行任何刷新。有效值:true,false,wait_for。默认值:false。 - master_timeout
(可选,时间单位)指定等待连接到主节点的时间段。如果在超时到期之前未收到任何响应,则请求将失败并返回错误。默认为30s。 - timeout
(可选,时间单位)指定等待响应的时间段。如果在超时到期之前未收到任何响应,则请求将失败并返回错误。默认为30s。 - wait_for_active_shards
(可选,字符串)在继续操作之前必须处于活动状态的分片副本数。设置为all或最大为索引(number_of_replicas+1)中分片总数的任何正整数。默认值:1,主分片。
请参阅活动分片。 - wait_for_completion
(可选,布尔值)如果为true,则请求将阻塞,直到操作完成为止。默认为true。 - requests_per_second
(可选,整数)此请求的限制,以每秒子请求为单位。-1表示没有节气门。预设为0。 - scroll
(可选,时间单位)指定对于滚动搜索应保持索引的一致视图多长时间。 - slices
(可选,整数)此任务应划分的片数。默认为1,表示该任务未分割为子任务。 - max_docs
(可选,整数)要处理的最大文档数。默认为所有文档。
request body 请求主体参数详解
- conflicts
(可选,枚举)设置为proceed即使发生冲突也继续重新编制索引。默认为abort。 - source
– index
(必需,字符串)要从中复制索引的名称。还接受以逗号分隔的索引列表,以便从多个来源重新索引。
– max_docs
(可选,整数)要重新编制索引的最大文档数。
– query
(可选,查询对象)指定要使用查询DSL重新编制索引的文档。
– remote
— host
(可选,字符串)要从中索引的Elasticsearch远程实例的URL 。从远程索引时是必需的。
— username
(可选,字符串)用于与远程主机进行身份验证的用户名。
— password
(可选,字符串)用于与远程主机进行身份验证的密码。
— socket_timeout
(可选,时间单位)远程套接字读取超时。默认为30秒。
— connect_timeout
(可选,时间单位)远程连接超时。默认为30秒。
– size
(可选,整数)每批要编制索引的文档数。从远程建立索引时使用,以确保批处理适合堆上缓冲区,默认大小为100 MB。
– slice
— id
(可选,整数)用于手动切片的切片ID 。
— max
(可选,整数)切片总数。
– sort
(可选,列表):在索引之前要用逗号分隔的对列表。与结合使用max_docs以控制对哪些文档重新编制索引。
在7.6中弃用。
不建议在reindex中进行排序。绝对不能保证对reindex进行排序可以按顺序对文档建立索引,并阻止reindex的进一步发展,例如弹性和性能改进。如果与结合使用max_docs,请考虑改为使用查询过滤器。
– _source
(可选,字符串)如果重新true索引所有源字段。设置为列表以重新索引选择字段。默认为true。 - dest
– index
(必需,字符串)要复制到的索引的名称。
– version_type
(可选,枚举)用于索引操作的版本控制。有效值:internal,external,external_gt,external_gte。有关更多信息,请参见版本类型。
– op_type
(可选,枚举)设置为仅创建不存在的索引文档(如果不存在,则放置)。有效值:index,create。默认为index。
– type
(可选,字符串) [ 6.0.0 ] 在6.0.0中弃用。类型已弃用,正在删除中。请参阅删除映射类型。重新索引文档的文档类型。默认为_doc。
在未指定destination的情况下,也始终会忽略源索引中的类型type。如果显式指定了目标type,则指定的类型必须与目标索引中的类型匹配,或者为未指定或特殊值_doc。有关更多详细信息,请参见删除映射类型。 - script
– source
(可选,字符串)在重新编制索引时运行以更新文档源或元数据的脚本。
– lang
(可选,枚举)脚本语言:painless,expression,mustache,java。有关更多信息,请参见脚本。
response Body
- took
(整数)整个操作花费的总毫秒数。 - timed_out
{boolean)true如果在重新索引期间执行的任何请求超时,则设置此标志。 - total
(整数)成功处理的文档数。 - updated
(整数)成功更新的文档数,即在重新索引更新之前已存在具有相同ID的文档。 - created
(整数)成功创建的文档数。 - deleted
(整数)成功删除的文档数。 - batches
(整数)由重新索引拉回的滚动响应数。 - noops
(整数)由于用于重新索引的脚本返回的noop值而被忽略的文档数ctx.op。 - version_conflicts
(整数)重新索引命中的版本冲突数。 - retries
(整数)重索引尝试的重试次数。bulk是重试的批量操作search数,也是重试的搜索操作数。 - throttled_millis
(整数)请求睡眠以符合的毫秒数requests_per_second。 - requests_per_second
(整数)在重新索引期间每秒有效执行的请求数。 - throttled_until_millis
(整数)此字段在_reindex响应中应始终等于零。它只有在使用Task API时才有意义,它表示下一次(自epoch以来的毫秒数),为了符合,将再次执行受限制的请求requests_per_second。 - failures
(数组)失败数组,如果在此过程中有任何不可恢复的错误。如果这是非空的,则请求由于这些失败而中止。重新索引是使用批处理实现的,任何失败都会导致整个过程中止,但是当前批处理中的所有失败都会收集到阵列中。您可以使用该conflicts选项来防止重新索引在版本冲突时中止。