Elasticsearch-30.常见的集群部署方式 和 Hot&Warm架构与ShardFiltering

Elasticsearch

常见的集群部署方式

节点类型

  • 不同角 色的节点
    • Master eligible / Data / Ingest / Coordinating / Machine Learning
  • 在开发环境中,一个节点可承担多种角色
  • 在生产环境中,
    • 根据数据量, 写入和查询的吞吐量,选择合适的部署方式
    • 建议设置单一角色的节点(dedicated node)

节点参数配置

一个节点在默认情况会下同时扮演: master eligible, data node和ingest node

节点类型配置参数默认值
maste eligiblenode. mastertrue
datanode. datatrue
ingestnode. ingesttrue
coordinating only设置.上面三个参数全部为false .
machine 1 earningnode. mltrue (需 要enable x-pack)

单一职责的节点

一个节点只承担一个角色
在这里插入图片描述

单一角色:职责分离的好处

  • Dedicated master eligible nodes: 负责集群状态(cluster state) 的管理
    • 使用低配置的 CPU, RAM和磁盘
  • Dedicateddatanodes:负责数据存储及处理客户端请求
    • 使用高配置的 CPU, RAM和磁盘
  • Dedicated ingest nodes:负责数据处理
    • 使用高配置CPU;中等配置的RAM;低配置的磁盘

Dedicate Coordinating Only Node (Client Node)

  • 配置:将Master, Data,Ingest 都配置成False

    • Medium/High CUP; Medium/High RAM; Low Disk
  • 生产环境中,建议为一些大的集群配置Coordinating 0nly Nodes

    • 扮演Load Balancers。 降低Master 和Data Nodes 的负载
    • 负 责搜索结果的Gather/Reduce
    • 有时候无法预知客户端会发送怎么样的请求
      • 大量 占用内存的结合操作,一个深度聚合可能会引发ooM

Dedicate Master Node

  • 从高可用 &避免脑裂的角度出发

    • 一般在生产环境中配置3台
    • 一个集群只有1台活跃的主节点
      • 负责分片管理,索引创建,集群管理等操作
  • 如果和数据节点或者Coordinate节点混合部署

    • 数据 节点相对有比较大的内存占用
    • Coordinate 节点有时候可能会有开销很高的查询,导致00M
    • 这些都有可能影响Master 节点,导致集群的不稳定

基本部署:增加节点,水平扩展

  • 当磁盘容量无法满足需求时,可以增加数据节点;磁盘读写压力大时,增加数据节点

在这里插入图片描述

水平扩展: Coordinating Only Node

  • 当系统中有大量的复杂查询及聚合时候,增加Coordinating节点,增加查询的性能
    在这里插入图片描述

读写分离

在这里插入图片描述

在集群中部署Kibana

在这里插入图片描述

异地多活的部署

集群处在三个数据中心;数据三写; GTM分发读请求

在这里插入图片描述

Hot&Warm架构与ShardFiltering

日志类应用的部署架构

在这里插入图片描述

什么是Hot & Warm Archi tecture

  • Hot & Warm Archi tecture

    • 数据通常不会有Update操作;适用于Time based 索引数据(生命周期管理),同时数据量比较大的
      场景。
    • 引入 Warm 节点,低配置大容量的机器存放老数据,以降低部署成本
  • 两类数据节点,不同的硬件配置

    • Hot节点(通常使用SSD) :索引有不断有新文档写入。通常使用SSD
    • Warm节点(通常使用HDD):索引不存在新数据的写入;同时也不存在大量的数据查询

Hot Nodes

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

在这里插入图片描述

Warm Nodes

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

在这里插入图片描述

配置Hot & Warm Architecture

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

标记节点

在这里插入图片描述

配置Hot 数据

  • 创建索引时候, 指定将其创建在hot节点上

在这里插入图片描述

旧数据移动到Warm 节点

  • Index. routing. allocation是一个索引级的dynamic setting,可以通过API在后期进行设定
    • Curator / Index Life Cycle Management Tool

在这里插入图片描述

Rack Awareness

在这里插入图片描述

标记Rack节点+配置集群

在这里插入图片描述

Rack Awareness

在这里插入图片描述

Forced Awareness

在这里插入图片描述

Shard Filtering

  • Shard Filtering
    • node. attr” 一标记节点
    • “index. routing. allocation”- 分配索引到节点
设置分配索引到节点,节点的属性规则
Index.routing. allocation.includefatt至少包含一个值
Index.routing. allocation exclude.fatt}不能包含任何一个值
Index.routingallocation.require.{attr}所有值都需要包含

demo API

# 标记一个 Hot 节点
bin/elasticsearch  -E node.name=hotnode -E cluster.name=geektime -E path.data=hot_data -E node.attr.my_node_type=hot

# 标记一个 warm 节点
bin/elasticsearch  -E node.name=warmnode -E cluster.name=geektime -E path.data=warm_data -E node.attr.my_node_type=warm

# 查看节点
GET /_cat/nodeattrs?v

# 配置到 Hot节点
PUT logs-2019-06-27
{
  "settings":{
    "number_of_shards":2,
    "number_of_replicas":0,
    "index.routing.allocation.require.my_node_type":"hot"
  }
}



PUT my_index1/_doc/1
{
  "key":"value"
}



GET _cat/shards?v


# 配置到 warm 节点
PUT PUT logs-2019-06-27/_settings
{  
  "index.routing.allocation.require.my_node_type":"warm"
}


# 标记一个 rack 1
bin/elasticsearch  -E node.name=node1 -E cluster.name=geektime -E path.data=node1_data -E node.attr.my_rack_id=rack1

# 标记一个 rack 2
bin/elasticsearch  -E node.name=node2 -E cluster.name=geektime -E path.data=node2_data -E node.attr.my_rack_id=rack2

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.awareness.attributes": "my_rack_id"
  }
}

PUT my_index1
{
  "settings":{
    "number_of_shards":2,
    "number_of_replicas":1
  }
}

PUT my_index1/_doc/1
{
  "key":"value"
}


GET _cat/shards?v
DELETE my_index1/_doc/1



# Fore awareness
# 标记一个 rack 1
bin/elasticsearch  -E node.name=node1 -E cluster.name=geektime -E path.data=node1_data -E node.attr.my_rack_id=rack1

# 标记一个 rack 2
bin/elasticsearch  -E node.name=node2 -E cluster.name=geektime -E path.data=node2_data -E node.attr.my_rack_id=rack1


PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.awareness.attributes": "my_rack_id",
    "cluster.routing.allocation.awareness.force.my_rack_id.values": "rack1,rack2"
  }
}
GET _cluster/settings

# 集群黄色
GET _cluster/health

# 副本无法分配
GET _cat/shards?v


GET _cluster/allocation/explain?pretty
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值