Elasticsearch核心配置详解与优化

发布于:2025-08-29 ⋅ 阅读:(18) ⋅ 点赞:(0)

Elasticsearch 的核心配置文件主要用于控制节点行为、集群设置、资源分配和日志记录等关键功能。主要配置文件通常位于 ES_HOME/config 目录下,以下是三个最核心的配置文件及其详细说明:


1. elasticsearch.yml

核心集群与节点配置
这是最重要的配置文件,包含集群拓扑、网络、存储、安全等全局设置。

关键配置项:

  • 基础设置:

    cluster.name: my-elastic-cluster  # 集群名称(同一集群所有节点需一致)
    node.name: node-1                 # 当前节点名称(建议唯一)
    
  • 节点角色设置 (ES 7.9+):

    node.roles: [ data, master ]      # 节点角色:data(数据节点), master(主节点), ingest(预处理节点)
    # 生产环境建议分离 master 和 data 角色
    
  • 网络与通信:

    network.host: 192.168.1.10       # 绑定IP(默认localhost,生产需改为实际IP)
    http.port: 9200                  # REST API 端口
    transport.port: 9300             # 节点间通信端口
    discovery.seed_hosts: ["host1", "host2"]  # 集群种子节点列表
    cluster.initial_master_nodes: ["node-1", "node-2"]  # 初始主节点(首次启动时指定)
    
  • 存储路径:

    path.data: /var/data/elasticsearch  # 数据存储目录(可配置多个路径)
    path.logs: /var/log/elasticsearch   # 日志目录
    
  • 安全配置 (X-Pack):

    xpack.security.enabled: true        # 启用基础安全(用户名/密码)
    xpack.security.transport.ssl.enabled: true  # 节点间通信加密
    
  • 内存保护 (防止OOM):

    bootstrap.memory_lock: true          # 锁定内存(避免交换分区影响性能)
    

2. jvm.options

JVM 堆内存与垃圾回收配置
控制 Elasticsearch 进程的内存使用和GC策略。

关键配置:

  • 堆内存大小:

    -Xms4g   # 初始堆内存(建议设为与最大值相同)
    -Xmx4g   # 最大堆内存(不超过物理内存的50%,且不超过30GB)
    

    建议: 生产环境推荐 16-30GB,避免过大引发长GC停顿。

  • 垃圾回收器:

    -XX:+UseG1GC               # Java 8+ 默认推荐
    -XX:MaxGCPauseMillis=500   # 目标GC停顿时间
    
  • 其他优化:

    -Des.index.memory.max_bytes=32gb  # 控制索引内存上限
    

3. log4j2.properties

日志记录配置
控制日志级别、滚动策略和输出格式。

常用配置:

# 日志级别(ERROR, WARN, INFO, DEBUG)
logger.cluster.name = org.elasticsearch.cluster
logger.cluster.level = info

# 日志滚动策略(按日期/大小分割)
appender.rolling.type = RollingFile
appender.rolling.filePattern = ${sys:es.logs.base_path}/${sys:es.logs.cluster_name}_%d{yyyy-MM-dd}.log 
appender.rolling.policies.type = Policies
appender.rolling.policies.size.type = SizeBasedTriggeringPolicy
appender.rolling.policies.size.size = 256MB  # 单个日志文件上限

重要补充配置

  1. 操作系统级优化:

    • 增大文件描述符限制(/etc/security/limits.conf
    • 禁用交换分区(sudo swapoff -a
    • 调整虚拟内存映射(sysctl -w vm.max_map_count=262144
  2. 集群动态设置 (通过API):

    PUT /_cluster/settings
    {
      "persistent": {
        "indices.breaker.fielddata.limit": "60%"  # 字段数据熔断器
      }
    }
    

配置最佳实践

  1. 集群名称唯一性:避免不同集群意外加入。
  2. 绑定真实IPnetwork.host 勿用 0.0.0.0(生产环境)。
  3. JVM内存固定-Xms-Xmx 必须相同。
  4. 分离节点角色:大集群中区分 Master/Data/Ingest 节点。
  5. 定期备份配置:使用 Ansible/Puppet 等工具管理配置版本。

📌 注意:修改配置后需重启节点(部分动态设置可通过API调整)。
详细配置参考官方文档:Elasticsearch Configuration