记录:Reindex操作线上数据

2021-07-06 14:41:11 浏览数 (1)

背景

索引数据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":[

    ]
}

0 人点赞