背景
索引数据73522618,本次改动需要给索引添加一个新字段scope,并设置一个默认值为"LXF"。在本次上线之后,新录入的数据将会通过代码默认赋值"LXF"。本次Reindex操作在不影响线上正常使用的前提下,顺利切换索引。
操作过程
设置Refresh
设置refresh刷新时间为30秒,减少性能损耗
代码语言:javascript复制PUT /regroupmembers-21.02.22-010000/_settings
{
"refresh_interval": "30s"
}
设置副本分片
设置副本分片为0,减少在索引数据过程中平衡分片性能损耗
代码语言:javascript复制PUT /regroupmembers-21.02.22-010000/_settings
{
"number_of_replicas": 0
}
设置Pipeline
为scope设置默认value=LXF。
代码语言:javascript复制PUT _ingest/pipeline/defaultvalue
{
"description": "set default scope value",
"processors": [
{
"set": {
"field": "scope",
"value": "LXF",
"override": false
}
}
]
}
查看pipeline
GET _ingest/pipeline/defaultvalue
执行Reindex
晚上10点开始执行Reindex,设置size为3000,大概持续时间90m。
代码语言:javascript复制POST _reindex
{
"source": {
"index": "regroupmembers-20.11.23-000000",
"size": 3000
},
"dest": {
"index": "regroupmembers-21.02.22-010000",
"pipeline": "defaultvalue"
}
}
设置副本分片
在执行完第一次Reindex之后,需要恢复副本分片2,大概持续时间30m。
代码语言:javascript复制PUT /regroupmembers-21.02.22-010000/_settings
{
"number_of_replicas": 2
}
设置Refresh
恢复Refresh刷新到文件缓存区时间为1s(1s可搜索)。
代码语言:javascript复制PUT /regroupmembers-21.02.22-010000/_settings
{
"refresh_interval": "1s"
}
切换别名
代码语言:javascript复制POST /_aliases
{
"actions": [
{
"remove": {
"index":"regroupmembers-20.11.23-000000",
"alias":"regroupmembers"
}
},
{
"add": {
"index":"regroupmembers-21.02.22-010000",
"alias":"regroupmembers"
}
}
]
}
执行Reindex
由于10点开始执行Reindex到切换别名之前操作,正常写入的数据还是会走老索引,所以需要再次执行Reindex,将这期间的数据再录入到新索引中,并记录下这次执行完之后的时间结点。
代码语言:javascript复制POST regroupmembers/_search
{
"query": {
"range": {
"updatetime": {
"gte":"2021-02-20 22:00:00"
}
}
}
}
代码语言:javascript复制POST _reindex
{
"source": {
"index":"regroupmembers-20.11.23-000000",
"query": {
"range": {
"updatetime": {
"gte":"2021-02-20 22:00:00"
}
}
},
"size":3000
},
"dest": {
"index":"regroupmembers-21.02.22-010000",
"pipeline":"defaultvalue"
}
}
修复数据
在执行切换别名之后到服务上线之前,这期间录入的增量数据,在scope字段上是没有任何默认值的,所以需要手动修复这期间产生的增量数据。
代码语言:javascript复制POST regroupmembers/_search
{
"from":0,
"size":2000,
"query": {
"range": {
"updatetime": {
"gte":"2021-02-21 00:00:00", // 切换别名时间
"lte":"2021-02-21 00:18:00" // 上完线时间
}
}
}
}
代码语言:javascript复制POST regroupmembers/_update_by_query
{
"query": {
"range": {
"updatetime": {
"gte":"2021-02-21 00:00:00",
"lte":"2021-02-21 00:18:00"
}
}
},
"script": {
"source": """ ctx._source['scope'] = "LXF" """
}
}
结果:
{
"took":95,
"timed_out":false,
"total":120,
"updated":120,
"deleted":0,
"batches":1,
"version_conflicts":0,
"noops":0,
"retries":{
"bulk":0,
"search":0
},
"throttled_millis":0,
"requests_per_second":-1,
"throttled_until_millis":0,
"failures":[
]
}