• elasticsearch 集群


    一、节点

    1,Coordination Node

    ①处理请求的节点,叫Coordination Node,路由请求到正确的节点,例如创建索引的请求,需要路由到master节点

    ②所有节点默认都是Coordination Node

    ③通过将其他类型设置false,使其成为Dedicated Coordination Node

    2,Data Node

    ①可以保存数据的节点,叫做Data Node,节点启动后,默认就是数据节点。可以设置node.data:false禁止

    ②Data Node的职责:保存分片数据。在数据扩展上起到了至关重要的作用(由Master Node决定如何把分片分发到数据节点上)

    ③通过增加数据节点,可以解决数据水平扩展和解决数据单点问题

    3,Master Node

    Master Node职责:

    ①处理创建、删除索引等请求/决定分片被分配到哪个节点/负责索引的创建与删除

    ②维护并且更新Cluster State

    Master Node最佳实践:

    ①Master 节点非常重要,在部署上需要考虑决绝单点的问题

    ②为一个集群设置多个Master节点/每个节点只承担Master的单一角色

    4,Master Eligible Nodes & 选主流程

    ①一个集群,支持配置多个Master Eligible节点。这些节点可以在必要时(如Master 节点出现故障,网络故障时)参与选主流程,成为Master节点

    ②每个节点启动后,默认就是一个Master Eligible节点,可以设置node.master:false 禁止

    ③单集群内第一个Master Eligible节点启动时,它会将自己选举成Master节点

    二、分片

    1,主分片-提升系统存储容量

    分片是elasticsearch分布式存储的基石(主分片/副本分片)

    通过主分片,将数据分布在所有节点上

      主分片,可以将一份索引的数据,分散在多个Data Node上,实现存储的水平扩展

      主分片数在索引创建的时候指定,后续默认不能修改,如需修改,需要重建索引

    2,副本分片-提高数据可用性

    数据可用性

      通过引入副本分片提高数据的可用性。一旦主分片丢失,副本分片可以promote成主分片。副本分片数可以动态调整。每个节点上都有完备的数据。如果不设置副本分片,一旦出现节点硬件故障,就有可能造成数据丢失

    提成系统的读取性能

      副本分片由主分片同步。通过支持增加replica个数,一定程度可以提高读取的吞吐量

    3,分片数的设定-如何规划一个索引的主分片数和副本分片数

    ① 主分片数过小:例如创建了1个主分片的索引。如果该索引增长的很快,集群无法通过增加节点实现对这个索引的数据扩展

    ②主分片数设置过大:导致单个分片容量很小,引发一个节点上有过多的分片,影响性能

    ③副本分片数设置过多,会降低集群整体的写入性能

    4,如何确定主分片数

    ①从存储物理角度看

      日志类应用,单个分片不要大于50GB

      搜索类应用,单个分片不要超过20GB

    ②为什么要控制分片大小

      提高update的性能

      Merge时,减少所需的资源

      丢失节点后,具备更快的恢复速度/便于分片在集群内Rebalancing

    5,如何确定副本分片数

    ①副本是主分片的拷贝

      提高系统的可用性:相应查询请求,防止数据丢失

      需要占用和主分片一样的资源

    ②对性能的影响

      副本会降低数据的索引速度:有几分副本就会有几倍的CPU资源消耗在索引上

      会减缓对主分片的查询压力,但是会消耗同样的内存资源。如果机器资源充分,提高副本数,可以提高整体的查询QPS

    三、监控elasticsearch集群

    # Node Stats:
    GET _nodes/stats
    
    #Cluster Stats:
    GET _cluster/stats
    
    #Index Stats:
    GET kibana_sample_data_ecommerce/_stats
    
    #Pending Cluster Tasks API:
    GET _cluster/pending_tasks
    
    # 查看所有的 tasks,也支持 cancel task
    GET _tasks
    
    
    GET _nodes/thread_pool
    GET _nodes/stats/thread_pool
    GET _cat/thread_pool?v
    GET _nodes/hot_threads
    GET _nodes/stats/thread_pool
    
    
    # 设置 Index Slowlogs
    # the first 1000 characters of the doc's source will be logged
    PUT my_index/_settings
    {
      "index.indexing.slowlog":{
        "threshold.index":{
          "warn":"10s",
          "info": "4s",
          "debug":"2s",
          "trace":"0s"
        },
        "level":"trace",
        "source":1000  
      }
    }
    
    # 设置查询
    DELETE my_index
    //"0" logs all queries
    PUT my_index/
    {
      "settings": {
        "index.search.slowlog.threshold": {
          "query.warn": "10s",
          "query.info": "3s",
          "query.debug": "2s",
          "query.trace": "0s",
          "fetch.warn": "1s",
          "fetch.info": "600ms",
          "fetch.debug": "400ms",
          "fetch.trace": "0s"
        }
      }
    }
    
    GET my_index
    #案例1
    DELETE mytest
    PUT mytest
    {
      "settings":{
        "number_of_shards":3,
        "number_of_replicas":0,
        "index.routing.allocation.require.box_type":"hott"
      }
    }
    
    
    
    
    
    # 检查集群状态,查看是否有节点丢失,有多少分片无法分配
    GET /_cluster/health/
    
    # 查看索引级别,找到红色的索引
    GET /_cluster/health?level=indices
    
    
    #查看索引的分片
    GET _cluster/health?level=shards
    
    # Explain 变红的原因
    GET /_cluster/allocation/explain
    
    GET /_cat/shards/mytest
    GET _cat/nodeattrs
    
    DELETE mytest
    GET /_cluster/health/
    
    PUT mytest
    {
      "settings":{
        "number_of_shards":3,
        "number_of_replicas":0,
        "index.routing.allocation.require.box_type":"hot"
      }
    }
    
    GET /_cluster/health/
    
    #案例2, Explain 看 hot 上的 explain
    DELETE mytest
    PUT mytest
    {
      "settings":{
        "number_of_shards":2,
        "number_of_replicas":1,
        "index.routing.allocation.require.box_type":"hot"
      }
    }
    
    GET _cluster/health
    GET _cat/shards/mytest
    GET /_cluster/allocation/explain
    
    PUT mytest/_settings
    {
        "number_of_replicas": 0
    }

    四、提升集群写性能

    1,关闭无关的功能

    ①只需要聚合不需要搜索,index设置成false

    ②不需要算分,Norms设置成false

    ③不要对字符串使用默认的dynamic mapping。字段数量过多,会对性能产生比较大的印象

    ④index_options控制在创建倒排索引时,那些内容会被添加到倒排索引中。优化这些设置,一定程度上可以cpu

    ⑤关闭_source,减少io操作;(不能被reindex了,适合指标型数据)

    PUT index
    {
      "mappings": {
        "properties": {
          "foo":{
            "type": "integer",
            "index": false
          }
        }
      }
    }
    
    PUT index
    {
      "mappings": {
        "properties": {
          "foo":{
            "type": "text",
            "norms": false
          }
        }
      }
    }

    2,一个索引设定的例子

    DELETE myindex
    PUT myindex
    {
      "settings": {
        "index": {
          "refresh_interval": "30s",//30秒一次refresh
          "number_of_shards": "2"
        },
        "routing": {
          "allocation": {
            "total_shards_per_node": "3"//控制分片,避免数据热点
          }
        },
        "translog": {
          "sync_interval": "30s",//降低translog落盘
          "durability": "async"
        },
        "number_of_replicas": 0
      },
      "mappings": {
        "dynamic": false,//避免不必要的字段索引
        "properties": {}
      }
    }
  • 相关阅读:
    洛谷P1085 不高兴的津津
    为什么要学习算法
    洛谷P1001 A+B Problem
    计算机问题求解周期
    洛谷P1000 超级玛丽游戏
    洛谷P1421 小玉买文具
    CF359D Pair of Numbers(ST+二分)
    2020.10.7
    2020.10.10
    2020.10.8
  • 原文地址:https://www.cnblogs.com/zd1994/p/12813843.html
Copyright © 2020-2023  润新知