Elasticsearch搜索引擎集群搭建完整教程

写在前面

Elasticsearch(简称ES)是当下最流行的开源搜索引擎,常用于日志分析、站内搜索、数据聚合等场景。
但单节点一旦宕机,搜索服务就彻底中断,所以搭建ES集群是生产环境的基本要求。
本文从零开始,带你完成一套最小可用集群,所有命令都可直接复制执行。

---

搭建前需要确认的几件事

  1. 服务器数量:至少2台(推荐3台),每台内存≥2GB(ES非常吃内存)。
  2. 操作系统:CentOS 7/8 或 Ubuntu 20.04+,自带防火墙暂不干扰。
  3. JDK版本:ES 7.x 要求 JDK 11 或更高;ES 8.x 自带 JDK 无需额外安装。这里以 ES 7.17.7 为例,需先配置 Java 环境。
  4. 时间同步:所有服务器时间必须一致,否则节点无法正常通信。
如果使用宝塔面板,建议先切换到系统命令行环境进行操作,ES 集群搭建不推荐在面板内直接配置。

---

一步步搭建 Elasticsearch 集群

1. 在每个节点上执行相同的安装操作

# 下载ES(选择7.17.7版本)
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.7-linux-x86_64.tar.gz

# 解压到 /usr/local 下
sudo tar -zxvf elasticsearch-7.17.7-linux-x86_64.tar.gz -C /usr/local/
sudo mv /usr/local/elasticsearch-7.17.7 /usr/local/elasticsearch

# 创建运行ES的用户(不能用root启动)
sudo useradd -m -s /bin/bash esuser
sudo chown -R esuser:esuser /usr/local/elasticsearch

2. 修改核心配置文件 elasticsearch.yml

# 进入配置目录
cd /usr/local/elasticsearch/config
sudo vim elasticsearch.yml

在每个节点的配置文件中追加以下内容(注意根据节点IP修改):

# 集群名称(所有节点必须一致)
cluster.name: my-es-cluster

# 节点名称(每个节点不同,建议用主机名)
node.name: node-1

# 绑定IP,0.0.0.0表示监听所有网卡
network.host: 0.0.0.0

# 集群通信端口(默认9300)
transport.tcp.port: 9300

# 发现种子节点(填写所有候选节点的IP:9300)
discovery.seed_hosts: ["192.168.1.10:9300", "192.168.1.11:9300", "192.168.1.12:9300"]

# 初始主节点候选(第一次启动时筛选主节点)
cluster.initial_master_nodes: ["node-1", "node-2", "node-3"]
注意:cluster.initial_master_nodes 只在集群第一次启动时生效,后续重启不要改动此配置。

3. 调整系统参数(非常重要)

ES 运行时需要大量文件描述符和内存映射区域,否则启动会报错。

# 修改 /etc/security/limits.conf 末尾添加
echo "esuser soft nofile 65536" >> /etc/security/limits.conf
echo "esuser hard nofile 65536" >> /etc/security/limits.conf
echo "esuser soft nproc 4096" >> /etc/security/limits.conf
echo "esuser hard nproc 4096" >> /etc/security/limits.conf

# 修改 /etc/sysctl.conf 末尾添加
echo "vm.max_map_count=262144" >> /etc/sysctl.conf
# 立即生效
sysctl -p

4. 启动每个节点

# 切换为 esuser 用户
su - esuser
# 启动ES(后台运行)
/usr/local/elasticsearch/bin/elasticsearch -d -p /tmp/es.pid

启动后可以使用 tail -f /usr/local/elasticsearch/logs/my-es-cluster.log 查看启动日志。

---

避坑指南与高频问题

常见报错:max file descriptors [4096] for elasticsearch process is too low

原因:系统限制过低。
解决:检查 /etc/security/limits.conf 中 esuser 的 nofile 是否设为 65536,重启 session 后重试。

常见报错:bootstrap check failure [1] of [2]: max virtual memory areas vm.max_map_count [65530] is too low

直接用上面的 sysctl -w vm.max_map_count=262144 即可。

节点一直无法加入集群?

  1. 确保所有节点防火墙放行 9300/tcp9200/tcp(9200是HTTP API端口)。
  2. 检查各节点 elasticsearch.ymlcluster.name 是否完全一致(包括大小写)。
  3. 主节点配置 cluster.initial_master_nodes 里填写的节点名称必须与 node.name 一一对应。

内存占用过高怎么办?

默认ES会占用机器一半的物理内存,如果服务器内存只有2GB,请在 jvm.options 中调小堆内存:

# 修改 /usr/local/elasticsearch/config/jvm.options
-Xms512m
-Xmx512m

重启后生效。

---

验证Elasticsearch搜索引擎集群是否搭建成功

执行以下命令,查看集群健康状态:

curl -XGET 'http://192.168.1.10:9200/_cluster/health?pretty'

如果返回 "status" :
"green"
表示集群完全正常;yellow 表示有副本分片未分配(通常是因为只有一个节点,
不影响使用);red 表示有主分片丢失,
需要检查日志。

各节点信息可以通过以下命令查看:

curl -XGET 'http://192.168.1.10:9200/_cat/nodes?v'

出现列表就说明所有节点已成功加入集群。

---

总结

完成上述步骤后,你的Elasticsearch搜索引擎集群搭建就已经落地了。
现在你可以通过Kibana连接集群,或者直接在应用中调用 RESTful API 写入和搜索数据。
如果你是第一次搭建,建议先按本文步骤一步一步来,遇到报错优先对照“避坑指南”部分,大部分问题都能自己解决。
集群稳定后,别忘了配置系统守护进程(systemd)和定期快照备份,这才是生产环境的长久之计。

分享到:
上一篇
MongoDB数据库部署优化教程:从安装到性能调优完整指南
下一篇
云原生Docker Compose实战用法
1
系统公告

高考专属福利来袭|凭准考证免费领香港 CN2 云服务器

值高考落幕之际,泽御云开启考生专属回馈 + 产品限时特惠双重活动,助力学子暑期学习建站 高考 考生专属福利 全体应届高考生,凭高考准考证即可免费申领【香港 CN2 轻量云服务器,4 核 4G AMD 处理器】,免费使用周期 30 天,可用于搭建个人站点、编程实操、技术实训,祝各位考生金榜题名,前程似锦! 泽御云资质齐全合规自营机房,线路覆盖香港 CN2、国内 BGP、内蒙电信、美国精品线路,售后全天候技术支持。 官方网站:www.zeyuyun.com,活动限时有效,优惠逾期不再保留。
服务中心
客服
在线客服
24小时为您服务
咨询
联系我们
联系我们,为您的业务提供专属服务。
24/7 技术支持
如果您遇到寻求进一步的帮助,请过工单与我们进行联系。
24/7 即时支持
泽御云
售前客服
泽御云
泽御云
售后客服
泽御云
技术支持
评价
您对当前页面的整体感受是否满意?
😞
非常不满意
😕
不满意
😐
一般
🙂
满意
😊
非常满意