Elasticsearch 性能优化详解( 六 )


数据(data)节点配置 node.master:false 和 node.data:true , 该 node 服务器只作为一个数据节点,只用于存储索引数据,使该 node 服务器功能单一,只用于数据存储和数据查询,降低其资源消耗率 。
在 Elasticsearch 5.x 版本之后,data 节点又可再细分为“Hot-Warm”架构,即分为热节点(hot node)和暖节点(warm node) 。
hot 节点:
hot 节点主要是索引节点(写节点) , 同时会保存近期的一些频繁被查询的索引 。由于进行索引非常耗费 CPU 和 IO,即属于 IO 和 CPU 密集型操作 , 建议使用 SSD 的磁盘类型,保持良好的写性能;我们推荐部署最小化的 3 个 hot 节点来保证高可用性 。根据近期需要收集以及查询的数据量,可以增加服务器数量来获得想要的性能 。
将节点设置为 hot 类型需要 elasticsearch.yml 如下配置:
node.attr.box_type: hot如果是针对指定的 index 操作,可以通过 settings 设置 index.routing.allocation.require.box_type: hot 将索引写入 hot 节点 。
warm 节点:
这种类型的节点是为了处理大量的,而且不经常访问的只读索引而设计的 。由于这些索引是只读的,warm 节点倾向于挂载大量磁盘(普通磁盘)来替代 SSD 。内存、CPU 的配置跟 hot 节点保持一致即可;节点数量一般也是大于等于 3 个 。
将节点设置为 warm 类型需要 elasticsearch.yml 如下配置:
node.attr.box_type: warm同时 , 也可以在 elasticsearch.yml 中设置 index.codec:best_compression 保证 warm 节点的压缩配置 。
当索引不再被频繁查询时,可通过 index.routing.allocation.require.box_type:warm,将索引标记为 warm,从而保证索引不写入 hot 节点,以便将 SSD 磁盘资源用在刀刃上 。一旦设置这个属性,ES 会自动将索引合并到 warm 节点 。
协调(coordinating)节点
协调节点用于做分布式里的协调,将各分片或节点返回的数据整合后返回 。该节点不会被选作主节点,也不会存储任何索引数据 。该服务器主要用于查询负载均衡 。在查询的时候,通常会涉及到从多个 node 服务器上查询数据,并将请求分发到多个指定的 node 服务器 , 并对各个 node 服务器返回的结果进行一个汇总处理,最终返回给客户端 。在 ES 集群中,所有的节点都有可能是协调节点,但是 , 可以通过设置 node.master、node.data、node.ingest 都为 false 来设置专门的协调节点 。需要较好的 CPU 和较高的内存 。

  • node.master:false和node.data:true,该node服务器只作为一个数据节点,只用于存储索引数据,使该node服务器功能单一 , 只用于数据存储和数据查询,降低其资源消耗率 。
  • node.master:true和node.data:false,该node服务器只作为一个主节点,但不存储任何索引数据 , 该node服务器将使用自身空闲的资源 , 来协调各种创建索引请求或者查询请求,并将这些请求合理分发到相关的node服务器上 。
  • node.master:false和node.data:false,该node服务器即不会被选作主节点,也不会存储任何索引数据 。该服务器主要用于查询负载均衡 。在查询的时候,通常会涉及到从多个node服务器上查询数据,并将请求分发到多个指定的node服务器 , 并对各个node服务器返回的结果进行一个汇总处理,最终返回给客户端 。
关闭 data 节点服务器中的 http 功能针对 Elasticsearch 集群中的所有数据节点,不用开启 http 服务 。将其中的配置参数这样设置 , http.enabled:false,同时也不要安装 head, bigdesk, marvel 等监控插件,这样保证 data 节点服务器只需处理创建/更新/删除/查询索引数据等操作 。
http 功能可以在非数据节点服务器上开启,上述相关的监控插件也安装到这些服务器上,用于监控 Elasticsearch 集群状态等数据信息 。这样做一来出于数据安全考虑 , 二来出于服务性能考虑 。
一台服务器上最好只部署一个 node一台物理服务器上可以启动多个 node 服务器节点(通过设置不同的启动 port),但一台服务器上的 CPU、内存、硬盘等资源毕竟有限,从服务器性能考虑 , 不建议一台服务器上启动多个 node 节点 。
集群分片设置ES 一旦创建好索引后,就无法调整分片的设置,而在 ES 中,一个分片实际上对应一个 lucene 索引,而 lucene 索引的读写会占用很多的系统资源,因此 , 分片数不能设置过大;所以,在创建索引时,合理配置分片数是非常重要的 。一般来说,我们遵循一些原则:


推荐阅读