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

网友投稿 691 2022-05-29

什么是ES存算分离技术

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

技术原理

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

缓存及其优化办法

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

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

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

配置名

类型

默认值

说明

low_cost.obs.blockcache.names

Array

default

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

low_cost.obs.blockcache..blockshift

Int

13

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

low_cost.obs.blockcache..bank.count

Int

1

缓存分区数

low_cost.obs.blockcache..number.blocks.perbank

Int

8192

每个缓存分区中包含的block数

low_cost.obs.blockcache. .exclude.file.types

Array

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

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

low_cost.obs.blockcache. .file.types

Array

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

以下为一个较为常见的缓存配置,该配置使用两级缓存,名字分别为default和large,其中default缓存使用64K的block大小,并且一共有6*4096个block,default缓存用于缓存除fdt后缀的其他文件。large缓存使用4M的block大小,一共有3*500个block,large缓存用于缓存fdx,dvd,tip后缀的文件。

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:

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

GET _tasks/{taskId}

返回样例:

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

3、  其他接口

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

GET _cat/freeze_indices?v

返回样例:

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、 已冷冻的索引不支持解冻,即不能回退可写的索引。

CSS 对象存储服务 OBS

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:【答学员问】有什么经验教训,是你在面试很多次之后才知道的?
下一篇:Java的异常处理
相关文章