CSS技术预览版特性:基于OBS的存算分离
什么是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.<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缓存。 |
以下为一个较为常见的缓存配置,该配置使用两级缓存,名字分别为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、 已冷冻的索引不支持解冻,即不能回退可写的索引。
- 点赞
- 收藏
- 关注作者
评论(0)