更新时间:2023-06-20 GMT+08:00

冻结索引

注意事项

  • 在执行冻结操作前,需冻结的索引没有数据写入。在冻结操作执行前,会将索引配置为read only,会导致写入数据出错。
  • 在执行冻结操作后:
    • 索引变为只读。
    • 索引数据将会转储到OBS,转移过程中,会占用网络带宽。
    • 转储后的索引,查询时延会增加。聚合时,由于查询复杂,数据读取多,时延变长会体现的更明显。
    • 已冻结的索引不支持解冻,即不可回退为可写的索引。
    • 冻结完成以后,会删除本地磁盘中的索引数据。

操作步骤

  1. 登录云搜索服务管理控制台。
  2. “集群管理”页面,选择需要冻结索引的集群,单击操作列“Kibana”,登录Kibana界面。
  3. 单击左侧导航栏的“Dev Tools”,进入操作页面。
  4. 执行如下命令,将指定索引冻结到OBS中。
    POST ${index_name}/_freeze_low_cost
    表1 请求参数说明

    参数名

    说明

    index_name

    需要冻结的索引的名字。

    返回结果如下:

    {
        "freeze_uuid": "pdsRgUtSTymVDWR_HoTGFw"
    }
    表2 返回参数说明

    参数名

    说明

    freeze_uuid

    提交冻结请求后会启动一个异步任务,请求返回异步任务的ID,使用该ID查询异步任务的进度。

    索引冻结请求下发后,会禁止索引的数据写入,冻结过程中,查询请求不受影响。在冻结结束后,会将索引先close再open,在这段时间内,索引不可查询,集群可能短暂出现red状态,open结束后恢复。

  5. 执行如下命令获取冻结任务进度。
    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

    表6 冻结索引settings

    参数

    说明

    index.frozen_low_cost

    标识该索引为冻结索引。取值为true。

    index.blocks.write

    冻结后的索引禁止写入。取值为true。

    index.store.type

    标识该索引的存储类型为obs。取值为obs。

  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
          }
        }
      }
    }
    
  7. 执行如下命令重置缓存状态。
    POST _frozen_stats/reset

    返回结果如下:

    {
      "_nodes" : {
        "total" : 1,
        "successful" : 1,
        "failed" : 0
      },
      "cluster_name" : "Es-0325-007_01",
      "nodes" : {
        "mqTdk2YRSPyOSXfesREFSg" : {
          "result" : "ok"
        }
      }
    }

    此命令用于性能问题的调试,如重置缓存状态后再次执行查询,可以清晰看到本次查询的缓存命令情况。在业务运行阶段不需要执行此命令。

  8. 执行如下命令获取当前已经冻结的所有索引。
    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一致。