冻结索引
注意事项
- 在执行冻结操作前,需冻结的索引没有数据写入。在冻结操作执行前,会将索引配置为read only,会导致写入数据出错。
- 在执行冻结操作后:
- 索引变为只读。
- 索引数据将会转储到OBS,转移过程中,会占用网络带宽。
- 转储后的索引,查询时延会增加。聚合时,由于查询复杂,数据读取多,时延变长会体现的更明显。
- 已冻结的索引不支持解冻,即不可回退为可写的索引。
- 冻结完成以后,会删除本地磁盘中的索引数据。
操作步骤
- 登录云搜索服务管理控制台。
- 在“集群管理”页面,选择需要冻结索引的集群,单击操作列“Kibana”,登录Kibana界面。
- 单击左侧导航栏的“Dev Tools”,进入操作页面。
- 执行如下命令,将指定索引冻结到OBS中。
POST ${index_name}/_freeze_low_cost
表1 请求参数说明 参数名
说明
index_name
需要冻结的索引的名字。
返回结果如下:
{ "freeze_uuid": "pdsRgUtSTymVDWR_HoTGFw" }
表2 返回参数说明 参数名
说明
freeze_uuid
提交冻结请求后会启动一个异步任务,请求返回异步任务的ID,使用该ID查询异步任务的进度。
索引冻结请求下发后,会禁止索引的数据写入,冻结过程中,查询请求不受影响。在冻结结束后,会将索引先close再open,在这段时间内,索引不可查询,集群可能短暂出现red状态,open结束后恢复。
- 执行如下命令获取冻结任务进度。
GET _freeze_low_cost_progress/${freeze_uuid}
表3 请求参数说明 参数名
说明
freeze_uuid
异步任务的ID,该ID由4获取的。
返回结果如下:
{ "stage" : "STARTED", "shards_stats" : { "INIT" : 0, "FAILURE" : 0, "DONE" : 0, "STARTED" : 3, "ABORTED" : 0 }, "indices" : { "data1" : [ { "uuid" : "7OS-G1-tRke2jHZPlckexg", "index" : { "name" : "data1", "index_id" : "4b5PHXJITLaS6AurImfQ9A", "shard" : 2 }, "start_ms" : 1611972010852, "end_ms" : -1, "total_time" : "10.5s", "total_time_in_millis" : 10505, "stage" : "STARTED", "failure" : null, "size" : { "total_bytes" : 3211446689, "finished_bytes" : 222491269, "percent" : "6.0%" }, "file" : { "total_files" : 271, "finished_files" : 12, "percent" : "4.0%" }, "rate_limit" : { "paused_times" : 1, "paused_nanos" : 946460970 } }, { "uuid" : "7OS-G1-tRke2jHZPlckexg", "index" : { "name" : "data1", "index_id" : "4b5PHXJITLaS6AurImfQ9A", "shard" : 0 }, "start_ms" : 1611972010998, "end_ms" : -1, "total_time" : "10.3s", "total_time_in_millis" : 10359, "stage" : "STARTED", "failure" : null, "size" : { "total_bytes" : 3221418186, "finished_bytes" : 272347118, "percent" : "8.0%" }, "file" : { "total_files" : 372, "finished_files" : 16, "percent" : "4.0%" }, "rate_limit" : { "paused_times" : 5, "paused_nanos" : 8269016764 } }, { "uuid" : "7OS-G1-tRke2jHZPlckexg", "index" : { "name" : "data1", "index_id" : "4b5PHXJITLaS6AurImfQ9A", "shard" : 1 }, "start_ms" : 1611972011021, "end_ms" : -1, "total_time" : "10.3s", "total_time_in_millis" : 10336, "stage" : "STARTED", "failure" : null, "size" : { "total_bytes" : 3220787498, "finished_bytes" : 305789614, "percent" : "9.0%" }, "file" : { "total_files" : 323, "finished_files" : 14, "percent" : "4.0%" }, "rate_limit" : { "paused_times" : 3, "paused_nanos" : 6057933087 } } ] } }
表4 返回参数说明 参数名
说明
stage
当前所处状态。取值包括:
- INIT:刚启动或者正在初始化。
- FAILURE:失败。
- DONE:完成。
- STARTED:已启动。
- ABORTED:取消,预留字段。
shards_stats
处在各个状态的shard个数。
indices
每个索引的状态详情。
表5 indices返回值说明 参数名
说明
uuid
freeze的uuid。
index
索引信息和shard信息。
start_ms
开始时间。
end_ms
结束时间,如果没有结束则显示为-1。
total_time
已花费时间。
total_time_in_millis
已花费时间毫秒数。
stage
当前shard所处的状态。
failure
失败原因,如果没有失败则显示为null。
size.total_bytes
总共需要冻结的文件的字节数。
size.finished_bytes
已经完成冻结的字节数。
size.percent
已经完成冻结的字节数百分比。
file.total_bytes
总共需要冻结的文件个数。
file.finished_bytes
已经完成冻结的文件个数。
file.percent
已经完成冻结的文件个数百分比。
rate_limit.paused_times
达到限速导致冻结暂停的次数。
rate_limit.paused_nanos
达到限速导致冻结暂停的时间纳秒数。
冻结完成的索引会增加以下settings,可参考表6。
- 索引冻结后,会将数据进行缓存。执行如下命令获取当前缓存状态。关于缓存详见配置缓存。
GET _frozen_stats GET _frozen_stats/${node_id}
表7 请求参数说明 参数名
说明
node_id
获取单个节点的缓存状态,此参数为需要获取的节点id。
返回结果如下:
{ "_nodes" : { "total" : 3, "successful" : 3, "failed" : 0 }, "cluster_name" : "css-zzz1", "nodes" : { "7uwKO38RRoaON37YsXhCYw" : { "name" : "css-zzz1-ess-esn-2-1", "transport_address" : "10.0.0.247:9300", "host" : "10.0.0.247", "ip" : "10.0.0.247", "block_cache" : { "default" : { "type" : "memory", "block_cache_capacity" : 8192, "block_cache_blocksize" : 8192, "block_cache_size" : 12, "block_cache_hit" : 14, "block_cache_miss" : 0, "block_cache_eviction" : 0, "block_cache_store_fail" : 0 } }, "obs_stats" : { "list" : { "obs_list_count" : 17, "obs_list_ms" : 265, "obs_list_avg_ms" : 15 }, "get_meta" : { "obs_get_meta_count" : 79, "obs_get_meta_ms" : 183, "obs_get_meta_avg_ms" : 2 }, "get_obj" : { "obs_get_obj_count" : 12, "obs_get_obj_ms" : 123, "obs_get_obj_avg_ms" : 10 }, "put_obj" : { "obs_put_obj_count" : 12, "obs_put_obj_ms" : 2451, "obs_put_obj_avg_ms" : 204 }, "obs_op_total" : { "obs_op_total_ms" : 3022, "obs_op_total_count" : 120, "obs_op_avg_ms" : 25 } }, "reader_cache" : { "hit_count" : 0, "miss_count" : 1, "load_success_count" : 1, "load_exception_count" : 0, "total_load_time" : 291194714, "eviction_count" : 0 } }, "73EDpEqoQES749umJqxOzQ" : { "name" : "css-zzz1-ess-esn-3-1", "transport_address" : "10.0.0.201:9300", "host" : "10.0.0.201", "ip" : "10.0.0.201", "block_cache" : { "default" : { "type" : "memory", "block_cache_capacity" : 8192, "block_cache_blocksize" : 8192, "block_cache_size" : 12, "block_cache_hit" : 14, "block_cache_miss" : 0, "block_cache_eviction" : 0, "block_cache_store_fail" : 0 } }, "obs_stats" : { "list" : { "obs_list_count" : 17, "obs_list_ms" : 309, "obs_list_avg_ms" : 18 }, "get_meta" : { "obs_get_meta_count" : 79, "obs_get_meta_ms" : 216, "obs_get_meta_avg_ms" : 2 }, "get_obj" : { "obs_get_obj_count" : 12, "obs_get_obj_ms" : 140, "obs_get_obj_avg_ms" : 11 }, "put_obj" : { "obs_put_obj_count" : 12, "obs_put_obj_ms" : 1081, "obs_put_obj_avg_ms" : 90 }, "obs_op_total" : { "obs_op_total_ms" : 1746, "obs_op_total_count" : 120, "obs_op_avg_ms" : 14 } }, "reader_cache" : { "hit_count" : 0, "miss_count" : 1, "load_success_count" : 1, "load_exception_count" : 0, "total_load_time" : 367179751, "eviction_count" : 0 } }, "EF8WoLCUQbqJl1Pkqo9-OA" : { "name" : "css-zzz1-ess-esn-1-1", "transport_address" : "10.0.0.18:9300", "host" : "10.0.0.18", "ip" : "10.0.0.18", "block_cache" : { "default" : { "type" : "memory", "block_cache_capacity" : 8192, "block_cache_blocksize" : 8192, "block_cache_size" : 12, "block_cache_hit" : 14, "block_cache_miss" : 0, "block_cache_eviction" : 0, "block_cache_store_fail" : 0 } }, "obs_stats" : { "list" : { "obs_list_count" : 17, "obs_list_ms" : 220, "obs_list_avg_ms" : 12 }, "get_meta" : { "obs_get_meta_count" : 79, "obs_get_meta_ms" : 139, "obs_get_meta_avg_ms" : 1 }, "get_obj" : { "obs_get_obj_count" : 12, "obs_get_obj_ms" : 82, "obs_get_obj_avg_ms" : 6 }, "put_obj" : { "obs_put_obj_count" : 12, "obs_put_obj_ms" : 879, "obs_put_obj_avg_ms" : 73 }, "obs_op_total" : { "obs_op_total_ms" : 1320, "obs_op_total_count" : 120, "obs_op_avg_ms" : 11 } }, "reader_cache" : { "hit_count" : 0, "miss_count" : 1, "load_success_count" : 1, "load_exception_count" : 0, "total_load_time" : 235706838, "eviction_count" : 0 } } } }
- 执行如下命令重置缓存状态。
POST _frozen_stats/reset
返回结果如下:
{ "_nodes" : { "total" : 1, "successful" : 1, "failed" : 0 }, "cluster_name" : "Es-0325-007_01", "nodes" : { "mqTdk2YRSPyOSXfesREFSg" : { "result" : "ok" } } }
此命令用于性能问题的调试,如重置缓存状态后再次执行查询,可以清晰看到本次查询的缓存命令情况。在业务运行阶段不需要执行此命令。
- 执行如下命令获取当前已经冻结的所有索引。
GET _cat/freeze_indices
返回结果如下:
green open data2 0bNtxWDtRbOSkS4JYaUgMQ 3 0 5 0 7.9kb 7.9kb green open data3 oYMLvw31QnyasqUNuyP6RA 3 0 51 0 23.5kb 23.5kb
此命令的参数和返回值与开源ES的_cat/indices一致。