基于BOS的冷热数据分离
所有文档

          Elasticsearch BES

          基于BOS的冷热数据分离

          百度智能云Elasticsearch(以下简称为ES)使用不同的存储介质来存储数据,达到冷热数据分离的目的:

          • 对于读写性能要求比较高的“热数据”,使用SSD云磁盘存储,保障了高效的查询性能。
          • 对于存储量需求比较大但对查询性能要求较低的“冷数据”,使用价格更低廉的百度对象存储(BOS)存储数据,大幅度降低存储成本。

            注意:目前冷热数据分离支持功能发布后新创建的7.4.2版本的实例,还不支持冷热数据分离的集群请提交工单,BES团队会协助升级集群,升级方式参见ES版本升级

          实现原理

          image.png

          优势

          • 冷热数据分离:热数据使用SSD云磁盘存储,保证性能,冷数据使用价格低廉的BOS存储,更经济的满足用户的需求。
          • 高性价比:使用BOS作为共享存储,扩大了ES单节点的存储容量,用户可以使用较少的ES节点存储大量的数据,大幅度降低存储成本。

          适用场景

          • 历史日志分析场景:历史数据量大,查询频率相对低,使用冷热数据分离可以大幅降低存储成本。

          使用方法

          配置对象存储(BOS)

          冷热数据分离需要使用BOS来做冷数据的共享存储。通过如下API可以设置BOS存储信息:

          PUT /_cluster/settings
          {
            "persistent": {
              "bpack.remote_storage.bos.access_key": "xxxxxxxx",
              "bpack.remote_storage.bos.secret_key": "xxxxxxxx",
              "bpack.remote_storage.bos.bucket": "es_remote_bucket",
              "bpack.remote_storage.bos.endpoint": "bj.bcebos.com",
              "bpack.remote_storage.bos.base_path": "es_shared_data"
            }
          }

          参数说明:

          参数 含义
          bpack.remote_storage.bos.access_key 访问BOS需要的access key, 可以在百度智能云的控制台上获得。
          bpack.remote_storage.bos.secret_key 访问BOS需要的secret access key,可以在百度智能云的控制台上获得。
          bpack.remote_storage.bos.bucket BOS上建立的bucket的名称,需要提前创建。
          bpack.remote_storage.bos.endpoint BOS的访问地址,一般情况下每个地区有不同的地址,您可以参考BOS的使用文档来获得每个地域的地址。
          bpack.remote_storage.bos.base_path 百度智能云Elasticsearch存放数据的目录。

          创建冷热数据分离Index

          在创建Index时,需要特别指定index.store.typebosfs,这样百度智能云Elasticsearch才会使用冷热分离的架构来管理Index。

          PUT /{index_name}
          {
            "settings": {
              "index.store.type": "bosfs"
            }
          }

          冷数据迁移的触发条件

          在上述2步操作结束后,用户可以和访问普通Index一样来对冷热数据分离的Index进行写入、查询数据。冷热数据分离的Index中的数据在满足一下2种情况之一时,会触发数据迁移到BOS。

          手动触发迁移

          当这个Index中的数据不再写入,并且读取频率比较低的时候,用户可以把Index设置为Cold状态,手动触发数据迁移。设置方式如下:

          POST /_bpack/migrate/{index_name}/cold

          注意:Cold状态的Index为只读状态,不能再写入数据。已经置为Cold状态的Index,不可以再改为普通状态。

          自动触发迁移

          冷热数据分离架构引入了一个设置项:写入冷却时间index.bpack.cooldown.write.time,默认为1h。当Index持续没有新数据写入超过了写入冷却时间,该Index中的数据会被迁移到BOS中。

          用户可以通过以下API修改该参数:

          PUT {index_name}/_settings
          {
              "index.bpack.cooldown.write.time":"10h"
          }

          本地缓存淘汰策略

          当本地磁盘使用率超过了缓存最大磁盘限制,本地数据会被删除。缓存最大磁盘限制默认为75%,用户可以通过修改设置项bpack.bosfs.cache.disk.limit来修改缓存最大磁盘限制,修改方式如下:

          PUT /_cluster/settings
          {
              "persistent": {
                  "bpack.bosfs.cache.disk.limit" : "50%"
              }
          }
          or
          PUT /_cluster/settings
          {
              "persistent": {
                  "bpack.bosfs.cache.disk.limit" : "0.5"
              }
          }

          常见问题

          • Q:已经置为bosfs的Index还能改为其他的存储类型(如hybridfs、niofs等)吗?

            A:如果改为其他存储类型,由于数据存储目录不同,数据将失效。所以不可以改变为其他存储类型。同理,其他存储类型的Index也不可以改变为bosfs

          • Q:已经置为Cold状态的Index还能改回普通状态吗?

            A:不可以。且Cold状态的Index是只读状态,不能再写入数据了。

          • Q:没有设置BOS信息,或BOS信息有误,可以创建bosfs的Index吗?

            A:可以创建成功,但Index不可用。更正BOS信息后,需要重新创建索引。

          上一篇
          向量检索插件
          下一篇
          快速入门