CSS技术预览版特性:基于OBS的存算分离

举报
超级马里奥 发表于 2020/08/19 18:56:55 2020/08/19
【摘要】 什么是ES存算分离技术云搜索服务对存储在服务里面的数据,可以通过接口操作,将数据从EVS、直通盘的储存数据直接转移到对象存储OBS里面。将数据转储到OBS的过程称为冷冻。技术原理这项技术并非简单的将存储转移到对象存储,重点是如何实现Shadow Replica可靠的消除存储副本,以及消除超大存储带来的Cache开销,否则无法实现小节点带大存储。 缓存及其优化办法将数据转储到OBS后,为了尽可...

什么是ES存算分离技术

云搜索服务对存储在服务里面的数据,可以通过接口操作,将数据从EVS、直通盘的储存数据直接转移到对象存储OBS里面。将数据转储到OBS的过程称为冷冻。

技术原理

这项技术并非简单的将存储转移到对象存储,重点是如何实现Shadow Replica可靠的消除存储副本,以及消除超大存储带来的Cache开销,否则无法实现小节点带大存储。

 

缓存及其优化办法

将数据转储到OBS后,为了尽可能的减少对OBS的访问请求,并提升ES的查询性能,系统会将缓存部分数据。第一次获取到数据时,会直接访问OBS,之后将获取到的数据缓存在内存中,后续访问会先检查是否有缓存。数据缓存在堆外内存中。

ES访问不同的文件访问的模式是不一样的,缓存系统支持多级缓存,分别使用不同的block大小来缓存不同的文件,如对fdxtip文件,使用大量的小block缓存,对fdt文件,使用较少的大block缓存。

以下为针对缓存的所有配置:

配置名

类型

默认值

说明

low_cost.obs.blockcache.names

Array

default

缓存系统支持多级缓存,分别用来缓存不同访问粒度的数据,此配置列出所有缓存的名字。即使不配置,系统也会默认有一个缓存,名字为default,如果自定义配置,请确保有一个名字为default的缓存,其他名字任意。

low_cost.obs.blockcache.<NAME>.blockshift

Int

13

缓存每个block的大小,为字节左移数,如配置为16,表示block大小为65536字节,即64K.默认8K

low_cost.obs.blockcache.<NAME>.bank.count

Int

1

缓存分区数

low_cost.obs.blockcache.<NAME>.number.blocks.perbank

Int

8192

每个缓存分区中包含的block

low_cost.obs.blockcache. <NAME>.exclude.file.types

Array


不缓存的文件后缀名。如果某些后缀既不包含中exclude列表,又不包含中include列表,则会使用default缓存。

low_cost.obs.blockcache. <NAME>.file.types

Array


缓存的文件后缀名。如果某些后缀既不包含中exclude列表,又不包含中include列表,则会使用default缓存。

 

以下为一个较为常见的缓存配置,该配置使用两级缓存,名字分别为defaultlarge,其中default缓存使用64Kblock大小,并且一共有6*4096blockdefault缓存用于缓存除fdt后缀的其他文件。large缓存使用4Mblock大小,一共有3*500blocklarge缓存用于缓存fdxdvdtip后缀的文件。

low_cost.obs.blockcache.names: ["default", "large"]

 

low_cost.obs.blockcache.default.blockshift: 16

low_cost.obs.blockcache.default.number.blocks.perbank: 4096

low_cost.obs.blockcache.default.bank.count: 6

low_cost.obs.blockcache.default.exclude.file.types: ["fdt"]

 

low_cost.obs.blockcache.large.blockshift: 22

low_cost.obs.blockcache.large.number.blocks.perbank: 500

low_cost.obs.blockcache.large.bank.count: 3

low_cost.obs.blockcache.large.file.types: ["fdx", "dvd", "tip"]

 

 如何使用

1、  通过接口直接使用

指定要操作的索引,使用接口

POST {index}/_freeze_low_cost

该请求为异步请求,下发下去后会启动转储任务,并返回task id

image.png

可以使用tasks接口查看任务是否已完成:

GET _tasks/{taskId}

返回样例:

image.png

2、  结合索引生命周期,参考章节1.2.3

3、  其他接口

1)      列出集群中已冷冻的索引

GET _cat/freeze_indices?v

返回样例:

image.png

2)      执行冷冻

POST {index}/_freeze_low_cost

3)      查看冷冻进度

GET {index}/_freeze_low_cost_progress

返回样例:

{

  "shards" : [

    {

      "index" : "log2",

      "uuid" : "J_yYlVHxSd-E-EL9r5oyjA",

      "shard" : 0,

      "start_ms" : 1583837699953,

      "end_ms" : 1583837702103,

      "total_bytes" : 3004,

      "finished_bytes" : 3004,

      "total_files" : 4,

      "finished_files" : 4

    }

  ]

4)      查看缓存状态

 

{

  "_nodes" : {

    "total" : 2,

    "successful" : 2,

    "failed" : 0

  },

  "cluster_name" : "Es-0111",

  "nodes" : {

    "C-CPEm-QSueKR4bhuqoT2Q" : {

      "name" : "Es-0111-ess-esn-1-1",

      "transport_address" : "192.168.115.115:9300",

      "host" : "192.168.115.115",

      "ip" : "192.168.115.115",

      "large" : {

        "block_cache_capacity" : 1500,

        "block_cache_blocksize" : 4194304,

        "block_cache_size" : 1499,

        "block_cache_hit" : 240284719,

        "block_cache_miss" : 14356,

        "block_cache_eviction" : 12314,

        "block_cache_store_fail" : 738

      },

      "default" : {

        "block_cache_capacity" : 24576,

        "block_cache_blocksize" : 65536,

        "block_cache_size" : 24575,

        "block_cache_hit" : 705825,

        "block_cache_miss" : 328788,

        "block_cache_eviction" : 301871,

        "block_cache_store_fail" : 3065

      },

      "obs_list_count" : 4080,

      "obs_get_meta_count" : 28406,

      "obs_get_obj_count" : 195829,

      "obs_put_obj_count" : 0,

      "obs_list_ms" : 53754,

      "obs_get_meta_ms" : 132073,

      "obs_get_obj_ms" : 3391771,

      "obs_put_obj_ms" : 0,

      "obs_op_total_ms" : 3577598,

      "obs_op_total_count" : 228315

    }

  }

}

注意事项

确保在执行冷冻操作前

1、  需冷冻的索引没有数据写入。在冷冻操作执行前,会将索引配置为read only,会导致写入数据出错。

2、  在执行冷冻索引时,不能同步在执行force merge,如果在冷冻索引时该索引在force merge,则会先将索引close,再open后进行冷冻。建议在执行冷冻前执行一次彻底的force merge,将小的segment文件合并成大文件能有效提升冷冻以后的查询性能。

执行冷冻操作后

1、索引变为只读。

2、索引数据将会转储到OBS,转移过程中,会占用网络带宽。

3、转储后的索引,查询时延会增加,聚合时由于查询复杂,数据读取多,时延边长会体现的更明显。

4 已冷冻的索引不支持解冻,即不能回退可写的索引。


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。