Elasticsearch8 集群搭建(二)配置篇:(2)系统配置

此篇记录Elasticsearch8的一些系统配置。

1、更改文件描述符的限制

Elasticsearch使用了大量的文件描述符,它用于表示系统打开的文件的标识符。文件描述符是非负整数,它在操作系统层面被用来唯一标识一个打开的文件、套接字或其他 I/O 资源。每个进程都有一组文件描述符,这些描述符用于跟踪它当前打开的文件和网络连接。

操作系统为每个进程分配一定数量的文件描述符。这个数量是由操作系统的配置和限制决定的。对于 Elasticsearch 来说,文件描述符的限制非常重要,因为 Elasticsearch 需要同时打开许多文件,包括索引文件、写入日志文件、配置文件等。如果文件描述符的限制太低,可能会导致 Elasticsearch 在高负载情况下无法正常工作。

ulimit 命令是用于查看和设置 shell 进程资源限制的命令。

使用以下命令查看当前用户的文件描述符限制:

bash 复制代码
ulimit -n

临时更改文件描述符的限制:

bash 复制代码
ulimit -n <new_limit>

永久更改文件描述符的限制,编辑/etc/security/limits.conf文件,加入:

bash 复制代码
<elasticsearch username>    nofile  65535(或更大的值)

Important system configuration | Elasticsearch Guide 8.10 | Elastic

File Descriptors | Elasticsearch Guide 8.10 | Elastic

2、禁用交换设置

在 Elasticsearch 中禁用交换(swapping)的主要原因是性能优化和稳定性考虑。交换是一种操作系统级别的机制,用于在物理内存不足时将部分数据移到磁盘上。尽管这在某些情况下可以帮助系统继续运行,但对于 Elasticsearch 这样的分布式搜索引擎,禁用交换通常是更好的选择。

禁用交换有三种方式:

(1)禁用所有交换文件

临时:

bash 复制代码
sudo swapoff -a

永久:编辑/etc/fstab文件,将所有包含swap一词的行都注释掉。

(2)配置swappiness

将vm.swappiness值设为1

(3)启用bootstrap.memory_lock

在elasticsearch.yml中,将bootstrap.memory_lock设置为true:

bash 复制代码
bootstrap.memory_lock: true

同时,还要在/etc/security/limits.conf文件中进行如下配置:

bash 复制代码
# allow user 'elasticsearch' mlockall

elasticsearch soft memlock unlimited

elasticsearch hard memlock unlimited

将上述命令中的elasticsearch改为实际的elasticsearch用户名。

Disable swapping | Elasticsearch Guide 8.10 | Elastic

3、虚拟内存设置

Elasticsearch 默认使用 mmapfs 目录存储其索引。操作系统对mmap默认的数量限制可能太低,这可能会导致内存不足异常。

mmapfs 是一种文件映射的存储引擎,它使用内存映射文件(mmap)的方式来访问磁盘上的数据。这样的设计可以提高对索引数据的读取速度。

操作系统对 mmap 计数进行了限制,用于控制系统中同时使用的内存映射区域的数量。每个内存映射区域都会占用一定的虚拟内存空间。默认情况下,操作系统可能会设置比较保守的 mmap 计数限制,这是为了确保系统在处理大量并发请求时不会耗尽内存。如果 Elasticsearch 的索引数据量较大,而操作系统对 mmap 计数的限制较低,可能会导致 Elasticsearch 在访问索引数据时出现内存不足的异常。这可能表现为 Out of Memory 异常,导致 Elasticsearch 进程被迫终止或不正常工作。

调整操作系统的 mmap 计数限制:

临时方式:

bash 复制代码
sysctl -w vm.max_map_count=262144

永久方式:编辑/etc/sysctl.conf文件,加入

bash 复制代码
vm.max_map_count=262144

修改完,重启ES后,使用以下命令查看:

bash 复制代码
sysctl vm.max_map_count

Virtual memory | Elasticsearch Guide 8.10 | Elastic

4、调整线程数量

Elasticsearch 是一个高度并发的分布式搜索引擎,为了有效地处理各种操作,它使用了多个线程池。每个线程池专门用于处理特定类型的操作,例如搜索、索引、刷新等。在处理大量并发请求时可能需要大量的线程资源。如果限制过低,可能会导致性能下降、请求排队或拒绝服务等问题。将Elasticsearch 用户能够创建的线程数量至少设置为4096.

临时:

bash 复制代码
ulimit -u 4096

永久:编辑/etc/security/limits.conf文件,加入

bash 复制代码
<elasticsearch username> nproc 4096

Number of threads | Elasticsearch Guide 8.10 | Elastic

5、JVM堆大小设置

默认情况下,Elasticsearch 会根据节点的角色和总内存自动设置 JVM 堆大小。 对于大多数生产环境,建议使用默认大小。

要改变默认的堆大小,编辑/$ES_HOME/config/jvm.options文件,设置Xms和Xmx两个参数,它们分别表示JVM堆的初始大小和最大大小。这两个参数的值应该相等,以避免在运行时调整堆大小。二者的值均不能超过总物理内存的50%。

相关推荐
AI推荐率4 小时前
想让AI在选购问题中推荐品牌,应该找什么类型的服务商?
大数据·人工智能·microsoft
浅思科技集5 小时前
工业生产运营软件如何选择?看端到端可见性、数据贯通与AI落地
大数据·人工智能
浅念-5 小时前
一文吃透Git:本地操作|冲突处理|远程协作|GitFlow工作流详解
大数据·git·elasticsearch·搜索引擎·gitflow
葫三生5 小时前
《论三生原理》神话学构想与“神话历史”理论、《古史中的神话》思路异同?
大数据·人工智能·科技·深度学习·算法
国科安芯5 小时前
星链供电架构中的高集成度电源管理方案研究——基于ASP4644四通道降压稳压器在低轨卫星星座中的应用分析
大数据·单片机·嵌入式硬件·架构·低轨卫星·星间链路
小王毕业啦6 小时前
2011-2024年 各地级市养老服务信息面板数据 xlsx
大数据·人工智能·数据挖掘·数据分析·社科数据·实证分析·经管数据
ailsa_hui7 小时前
对于医疗器械行业,鼎捷的ERP有成熟的行业解决方案和合规性支持吗?
大数据
资讯综合8 小时前
500亿招聘市场悖论:AI技术能否填平行业的信任深坑
大数据·人工智能
百胜软件@百胜软件8 小时前
胜券AI的Skills可插拔技能包,让零售AI从“泛”到“专”
大数据·人工智能·零售
汇智信科9 小时前
基于 Jmis 框架的制度与流程管控系统设计与应用|项目全生命周期管理
大数据·人工智能·微服务·云原生·汇智信科