· marster节点,大于等于1,最好大于3,越多越好,防止集群marster在挂掉的时候出现脑裂。

· data node,大于等于1,不建议只用一个节点做为数据节点,除非机器够强大,有足够的内存和存储空间。

使用多台机器作为data node节点,记得设置cluster.routing.allocation.same_shard.host: true,防止同一个shard的primary和replica分配到同一台机器(原因是这台机器挂了,primary/replica可能同时不可用,丧失了HA)

ES的datanode,也可以兼顾作为marster,只不过当marster和datanode独立出来,一旦出现问题,重启后的恢复几乎是瞬间的,对用户使用几乎没有影响。

另外将marster剥离出来后,也将marster消耗的计算资源剥离开来,这样更容易掌握分析data node资源消耗和查询之间的关系,更容易做机器容量处理规划以及监控。

· shard数量,不是越多越好取决于集群data node的数量,设置成和data node数量一致,或者倍数即可,但shard数量太多也不行,可能会有反作用,降低性能。太多分片可能会导致存在过多的小的segment,占据太多的内存和cpu。

* es官方建议,一个node节点最好不要多于3个shard

· 硬盘:多于1个

· replica:副本分片配置,用于备份数据,当shard丢失数据时可以快速恢复,但当做大批量索引,可以接受可能会出现少量数据丢失时,建议将该配置设置为0,因为副本分片的备份会同等的消耗系统的资源,影响索引效率。

· 磁盘使用的百分比配额:在默认设置的情况下,ES会检测分片占磁盘的85%时就认为磁盘已经满了。如果有一个1TB的硬盘,分片是典型的10GB大小,那么理论上可以在该节点上分配100个分片。在默认设置的情况下,只能分配80个分片到该节点上,之后ES就认为这个节点已经满了.

· 内存:官方建议的heap size不要超过系统可用内存的一半,并且不要超32GB,heap以外的内存并不会被浪费,操作系统会很开心的利用他们来cache被用读取过的段文件。

· 索引速度: 遇到 Elasticsearch 升级后索引速度很慢,查下来是新版 IK 分词的问题,修改分词插件后得到解决。减少碎片也可以提高索引速度,每天进行优化还是很有必要的。在初次索引的时候,把 replica 设置为 0,也能提高索引速度。

· Segment memory大小和Segment的数量。节点上存放的索引较多的时候,这两个指标就值得关注,要知道segment memory是常驻heap不会被GC回收的,因此当heap压力太大的时候,可以结合这个指标判断是否是因为节点上存放的数据过多,需要扩容。

 

注意事项

  • 防止同一个shard的primary和replica分配到同一台机器
  • 监控:可视化ELK。
  • 数据汇聚节点:ES是分布式搜索引擎,搜索和聚合计算除了在各个data node并行计算以外,还需要将结果返回给汇总节点进行汇总和排序后再返回。
  • Range 查询,严重的时候会导致集群 shard 自动下线,建议在最热的查询中避免使用 Range 查询。
  • 当心DELETE _all :设置action.destructive_requires_name:true来禁用了它。