首页 人工智能

手把手教你搭建高性能 Elasticsearch 集群(附亲测避坑指南)

分类:人工智能
字数: (8632)
阅读: (0470)
内容摘要:手把手教你搭建高性能 Elasticsearch 集群(附亲测避坑指南),

在互联网应用中,搜索引擎是不可或缺的一部分。Elasticsearch 作为一款基于 Lucene 的分布式、RESTful 风格的搜索和分析引擎,被广泛应用于日志分析、全文检索、监控等场景。本文将结合实际经验,分享 Elasticsearch 搭建 的完整过程,并提供亲测有效的避坑指南,助力你快速构建稳定可靠的搜索服务。

1. 单机 Elasticsearch 搭建

1.1 环境准备

  • 操作系统: CentOS 7.x / Ubuntu 18.04+
  • JDK: JDK 1.8+ (推荐 JDK 11 或 JDK 17)
  • Elasticsearch 版本: 7.x 或 8.x (本文以 7.17 为例)

1.2 下载与安装

从 Elasticsearch 官网下载对应版本的安装包,例如 .tar.gz.rpm 文件。

使用 .tar.gz 安装:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.0-linux-x86_64.tar.gz
tar -zxvf elasticsearch-7.17.0-linux-x86_64.tar.gz
cd elasticsearch-7.17.0

使用 .rpm 安装:

手把手教你搭建高性能 Elasticsearch 集群(附亲测避坑指南)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.0-x86_64.rpm
sudo rpm -i elasticsearch-7.17.0-x86_64.rpm

1.3 配置 Elasticsearch

编辑 config/elasticsearch.yml 文件,进行必要的配置。以下是一些常用的配置项:

cluster.name: my-application  # 集群名称,所有节点必须一致
node.name: node-1          # 节点名称,每个节点必须唯一
network.host: 0.0.0.0       # 监听地址,允许所有 IP 访问
http.port: 9200             # HTTP 端口
discovery.seed_hosts: ["node-1"] # 发现节点,单机模式可设置为当前节点
cluster.initial_master_nodes: ["node-1"] # 初始化主节点,单机模式可设置为当前节点

1.4 启动 Elasticsearch

./bin/elasticsearch  # 前台启动,方便查看日志
./bin/elasticsearch -d # 后台启动

访问 http://localhost:9200,如果看到 Elasticsearch 的相关信息,则表示安装成功。

2. Elasticsearch 集群搭建

2.1 集群规划

一个 Elasticsearch 集群至少需要 3 个节点,才能保证高可用性。通常建议采用奇数个节点,例如 3 个或 5 个。

手把手教你搭建高性能 Elasticsearch 集群(附亲测避坑指南)
  • Master 节点: 负责集群的管理和协调,例如索引创建、节点加入等。通常选举产生,不建议承担数据存储任务。
  • Data 节点: 负责存储数据和执行搜索请求。
  • Client 节点: 负责接收客户端请求,并将请求转发到 Data 节点。本身不存储数据。

2.2 节点配置

修改每个节点的 elasticsearch.yml 文件,配置集群相关的参数。

Master 节点配置:

cluster.name: my-application
node.name: master-1
node.master: true
node.data: false
network.host: 192.168.1.101 # 替换为实际 IP 地址
http.port: 9200
discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"] # 集群所有 Master 节点的 IP 地址
cluster.initial_master_nodes: ["master-1", "master-2", "master-3"] # 集群所有 Master 节点的名称

Data 节点配置:

手把手教你搭建高性能 Elasticsearch 集群(附亲测避坑指南)
cluster.name: my-application
node.name: data-1
node.master: false
node.data: true
network.host: 192.168.1.104 # 替换为实际 IP 地址
http.port: 9200
discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"] # 集群所有 Master 节点的 IP 地址

Client 节点配置:

cluster.name: my-application
node.name: client-1
node.master: false
node.data: false
node.ingest: false #关闭ingest角色,减轻client节点压力
network.host: 192.168.1.105 # 替换为实际 IP 地址
http.port: 9200
discovery.seed_hosts: ["192.168.1.101", "192.168.1.102", "192.168.1.103"] # 集群所有 Master 节点的 IP 地址

2.3 启动集群

依次启动所有节点。可以通过 Elasticsearch Head 或 Kibana 等工具查看集群状态。

3. Elasticsearch 性能优化

3.1 JVM 堆大小设置

根据服务器内存大小,合理设置 JVM 堆大小。建议设置为服务器内存的一半,但不要超过 32GB。

手把手教你搭建高性能 Elasticsearch 集群(附亲测避坑指南)

修改 config/jvm.options 文件:

-Xms16g
-Xmx16g

3.2 索引优化

  • 合理选择分片数量: 分片数量过多会导致资源浪费,分片数量过少会导致搜索性能下降。建议根据数据量和查询负载进行调整。
  • 使用合适的分析器: 分析器决定了如何将文本转换为词项。选择合适的分析器可以提高搜索精度和召回率。常用的分析器有 standardik_max_wordik_smart 等。
  • 优化 Mapping 设置: Mapping 定义了索引的结构和字段类型。合理设置 Mapping 可以提高存储效率和搜索性能。

3.3 查询优化

  • 避免使用通配符查询: 通配符查询性能较低,尽量避免使用。
  • 使用 Filter Context: Filter Context 不计算相关性得分,性能更高。
  • 使用 Cache: 合理使用 Query Cache 和 Request Cache 可以提高查询速度。

3.4 硬件优化

  • 使用 SSD: SSD 比传统机械硬盘具有更高的读写速度,可以显著提高 Elasticsearch 的性能。
  • 增加内存: 增加内存可以提高 Elasticsearch 的缓存命中率,从而提高搜索速度。
  • 使用多核 CPU: 多核 CPU 可以提高 Elasticsearch 的并发处理能力。

4. Elasticsearch 常见问题及避坑指南

  • 启动失败: 检查 JDK 版本、配置文件是否正确、端口是否被占用等。
  • 集群脑裂: 确保所有节点的 discovery.seed_hostscluster.initial_master_nodes 配置正确。避免网络分区。
  • OutOfMemoryError: 检查 JVM 堆大小设置是否合理,是否存在内存泄漏。
  • 搜索性能慢: 检查索引和查询是否需要优化,硬件资源是否充足。
  • 文件描述符限制: Linux 默认的文件描述符限制较低,在高并发场景下可能会导致问题。需要修改 /etc/security/limits.conf 文件,增加文件描述符的限制。
* soft nofile 65536
* hard nofile 65536

5. 与 Nginx 集成

在生产环境中,通常会将 Elasticsearch 集群部署在 Nginx 反向代理之后,实现负载均衡和安全访问。 可以通过宝塔面板快速搭建 Nginx 环境,并配置反向代理。

Nginx 配置示例如下:

upstream elasticsearch {
  server 192.168.1.104:9200;
  server 192.168.1.105:9200;
  server 192.168.1.106:9200;
}

server {
  listen 80;
  server_name yourdomain.com;

  location / {
    proxy_pass http://elasticsearch;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

此外,还需要关注 Nginx 的并发连接数配置,以应对高并发场景。

通过以上步骤,相信你已经掌握了 Elasticsearch 的搭建和优化技巧。在实际应用中,还需要根据具体场景进行调整和优化。希望本文能帮助你快速构建高性能的搜索服务。

手把手教你搭建高性能 Elasticsearch 集群(附亲测避坑指南)

转载请注明出处: 代码一只喵

本文的链接地址: http://m.acea4.store/blog/944656.SHTML

本文最后 发布于2026-04-14 09:09:03,已经过了13天没有更新,若内容或图片 失效,请留言反馈

()
您可能对以下文章感兴趣
评论
  • 雪碧透心凉 3 天前
    分片数量如何确定呢?有没有什么推荐的计算公式或者经验值?