管理 ES 集群:Hot & Warm 架构与 Shard Filtering

日志类应用的部署结构

管理 ES 集群:Hot & Warm 架构与 Shard Filtering

什么是 Hot & Warm Architecture

  • 什么是 Hot & Warm Architecture
    • 数据通常不会有 Update 操作;适用于 Time based 索引数据(生命周期管理),同时数据量比较大的
      场景
    • 引入 Warm 节点,低配置大容量的机器存放老数据,以降低部署成本
  • 两类数据节点, 不同的硬件配置
    • Hot 节点(通常使用 SSD):索引有不断有新文档写入。通常使用 SSD
    • Warm 节点(通常使用 HDD):索引不存在新数据的写入;同时也不存在大量的数据查询

Hot Nodes

  • 用于数据的写入
    • Indexing 对 CPU 和 IO 都有很高的要求。所以需要使用高配置的机器
    • 存储的性能要好。建议使用 SSD

管理 ES 集群:Hot & Warm 架构与 Shard Filtering

Warm Nodes

  • 用于保存只读的索引,比较旧的数据
    • 通常使用大容量的磁盘(通常是 Spinning Disks)

管理 ES 集群:Hot & Warm 架构与 Shard Filtering

配置 Hot & Warm Architecture

  • 使用 Shard Filtering,步骤分为以下几步
    • 标记节点 (Tagging)
    • 配置索引到 Hot Node
    • 配置索引到 Warm 节点

标记节点

  • 需要通过 “node.attr” 来标记一个节点
    • 节点的 attribute可以是任何的 key/value
    • 可以通过 elasticsearch.yml 或者通过 –E 命 令指定
GET /_cat/nodeattrs?v
node   host       ip         attr              value
es7_01 172.28.0.2 172.28.0.2 ml.machine_memory 3973386240
es7_01 172.28.0.2 172.28.0.2 xpack.installed   true
es7_01 172.28.0.2 172.28.0.2 ml.max_open_jobs  20

管理 ES 集群:Hot & Warm 架构与 Shard Filtering

配置 Hot 数据

  • 创建索引时候,指定将其创建在 hot 节点上
    PUT log-2020-03-04
    {
    "settings": {
      "number_of_shards": 2,
      "number_of_replicas": 0,
      "index.routing.allocation.require.my_node_type":"hot"
    }
    }
    //return
    index                shard prirep state   docs  store ip         node
    log-2020-03-04       1     p      STARTED    0   230b 172.18.0.6 es7_hot
    log-2020-03-04       0     p      STARTED    0   230b 172.18.0.6 es7_hot

旧数据移动到 Warm 节点

  • Index.routing.allocation 是一个索引级的 dynamic setting,可以通过 API 在后期进行设定
    • Curator / Index Life Cycle Management Tool
      PUT log-2020-03-04/_settings
      {
      "index.routing.allocation.require.my_node_type":"warm"
      }
      //return 
      index                shard prirep state   docs  store ip         node
      log-2020-03-04       1     p      STARTED    0   230b 172.18.0.4 es7_warm
      log-2020-03-04       0     p      STARTED    0   230b 172.18.0.2 es7_warm

Rack Awareness

  • ES 的节点可能分布在不同的机架
    • 当一个机架断电,可能会同时丢失几个节点
    • 如果一个索引相同的主分片和副本分片,同时在这个机架上,就 有可能导致数据的丢失
    • 通过 Rack Awareness 的机制,就可以尽可能避免将同一个索引 的主副分片同时分配在一个机架的节点上
    • 一个机架断电,数据可以恢复

管理 ES 集群:Hot & Warm 架构与 Shard Filtering

标记 Rack 节点 + 配置集群

管理 ES 集群:Hot & Warm 架构与 Shard Filtering

Shard Filtering

  • Shard Filtering
    • node.attr - 标记节点
    • index.routing.allocation – 分配索引到节点
设置 分配索引到节点,节点的属性规则
Index.routing.allocation.include.{attr} 至少包含一个值
Index.routing.allocation.exclude.{attr} 不能包含任何一个值
Index.routing.allocation.require.{attr} 所有值都需要包含
本作品采用《CC 协议》,转载必须注明作者和本文链接

快乐就是解决一个又一个的问题!

CrazyZard
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!