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_yz5 小时前
大数据学习09之Hive基础
大数据·hive·学习
Natural_yz5 小时前
大数据学习10之Hive高级
大数据·hive·学习
AI服务老曹5 小时前
建立更及时、更有效的安全生产优化提升策略的智慧油站开源了
大数据·人工智能·物联网·开源·音视频
Mephisto.java5 小时前
【大数据学习 | HBASE高级】storeFile文件的合并
大数据·sql·oracle·json·hbase·database
这样の我5 小时前
hbase集成phoenix
大数据·数据库·hbase
思通数据6 小时前
AI与OCR:数字档案馆图像扫描与文字识别技术实现与项目案例
大数据·人工智能·目标检测·计算机视觉·自然语言处理·数据挖掘·ocr
CoderJia程序员甲6 小时前
重学SpringBoot3-整合 Elasticsearch 8.x (三)使用Repository
java·大数据·spring boot·elasticsearch
东方巴黎~Sunsiny6 小时前
如何优化Elasticsearch的查询性能?
大数据·elasticsearch·搜索引擎
杭州的物联网专家6 小时前
涉密载体管控系统:DW-S402全方位守护信息安全的利器
大数据
guanpinkeji7 小时前
搭子小程序定制开发:全新找搭子之旅
大数据·小程序·小程序开发·小程序制作·找搭子·搭子小程序