tencent cloud

文档反馈

冷热分离与索引生命周期管理

最后更新时间:2020-10-10 14:59:59

    Elasticsearch 主要用于海量数据的存储和检索,若将所有数据都放在 SSD 硬盘上,成本会非常高。可通过冷热分离来解决这个问题,冷热集群可以在一个集群内包含冷、热两种属性的节点,从而兼顾性能和容量之间的矛盾:

    • 对读写性能要求比较高的热数据(例如7天内的日志)可以在热节点上以 SSD 磁盘存储。
    • 对存储量需求比较大但对读写性能要求较低的索引(例如1个月甚至更长时间的日志)可以在冷节点上以 SATA 磁盘存储。

    腾讯云 ES 提供了快速配置构建冷热集群的能力,用户可以在腾讯云官网根据业务需要指定冷热节点规格,快速建立一个冷热分离架构的 ES 集群。

    创建冷热集群

    在购买集群时直接创建

    1. 进入腾讯云 Elasticsearch Service 创建集群 页面,在页面填写所需创建集群的相关信息。
    2. 数据节点部署方式选择冷热模式,并选择冷热节点的规格,如下图。
    3. 进一步设置集群的其他参数,确认并支付即可。

    将现有集群变配为冷热集群

    在集群管理页面,单击右上角的【更多操作】,在下拉菜单中选择【调整配置】,选择【冷热模式】,根据需要设置冷热节点的规格和相关配置,将现有集群变配为冷热集群。

    使用冷热集群

    节点角色查看

    验证节点冷热属性,命令如下:

    GET _cat/nodeattrs?v&h=node,attr,value&s=attr:desc
    
    node        attr        value
    node1   temperature     hot
    node2   temperature     hot
    node3   temperature     warm
    node4   temperature     hot
    node5   temperature     warm
    ...

    指定索引冷热属性

    业务方可以根据实际情况决定索引的冷热属性。

    • 对于热数据,设置索引如下:
      PUT hot_data_index/_settings
      {
      "index.routing.allocation.require.temperature": "hot"
      }
    • 对于冷数据,设置索引如下:
      PUT warm_data_index/_settings
      {
      "index.routing.allocation.require.temperature": "warm"
      }

    验证设置的索引

    1. 创建索引。
      PUT hot_warm_test_index
      {
         "settings": {
            "number_of_replicas": 1,
            "number_of_shards": 3
         }
      }
    2. 查看分片分配,可以看到分片均匀分配在五个节点上。
      GET _cat/shards/hot_warm_test_index?v&h=index,shard,prirep,node&s=node
      index          shard prirep node
      hot_data_index 1     p      node1
      hot_data_index 0     r      node1
      hot_data_index 2     r      node2
      hot_data_index 2     p      node3
      hot_data_index 1     r      node4
      hot_data_index 0     p      node5
    3. 设置索引。
      • 设置索引为热索引。
        PUT hot_warm_test_index/_settings
        {
           "index.routing.allocation.require.temperature": "hot"
        }
        查看分片分配,分片均分配在热节点上。
        GET _cat/shards/hot_warm_test_index?v&h=index,shard,prirep,node&s=node
        index          shard prirep node
        hot_data_index 1     p      node1
        hot_data_index 0     r      node1
        hot_data_index 0     p      node2
        hot_data_index 2     r      node2
        hot_data_index 2     p      node4
        hot_data_index 1     r      node4
      • 设置索引为冷索引。
        PUT hot_warm_test_index/_settings
        {
           "index.routing.allocation.require.temperature": "warm"
        }
        查看分片分配,分片均分配到冷节点上。
        GET _cat/shards/hot_warm_test_index?v&h=index,shard,prirep,node&s=node
        index          shard prirep node
        hot_data_index 1     p      node3
        hot_data_index 0     r      node3
        hot_data_index 2     r      node3
        hot_data_index 0     p      node5
        hot_data_index 2     p      node5
        hot_data_index 1     r      node5

    索引生命周期管理

    腾讯云目前已提供6.8.2版本的集群,该版本 Elasticsearch(>=6.6) 提供了索引生命周期管理功能。索引生命周期管理可以通过 API 或者 kibana 界面配置,详情可参考 index-lifecycle-management。下文将通过 kibana 界面来演示,如何使用索引生命周期管理,结合冷热分离架构,实现索引数据的动态管理。

    kibana 中的索引生命周期管理位置如下图(版本6.8.2):

    单击【Create policy】进入配置界面。索引的生命周期为Hot phaseWarm phaseCold phaseDelete phase四个阶段。

    • Hot phase:此阶段可以根据索引的文档数、大小、时长决定是否调用 rollover API 来滚动索引,详情可参考 indices-rollover-index。因与本文关系不大,这里不再赘述。
    • Warm phase:当一个索引在Hot phase被 rollover 后便会进入Warm phase ,进入该阶段的索引会被设置为 read-only。用户可为此索引设置要使用的 attribute,例如对于冷热分离策略,这里可选择temperature: warm属性。另外还可以对索引进行 forceMerge、shrink 等操作,这两个操作具体可以参考 shrink APIforce merge 官方文档。
    • Cold phase:可以设置当索引 rollover 一段时间后进入 cold 阶段,这个阶段也可以设置一个属性。从冷热分离架构可以看出冷热属性是具备扩展性的,不仅可以指定 hot、warm,也可以扩展增加 hot、warm、cold、freeze 等多个冷热属性。如果想使用三层的冷热分离,可指定为temperature: cold。同时还支持对索引的 freeze 操作,详情参考 freeze API 官方文档。
    • Delete phase:可以设置索引 rollover 一段时间后进入 delete 阶段,进入该阶段的索引会自动被删除。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持