ElasticSearch深入解析(六):集群核心配置

1.开发模式和生产模式

Elasticsearch默认运行在开发模式下,此模式允许节点在配置存在错误时照常启动,仅将警告信息写入日志文件。而生产模式则更为严格,一旦检测到配置错误,节点将无法启动,这是一种保障系统稳定性的安全机制。

两种模式的区分关键在于network.host的配置:当修改该参数的默认值后,系统会自动从开发模式切换至生产模式。一般来说,个人搭建测试集群时,推荐使用开发模式;若处于企业级正式环境,则必须采用生产模式以确保系统安全可靠。

2.Linux前置配置

ElasticSearch的部署过程一般都是基于Linux操作系统进行的。

为了实现快速部署,我们要修改如下的基础配置:

(1)修改文件描述符数目

为什么要修改该配置呢?

首先,Elasticsearch在节点和HTTP客户端之间进行通信使用了大量的套接字,而套接字需要足够的文件描述符支持。其次,在许多Linux发行版本中,每个进程默认有1024个文件描述符,这对Elasticsearch节点来说实在是太低了,何况该节点要处理数以百计的索引,所以要调大这个默认值。

  • 设置环境变量:设定同时打开文件数的最大值为65535,并使命令生效。
vim /etc/profile
ulimit -n 65535
source /etc/profile
  • 修改limits.conf配置文件:在/etc/security/limits.conf增加如下内容,限制打开文件数为65535。
soft nofile 65535
hard nofile 65535
  • 验证修改操作是否成功:切换到elastic用户,使用ulimit-a查看是否修改成功。
ulimit -a

(2)修改最大映射数量

Elasticsearch对各种文件混合使用了niofs(非阻塞文件系统)和mmapfs(内存映射文件系统)​,以实现对各种文件的优化处理。为了保证系统的顺畅运行,需要合理配置最大映射数量(MMP),以便有足够的虚拟内存可用于内存映射的文件。

关于niofs(非阻塞文件系统)和mmapfs(内存映射文件系统)的说明可以看最后一章的说明。

  • 一种设置方式如下:
sysctl -w vm.max_map_count=262144
  • 另一种设置方式则是在/etc/sysctl.conf修改vm.max_map_count,执行sysctl-p来使修改生效:
tail -f /etc/sysctl.conf
vm.max_map_count=262144

3.elasticsearch.yml配置文件解读

在这里插入图片描述

在这里插入图片描述

path.data配置注意事项:
1)不要修改data路径下的任何文件,手动修改会有数据损坏或丢失的风险。
2)不要尝试对数据目录进行备份,因为Elasticsearch不支持文件备份后的恢复操作。
3)使用快照snapshot命令对集群进行备份,使用restore命令进行恢复。
4)不要对数据路径进行病毒扫描,病毒扫描可能会阻止Elasticsearch工作,甚至修改数据目录内容。

4.jvm.option配置文件解读

Elasticsearch的堆内存配置在性能调优中非常重要。以下是一些关于Elasticsearch堆内存配置的要点:

  • 分配合适的堆内存大小
    Elasticsearch的堆内存大小直接影响其性能。如果设置得太小,可能查询时内存不够而导致服务宕机;如果设置得太大,又会超过JVM用于压缩对象指针的阈值而导致内存浪费。建议将堆大小配置为服务器可用内存的50%,但不要超过30GB(压缩对象指针的阈值)。过小的堆内存会导致频繁的垃圾回收,而过大的堆内存可能会导致长时间的垃圾回收暂停,影响性能。
-Xms4g
-Xmx4g

Xms代表最小的堆内存大小,Xmx代表最大的堆内存大小,这两个值必须设置成一样的。

问题:为什么说堆内存不要超过机器内存的一半?

在Elasticsearch的性能优化中,内存分配是关键一环,而其中最需要平衡的是两大内存使用者:Elasticsearch堆Lucene
内存分配的本质是“协作而非独占”:Elasticsearch的性能优化并非“堆越大越好”,而是需要平衡自身运算需求与Lucene的缓存需求。通过为操作系统保留足够内存,让Lucene借助系统级缓存加速数据访问,才能实现整体性能的最大化。

(1)堆(Heap):ES的“运算大脑”
  • 作用:堆是Elasticsearch自身的内存空间,用于存储各类动态数据结构(如缓存、实时数据等),支持快速读写操作。
  • 重要性:堆的大小直接影响ES的实时处理能力,但若分配过大,会导致垃圾回收(GC)变慢,反而拖累性能。
(2)Lucene:依赖操作系统的“静态数据仓库”

Lucene是ES底层的搜索引擎库,其设计理念是利用操作系统的内存缓存机制来优化性能,核心特点如下:

  • 数据存储形式:Lucene将数据存储在**不可变的段文件(Segment Files)**中(例如倒排索引、正排索引)。
    • 倒排索引:用于全文搜索(如关键词匹配);
    • 正排索引:用于聚合统计(如数值计算、分组分析)。
  • 缓存优势:由于段文件一旦生成就不会修改,操作系统会自动将频繁访问的“热段”缓存到内存中,实现快速读取。
  • 关键依赖:Lucene的性能高度依赖操作系统的内存分配。如果ES占用了全部内存,Lucene将无法利用缓存,导致搜索和聚合速度大幅下降。
(3)内存分配的黄金法则:50% vs 50%
  • 标准策略
    将服务器可用内存的 50% 分配给ES堆,剩余 50% 留给操作系统(供Lucene缓存使用)
    • 例:若服务器有32GB内存,ES堆设为16GB,剩下16GB由操作系统管理,用于缓存Lucene段文件。
  • 背后逻辑
    • 留给Lucene的“空闲内存”并非真正空闲,而是由操作系统自动调度,优先缓存高频访问的数据段,提升查询效率;
    • 限制堆大小可避免ES因内存过大导致GC卡顿,同时让Lucene充分利用系统级缓存,实现“双优”平衡。
(4)进阶优化:按需缩减堆大小

如果业务场景满足以下条件,可进一步减少堆内存:

  • 无需对文本字段做聚合(如关闭text类型的fielddata功能)。
  • 优化效果
    • 更小的堆 → 更快的GC效率(减少停顿时间);
    • 更多内存留给Lucene → 更多段文件被缓存,搜索和索引性能进一步提升。

5.附

(1)什么是niofs(非阻塞文件系统)

NIOFS(非阻塞文件系统)通常指基于 非阻塞I/O(Non-blocking I/O)技术 实现的文件系统或文件操作机制,其核心特点是允许在文件读写等操作过程中无需等待操作完成,即可继续处理其他任务,从而提升系统在高并发场景下的效率。

核心概念解析:

  1. 非阻塞I/O(NIO)
    传统文件操作(如Java的InputStream/OutputStream)是阻塞式的:当程序读取或写入文件时,会一直等待操作完成,期间无法执行其他任务。
    而NIO技术通过 通道(Channel)缓冲区(Buffer) 实现异步操作,允许程序在等待文件操作时继续处理其他逻辑(如通过事件监听机制通知操作完成),显著减少线程阻塞带来的性能损耗。

  2. NIOFS的典型应用
    在Java生态中,java.nio.file包(NIO.2)提供了基于NIO的文件系统API(如PathFiles类),支持异步文件操作(如异步读取、写入、文件属性查询等)。虽然底层文件系统(如EXT4、NTFS)本身仍是阻塞的,但通过NIO库的封装,上层应用可实现非阻塞的文件操作逻辑。

  3. 核心优势

    • 高并发处理:适用于需要同时处理大量文件I/O的场景(如分布式文件系统、日志处理系统),避免线程因阻塞而被占用。
    • 资源利用率:减少线程等待时间,降低内存和CPU资源消耗。
    • 灵活性:支持更细粒度的文件操作控制(如文件锁、符号链接处理等)。

与传统阻塞文件系统的对比:

特性阻塞式文件系统NIOFS(非阻塞文件系统)
操作方式同步阻塞,需等待操作完成异步非阻塞,可注册回调或事件监听
线程占用每个I/O操作需独立线程或阻塞当前线程少量线程可处理大量并发I/O
适用场景简单、低并发的文件操作高并发、高性能要求的复杂文件操作

注意事项:

  • 异步编程复杂度:NIOFS需要配合事件循环、回调机制或异步框架(如Java的CompletionService)使用,代码逻辑较传统阻塞方式更复杂。
  • 底层限制:实际性能受限于物理文件系统的特性(如机械硬盘的寻道延迟难以通过NIO完全规避),固态存储(SSD)可更好发挥NIO优势。

NIOFS的本质是通过软件层面的设计(非阻塞API)优化文件操作的并发处理能力,而非特指某一种独立的物理文件系统,其核心价值在于提升应用层面对文件I/O的高效管理。

(2)什么是mmapfs(内存映射文件系统)

mmapfs并非独立的物理文件系统,而是一种通过 内存映射(Memory Mapping)技术 实现的文件操作机制。它将磁盘文件的内容直接映射到进程的虚拟地址空间,使应用程序能像访问内存一样读写文件,无需显式执行I/O系统调用(如read/write),从而大幅提升文件访问效率,尤其适用于大文件处理和高并发场景。

核心原理:内存映射技术(mmap)

  1. 系统调用实现
    通过操作系统提供的 mmap 系统调用(如Linux的mmap、Windows的CreateFileMapping),将文件的全部或部分内容映射到进程的虚拟内存地址空间。映射后,文件的逻辑结构与内存地址一一对应,对内存的修改会根据策略同步到磁盘文件(支持“写时复制”或实时同步)。

  2. 零拷贝(Zero-Copy)
    传统文件I/O需在用户空间与内核空间之间多次拷贝数据(如read→用户缓冲区→write→内核缓冲区),而内存映射直接在内核空间完成文件与内存的映射,用户进程可直接操作内存地址,减少数据拷贝开销,提升I/O性能。

核心特点与优势

特性说明
访问方式像操作内存一样读写文件(通过指针或内存地址),无需显式I/O系统调用。
性能优势- 减少用户态与内核态的上下文切换和数据拷贝,适合大文件随机访问(如数据库索引)。
- 支持多进程共享映射文件,实现高效的进程间通信(IPC)。
内存与文件同步- 私有映射(Private Mapping):修改内存不影响原文件(写时复制,Copy-on-Write)。
- 共享映射(Shared Mapping):修改内存会同步到文件,适合多进程数据共享。
适用场景- 大文件分块处理(如日志分析、视频处理)。
- 数据库系统(如MySQL的InnoDB缓冲池、Elasticsearch的mmap索引)。
- 高频次随机读写场景(避免lseek+read的低效组合)。

与传统文件I/O、内存文件系统的对比

  1. vs 传统文件I/O(read/write

    • 传统方式:每次读写需系统调用,数据在用户空间与内核空间来回拷贝,适合小文件或顺序读写。
    • mmapfs:通过内存地址直接操作,减少系统调用和数据拷贝,适合大文件随机读写,但需注意内存占用(映射文件大小受限于进程虚拟地址空间)。
  2. vs 内存文件系统(如Linux的tmpfs

    • tmpfs:完全基于内存的文件系统,数据不持久化到磁盘,适合临时文件存储。
    • mmapfs:映射的是磁盘文件,数据会持久化,本质是优化文件访问方式,而非独立的文件系统。

典型应用与注意事项

应用示例
  • 编程语言支持:Java的MappedByteBuffer、C的mmap函数、Python的mmap模块均提供内存映射文件接口。
  • 数据库场景:MySQL使用内存映射读取数据文件,Elasticsearch通过mmap映射Lucene索引文件以加速检索。
  • 日志处理:实时分析大日志文件时,通过内存映射避免逐行读取的I/O开销。
注意事项
  • 内存占用:映射大文件可能消耗大量内存,需避免内存溢出(可通过PROT_READ等标志限制访问权限)。
  • 同步策略:依赖操作系统的msyncmunmap控制数据落盘,需注意数据一致性(如异常断电可能导致未同步数据丢失)。
  • 边界限制:映射区域需与文件大小对齐,访问越界可能导致段错误(Segmentation Fault)。
  • 操作系统差异:不同系统对mmap的实现和限制不同(如Linux的MAP_SHARED/MAP_PRIVATE标志,Windows的文件映射对象)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/77785.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Prometheus-MySQL Exporter安装配置指南,开机自启】

目录 1. 创建 MySQL 监控用户2. 配置 MySQL 认证文件3. 安装 mysqld_exporter4. 配置 Systemd 服务5. 启动并验证服务6. 修改Prometheus配置常见错误排查错误现象排查步骤 6. 验证监控数据关键注意事项 7. Grafana看板 1. 创建 MySQL 监控用户 mysql -uroot -p123456 # 登录M…

redis未授权访问漏洞学习

一、Redis常见用途 1. Redis介绍 全称与起源: Redis全称Remote Dictionary Service(远程字典服务),最初由antirez在2009年开发,用于解决网站访问记录统计的性能问题。发展历程: 从最初仅支持列表功能的内存数据库,经过十余年发展已支持多种…

4.27搭建用户界面

更新 router下面的index.js添加新的children 先区分一下views文件夹下的不同vue文件: Home.vue是绘制home页面的所有的表格。 Main.vue是架构头部和左侧目录的框架的。 研究一下这个routes对象,就可以发现重定向redirect的奥妙所在,我们先把…

【MySQL】(8) 联合查询

一、联合查询的作用 由于范式的规则,数据分到多个表中,想要查询完整的信息,就需要联合查询多张表。比如查询学生的学生信息和所在班级的信息,就需要联合查询学生表和班级表。 二、联合查询过程 案例:查询学生姓名为孙…

图漾官网Sample_V1版本C++语言完整参考例子---单相机版本

文章目录 1.参考例子 主要梳理了图漾官网Sample_V1版本的例子 1.参考例子 主要增加了从storage区域读取相机参数的设置,使用图漾PercipioViewer软件,如何将相机参数保存到srorage区,可参考链接:保存相机参数操作 保存参数设置 注…

关于本地端口启动问题

如何启动一个本地端口 1. Node.js (使用Express框架) 使用node.js的方法 注意:下列bash命令最好在管理员权限运行的cmd窗口中进行,否则可能会有权限错误 首先,确保您已经安装了Node.js和npm。然后,创建一个新的Node.js项目并安…

产销协同的作用是什么?又如何对各部门发挥作用?

目录 一、产销协同的对象有哪些? 1. 客户需求 2. 市场趋势 3. 供应链伙伴 4. 企业战略目标 二、产销协同的作用是什么? 1. 提高客户满意度 2. 降低企业成本 3. 增强市场竞争力 4. 优化资源配置 三、产销协同对各部门怎么发挥作用?…

React Router v7 从入门到精通指南

一、设计思想与核心原理 1. 设计哲学 组件即路由&#xff1a;路由以 <Route> 组件形式声明&#xff0c;与 React 组件树深度集成声明式导航&#xff1a;通过 <Link> 和 useNavigate 实现无刷新路由跳转动态匹配机制&#xff1a;路径参数、通配符、优先级匹配规则…

Python爬虫实战:获取网yi新闻网财经信息并做数据分析,以供选股做参考

一、引言 在财经领域,股市信息对投资者意义重大。网yi新闻作为知名新闻资讯平台,其股市板块蕴含丰富的最新股市热点信息。然而,依靠传统人工方式从海量网页数据中获取并分析这些信息,效率低下且难以全面覆盖。因此,利用爬虫技术自动化抓取相关信息,并结合数据分析和机器…

Spring Boot Actuator - 应用监控与管理

一、 Spring Boot Actuator 概述 Spring Boot Actuator是Spring Boot 提供的生产级监控与管理工具集&#xff0c;用于实时监控和运维管理应用。Actuator 通过HTTP 端点&#xff08;或 JMX 端点&#xff09;暴露应用的健康状态、性能指标、日志信息、环境配置等关键数据&#x…

不同类型插槽的声明方法和对应的调用方式

在 Vue 3 中&#xff0c;slot 用于让组件的使用者可以向组件内部插入自定义内容。Vue 3 提供了多种声明和使用插槽的方式&#xff0c;下面为你详细介绍不同类型插槽的声明方法和对应的调用方式。 1. 匿名插槽 声明方法 在组件模板中直接使用 标签来定义匿名插槽&#xff0c;它可…

DeepSeek 联手 Word,开启办公开挂模式

目录 一、DeepSeek 与 Word 结合的神奇之处二、前期准备&#xff0c;万事俱备2.1 了解 DeepSeek2.2 确认软件版本2.3 账号与密钥获取 三、接入方法全解析3.1 OfficeAI 插件接入3.1.1 下载与安装插件3.1.2 配置 API 密钥 3.2 VBA 宏接入3.2.1 启用开发者工具3.2.2 调整信任设置3…

云钥科技红外短波工业相机

云钥科技的红外短波相机是一款基于短波红外&#xff08;SWIR&#xff0c;波长范围约1-3微米&#xff09;技术的成像设备&#xff0c;专为高精度检测、全天候成像及特殊场景应用设计。以下从核心技术、性能参数、应用场景及产品优势等方面进行详细介绍&#xff1a; ​​一、核心…

得物 小程序 6宫格 分析

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff01; 逆向过程 部分python代码 if result …

第十六届蓝桥杯 2025 C/C++B组 第二轮省赛 全部题解(未完结)

目录 前言&#xff1a; 试题A&#xff1a;密密摆放 试题B&#xff1a;脉冲强度之和 试题C&#xff1a;25之和 试题D&#xff1a;旗帜 试题H&#xff1a;破解信息 前言&#xff1a; 这是我后续刷到的第二轮省赛的题目&#xff0c;我自己也做了一下&#xff0c;和第一轮省赛…

conda和bash主环境的清理

好的&#xff01;要管理和清理 Conda&#xff08;或 Bash&#xff09;安装的包&#xff0c;可以按照以下步骤进行&#xff0c;避免冗余依赖&#xff0c;节省磁盘空间。 &#x1f4cc; 1. 查看已安装的包 先列出当前环境的所有安装包&#xff0c;找出哪些可能需要清理&#xff…

【Linux】服务自启动设置的方式

关于服务自启动设置的方式,本文将介绍两种方法。分别是systemd服务单元文件的配置和起容器的方式。 目录 1 systemd服务单元文件的配置 [Unit] 部分 [Service] 部分 [Install] 部分 2 docker 1 systemd

面试篇 - LoRA(Low-Rank Adaptation) 原理

1. 问题背景 大模型微调的挑战&#xff1a; 预训练模型&#xff08;如GPT-3、LLaMA&#xff09;参数量巨大&#xff08;数十亿至万亿级&#xff09;&#xff0c;直接微调所有参数&#xff1a; 计算开销大&#xff1a;需更新全部权重&#xff0c;GPU显存不足。 存储冗余&#…

Flink Docker Application Mode 命令解析

Flink官方提供的 Docker 运行 Flink Application Mode 模式&#xff0c;逐句解读含义&#xff0c;并且给予操作实例&#xff1a; 以下是 Flink 官方提供的 Docker 命令&#xff0c;用于在 Application Mode 下运行 Flink Job&#xff08;standalone-job 作为 JobManager&#…

20250427 对话1: 何东山的宇宙起源理论

对话1: 何东山的宇宙起源理论 以下内容综述了何东山团队有关宇宙起源的主要理论成果、方法体系及其学术影响。 何东山团队基于惠勒-德威特方程&#xff08;Wheeler–DeWitt Equation, WDWE&#xff09;和德布罗意–玻姆量子轨道理论&#xff0c;推导出带有额外“量子势”项的…