返回

深度解读Elasticsearch 11个关键配置,助你打造生产就绪集群

后端

配置 Elasticsearch 的终极指南

Elasticsearch 是大数据搜索、日志分析和实时分析领域不可或缺的开源分布式搜索引擎。它以其强大的搜索能力、可扩展性和高可用性而著称。然而,在将 Elasticsearch 部署到生产环境之前,对其进行必要的配置至关重要。

路径设置

路径设置决定了 Elasticsearch 数据、日志和临时文件的存储位置。这些路径应根据实际需求进行调整。默认情况下,Elasticsearch 将数据存储在 /var/lib/elasticsearch 目录下,日志存储在 /var/log/elasticsearch 目录下,临时文件存储在 /tmp 目录下。

elasticsearch.path.data: /my/custom/data/path
elasticsearch.path.logs: /my/custom/logs/path
elasticsearch.path.temp: /my/custom/temp/path

集群名称设置

集群名称用于标识 Elasticsearch 集群。它必须是唯一的,且不能包含空格。默认情况下,Elasticsearch 使用 elasticsearch 作为集群名称。如果有多个 Elasticsearch 集群,则需要为每个集群设置不同的名称。

cluster.name: my-custom-cluster

节点名称设置

节点名称用于标识 Elasticsearch 节点。它必须是唯一的,且不能包含空格。默认情况下,Elasticsearch 使用主机名作为节点名称。如果有多个 Elasticsearch 节点,则需要为每个节点设置不同的名称。

node.name: my-custom-node

网络主机设置

网络主机设置决定了 Elasticsearch 节点对外提供服务的 IP 地址和端口号。默认情况下,Elasticsearch 监听 0.0.0.0 IP 地址和 9200 端口。可以根据实际需求修改这些设置。

network.host: 192.168.1.100
http.port: 9201

发现设置

发现设置决定了 Elasticsearch 节点如何发现彼此。默认情况下,Elasticsearch 使用单播方式进行发现。这意味着每个节点都需要知道其他所有节点的 IP 地址和端口号。如果有多个 Elasticsearch 集群,则需要为每个集群设置不同的发现设置。

discovery.seed_hosts: ["192.168.1.101", "192.168.1.102"]

堆大小设置

堆大小设置决定了 Elasticsearch 进程可以使用多少内存。默认情况下,Elasticsearch 将堆大小设置为 1g。可以根据实际需求修改这个设置。

-Xms1g
-Xmx1g

JVM 堆转储路径设置

JVM 堆转储路径设置决定了 Elasticsearch 在发生 OutOfMemoryError 错误时,将堆转储文件存储到哪里。默认情况下,Elasticsearch 将堆转储文件存储到 /var/log/elasticsearch 目录下。可以根据实际需求修改这个设置。

-XX:HeapDumpPath=/my/custom/heapdump/path

G1GC 设置

G1GC 是 Elasticsearch 默认使用的垃圾回收器。它是一款并行、分代的垃圾回收器,具有较高的吞吐量和较低的延迟。可以根据实际需求调整 G1GC 的设置。

-XX:+UseG1GC
-XX:G1ReservePercent=25
-XX:InitiatingHeapOccupancyPercent=35

线程池设置

线程池设置决定了 Elasticsearch 使用多少线程来处理不同的任务。默认情况下,Elasticsearch 使用以下几个线程池:

  • search:用于处理搜索请求
  • index:用于处理索引请求
  • bulk:用于处理批量请求
  • refresh:用于刷新索引
  • merge:用于合并段

可以根据实际需求调整这些线程池的设置。

thread_pool.search.size: 100
thread_pool.index.size: 100
thread_pool.bulk.size: 100
thread_pool.refresh.size: 100
thread_pool.merge.size: 100

断路器设置

断路器设置决定了 Elasticsearch 在遇到错误时如何处理请求。默认情况下,Elasticsearch 使用以下几个断路器:

  • request:用于处理请求级别的错误
  • circuit:用于处理电路级别的错误
  • node:用于处理节点级别的错误

可以根据实际需求调整这些断路器的设置。

circuit_breaker.request.limit: 100mb
circuit_breaker.circuit.limit: 100mb
circuit_breaker.node.limit: 100mb

索引设置

索引设置决定了 Elasticsearch 如何存储和管理索引。默认情况下,Elasticsearch 使用以下几个索引设置:

  • number_of_shards:决定索引的分片数
  • number_of_replicas:决定索引的副本数
  • refresh_interval:决定索引的刷新间隔
  • merge_policy:决定索引的合并策略

可以根据实际需求调整这些索引设置。

index.number_of_shards: 5
index.number_of_replicas: 1
index.refresh_interval: 1s
index.merge.policy.max_merged_segment: 20mb

结论

通过对以上 11 个关键配置的解读,相信你已经对 Elasticsearch 的配置有了更深入的了解。在实际生产环境中,你需要根据具体需求调整这些配置,以确保 Elasticsearch 能够稳定可靠地运行。

常见问题解答

1. 如何在 Elasticsearch 集群中添加新节点?

  • 编辑集群中现有节点的 elasticsearch.yml 配置文件,在 discovery.seed_hosts 列表中添加新节点的 IP 地址和端口号。
  • 在新节点上安装并启动 Elasticsearch。

2. 如何调整 Elasticsearch 的堆大小?

  • elasticsearch.yml 配置文件中设置 -Xms-Xmx 参数,指定最小和最大堆大小(以兆字节为单位)。

3. 如何配置 Elasticsearch 的断路器设置?

  • elasticsearch.yml 配置文件中设置 circuit_breaker 参数,指定不同级别断路器的限制(以兆字节为单位)。

4. 如何提高 Elasticsearch 的搜索性能?

  • 优化索引设置(如分片数和副本数)
  • 使用过滤器和排序来减少返回的数据量
  • 使用查询缓存来缓存常见的查询结果

5. 如何监控 Elasticsearch 集群的健康状况?

  • 使用 Elasticsearch 的内置监控工具(如 Kibana)
  • 使用第三方监控工具(如 Prometheus 或 Grafana)
  • 检查 Elasticsearch 日志文件以查找错误或警告消息