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%。

相关推荐
Elastic 中国社区官方博客6 小时前
使用 Elastic Cloud Serverless 扩展批量索引
大数据·运维·数据库·elasticsearch·搜索引擎·云原生·serverless
Dxy12393102167 小时前
Elasticsearch 8.13.4 内存占用过大如何处理
大数据·elasticsearch·搜索引擎
qq_124987075310 小时前
基于深度学习的蘑菇种类识别系统的设计与实现(源码+论文+部署+安装)
java·大数据·人工智能·深度学习·cnn·cnn算法
泰迪智能科技10 小时前
新疆高校大数据人工智能实验室建设案例
大数据·人工智能
Light6010 小时前
数据战争的星辰大海:从纷争到融合,五大核心架构的终局之战与AI新纪元
大数据·人工智能·数据治理·湖仓一体·数据中台·数据架构·选型策略
qq_3482318510 小时前
市场快评 · 今日复盘20251231
大数据
小北方城市网10 小时前
Python + 前后端全栈进阶课程(共 10 节|完整版递进式|从技术深化→项目落地→就业进阶,无缝衔接基础课)
大数据·开发语言·网络·python·数据库架构
喜欢编程的小菜鸡11 小时前
2025:中国大数据行业的“价值觉醒”之年——从规模基建到效能释放的历史性转折
大数据
策知道11 小时前
从“抗旱保苗”到“修渠引水”:读懂五年财政政策的变奏曲
大数据·数据库·人工智能·搜索引擎·政务
XC1314890826711 小时前
法律行业获客,如何用科技手段突破案源瓶颈的实操方法
大数据·人工智能·科技