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

相关推荐
Natural_yz39 分钟前
大数据学习17之Spark-Core
大数据·学习·spark
Karoku0662 小时前
【企业级分布式系统】ELK优化
运维·服务器·数据库·elk·elasticsearch
莫叫石榴姐2 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
魔珐科技3 小时前
以3D数字人AI产品赋能教育培训人才发展,魔珐科技亮相AI+教育创新与人才发展大会
大数据·人工智能
上优4 小时前
uniapp 选择 省市区 省市 以及 回显
大数据·elasticsearch·uni-app
samLi06204 小时前
【更新】中国省级产业集聚测算数据及协调集聚指数数据(2000-2022年)
大数据
Mephisto.java5 小时前
【大数据学习 | Spark-Core】Spark提交及运行流程
大数据·学习·spark
EasyCVR6 小时前
私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?
大数据·网络·音视频·h.265
hummhumm6 小时前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j
jwolf26 小时前
Elasticsearch向量搜索:从语义搜索到图搜图只有一步之遥
elasticsearch·搜索引擎·ai