背景
Elasticsearch 作为优秀的分布式搜索引擎,在企业中得到了广泛的应用,可以存储海量的数据,还能像数据库一样各种条件检索和操作,本文主要记录下安装的过程,大多数都参考的官方的文档来操作的,包括系统的设置和 ES 集群的一些配置。
环境
- 系统:
CentOS Linux release 7.6.1810 (Core) - JDK:
1.8.0_201 - ES 版本:
5.6.15 - 安装方式: 使用
tar.gz或者zip包自行安装. 16C32G 2T3台(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
总结
官方文档还是比较全面,仔细按照文档一般没有啥问题.