Elasticsearch部署优化

Elasticsearch版本

Elasticsearch在2016年10月的时候从2.X跳过中间版本发布了5.X版本,该版本基于Lucene 6.2.0,官方宣称是迄今为止最快、最安全、最易用的版本。5.X版本中主要对索引性能,过滤器,数据结构,易用性方面进行了大量的修改。所以在部署版本选择上,优先选择5.X版本。

OS参数

在Elasticsearch5.X系列版本中增加了启动自检功能,如果参数或者配置不符合需求,则报错无法启动。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/etc/sysctl.conf
vm.swappiness=1
net.core.somaxconn=65535
vm.max_map_count=262144
fs.file-max=518144
sysctl -p


---

/etc/security/limits.conf
elasticsearch soft nofile 65535
elasticsearch hard nofile 65535
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited

Elasticsearch配置

在ES中默认不需要配置很多参数,以下参数是官方提供的Important Elasticsearch configuration:

  • path.data and path.logs
  • cluster.name
  • node.name
  • bootstrap.memory_lock
  • network.host
  • discovery.zen.ping.unicast.hosts
  • discovery.zen.minimum_master_nodes

除此之外还有一些从维护层面需要考虑的参数:

  • 分片数,分片的数量应该与最终需要存储的数据量和分片压力来确定,默认分片是5,应该按需配置(创建索引时可以指定)。分片数不能动态的增加,如果后续增加或者减少分片的数量需要使用reindex或者其他方式重建索引,需要注意的是重建索引会影响性能。

  • 复制副本数,复制副本相当于分片建立了多少个副本,当分片不可用时,用于提供高可用。默认状态下每个分片一个复制副本,从理论上来讲,复制分片越多,数据安全性和可靠性越高,但相对应的是效率的下降和成本的提升,需要根据需求进行规划。

  • node数量,对于分布式系统而言,每一个分片相当于一份资源,这一份资源应该占有独有的系统资源,包括进程命名空间,OS资源等等,ES中,每个分片相当于一份资源,那么node的最佳数量应该是 节点数 <= 主分片数 *(副本数+1)

  • node角色:

  • node.master, master节点保存了集群全部的元数据,还用来管理集群各个节点的状态,数据的导入和查询都不会请求master节点,所以master节点的压力相对较小,因此master节点的内存分配也可以相对少些,但是master的重要性是毋庸置疑的,如果集群较大或者数据很重要,则建议设置单独的node作为master节点。
  • node.data,负责数据的查询和导入的,它的压力会比较大
  • balance node,即不存储元数据也不存储doc,做跨分片查询的负载均衡

监控

Elasticsearch的监控上一篇文章已经讲过Elasticsearch监控,这里不详细赘述。生产环境做好监控,定期查看监控值,及时做资源及参数调整,让Elasticsearch发挥最优的功能。

备份

Elasticsearch的备份一般用其提供的snapshot API进行,该接口会将数据备份到分布式文件系统中,如NAS,S3,HDFS等。该接口的限制是目前只能定时全量备份,无法增量备份数据。

总结

部署,监控、备份是系统高可用,高可靠的第一步保证,持续的高可用和高可靠需要不断的优化和调整才能保证。