生产环境的 ElasticSearch 安装指南

1,730 阅读3分钟

背景

Elasticsearch 作为优秀的分布式搜索引擎,在企业中得到了广泛的应用,可以存储海量的数据,还能像数据库一样各种条件检索和操作,本文主要记录下安装的过程,大多数都参考的官方的文档来操作的,包括系统的设置和 ES 集群的一些配置。

环境

  • 系统:CentOS Linux release 7.6.1810 (Core)
  • JDK: 1.8.0_201
  • ES 版本: 5.6.15
  • 安装方式: 使用tar.gz或者zip包自行安装.
  • 16C32G 2T 3台(worker),2C4G 50G2台(master)

系统配置

修改文件句柄数

在文件中/etc/security/limits.conf增加,如果你的部署用户是elasticsearch

elasticsearch  -  nofile  65536

如果不限制任何用户

*  -  nofile  65536

很多是这样配置的

* soft nofile 1024000
* hard nofile 1024000

ps:凡是修改了系统文件,都需要重新进入 session 配置才会生效.

关闭swap

如果 Es 用到了 swap 作为内存,性能将会变得极差,所以建议关闭.

关闭所有的 swap 文件

使用sudo swapoff -a 临时关闭,如果需要永久关闭,则将/etc/fstab 文件中所有包含swap的行全部注释掉.

配置 swappiness

使用sysctl vm.swappiness可查看当前的配置值,如果不是1,则设置:

echo "vm.swappiness = 1" >> /etc/sysctl.conf

或者sudo sysctl vm.swappiness=1 注意:这只是让 kenerl 在正常情况下不会使用 swap 交换内存,紧急情况下仍然会使用. 目前我是采用的这种配置.

打开 ES 的配置 bootstrap.memory_lock

打开 config/elasticsearch.yml 文件,设置

bootstrap.memory_lock: true

使用 linux 的mlockall进行进行内存锁定,防止使用 swap,除了上述 es 配置,通常需要在/etc/security/limits.conf写入如下配置:

* hard memlock unlimited
* soft memlock unlimited

重新进入 session 生效.(线上打开了这个配置)

MMapFs 配置

es 默认情况下为64为的 linux 操作系统使用mmapfs进行索引的存储,默认情况下,操作系统的 mmap 数量较低,可能导致内存异常.可配置:

sysctl -w vm.max_map_count=262144

如果需要重启后配置仍然保留,可以配置文件/etc/sysctl.conf

vm.max_map_count=262144

修改 user 能创建的线程限制

/etc/security/limits.conf写入如下配置:

* soft nproc 1024000
* hard nproc 1024000

重新进入 session 生效

ES自身配置

运行内存修改

修改config/jvm.properties

-Xms16g 
-Xmx16g 

通常情况下配置为机器内存的一半左右,另外一半留给 ES 的堆外内存.master 2台机器配置为2G 左右的内存即可.

参数

参数比较简单,官方文档一查便知晓意思,贴出来,只是注意 最好将 master 和 data(worder) 节点分开,master只负责调度,不存储数据


cluster.name: example-es-cluster
node.name: node-worker-74
# 是否是 master
node.master: false
# 是否存储数据
node.data: true
# 数据存储位置
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs

bootstrap.memory_lock: true
bootstrap.system_call_filter: false

network.host: 192.168.8.74
# http 端口
http.port: 9200
#tcp 端口
transport.tcp.port: 9300
# 集群节点
discovery.zen.ping.unicast.hosts: ["192.168.8.75", "192.168.8.76", "192.168.8.72", "192.168.8.73", "192.168.8.74"]

discovery.zen.ping_timeout: 120s
discovery.zen.minimum_master_nodes: 1
discovery.zen.fd.ping_interval: 5s
discovery.zen.fd.ping_retries: 5

gateway.recover_after_nodes: 1


http.cors.enabled: true
http.cors.allow-origin: "*"

action.auto_create_index: false
action.destructive_requires_name: true
search.default_search_timeout: 150s
indices.fielddata.cache.size: 20%
indices.breaker.fielddata.limit: 40%
indices.breaker.request.limit: 30%
indices.breaker.total.limit: 60%
indices.recovery.max_bytes_per_sec: 200mb
indices.memory.index_buffer_size: 20%
http.max_content_length: 1024mb
thread_pool.bulk.queue_size: 3000
thread_pool.index.queue_size: 2000
thread_pool.search.queue_size: 1000
thread_pool.get.queue_size: 1000

总结

官方文档还是比较全面,仔细按照文档一般没有啥问题.