当前位置:首页 > 问答 > 正文

Elasticsearch 搜索引擎指南 Linux下安装Elasticsearch详细教程

Linux下安装Elasticsearch详细指南:从零搭建搜索引擎

场景引入:为什么需要Elasticsearch?

想象一下你正在开发一个电商网站,商品数量已经突破百万级别,用户抱怨搜索"男士运动鞋"要等5秒才能出结果,运营团队说他们需要实时查看销售数据做促销活动,而你的MySQL数据库已经不堪重负...

这时候就该Elasticsearch登场了!这个基于Lucene的搜索引擎能以毫秒级速度处理海量数据,支持全文检索、结构化查询和分析,今天我就手把手教你在Linux系统上安装和配置Elasticsearch,让你也能拥有像淘宝、京东那样的搜索体验。

准备工作

在开始之前,我们需要确保系统满足基本要求:

  • Linux系统(本文以Ubuntu 22.04为例,CentOS/RHEL也适用)
  • Java环境(Elasticsearch 8.x需要Java 17或更高版本)
  • 至少4GB内存(生产环境建议8GB以上)
  • 2核CPU(生产环境建议4核以上)
  • 10GB可用磁盘空间

第一步:安装Java环境

打开终端,先检查是否已安装Java:

java -version

如果显示"command not found"或版本低于17,就需要安装:

sudo apt update
sudo apt install openjdk-17-jdk

安装完成后再次验证:

java -version

应该能看到类似这样的输出:

openjdk version "17.0.8" 2025-07-18
OpenJDK Runtime Environment (build 17.0.8+7-Ubuntu-0ubuntu122.04)
OpenJDK 64-Bit Server VM (build 17.0.8+7-Ubuntu-0ubuntu122.04, mixed mode, sharing)

安装Elasticsearch

使用APT仓库安装(推荐)

这是最简单的安装方式,适合大多数用户:

导入Elasticsearch GPG密钥:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg

添加APT仓库:

echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list

更新软件包索引并安装:

sudo apt update
sudo apt install elasticsearch

手动下载.deb包安装

如果无法使用APT仓库,也可以手动下载安装:

Elasticsearch 搜索引擎指南 Linux下安装Elasticsearch详细教程

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.0-amd64.deb
sudo dpkg -i elasticsearch-8.12.0-amd64.deb

配置Elasticsearch

安装完成后,我们需要进行一些基本配置:

打开配置文件:

sudo nano /etc/elasticsearch/elasticsearch.yml

修改以下关键配置(根据你的需求调整):

# 集群名称,同一集群内的节点名称必须相同
cluster.name: my-elasticsearch-cluster
# 节点名称,每个节点应该不同
node.name: node-1
# 数据存储路径
path.data: /var/lib/elasticsearch
# 日志存储路径
path.logs: /var/log/elasticsearch
# 绑定地址,0.0.0.0表示监听所有网络接口
network.host: 0.0.0.0
# HTTP端口
http.port: 9200
# 初始主节点列表
cluster.initial_master_nodes: ["node-1"]

调整JVM堆内存大小(根据服务器内存调整):

sudo nano /etc/elasticsearch/jvm.options

找到并修改以下行(建议不超过物理内存的50%):

-Xms2g
-Xmx2g

启动Elasticsearch服务

配置完成后,启动服务并设置开机自启:

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

检查服务状态:

sudo systemctl status elasticsearch

如果一切正常,你应该能看到"active (running)"的状态。

验证安装

让我们测试一下Elasticsearch是否正常运行:

curl -X GET "localhost:9200/"

如果安装成功,你会看到类似这样的JSON响应:

{
  "name" : "node-1",
  "cluster_name" : "my-elasticsearch-cluster",
  "cluster_uuid" : "abcdefgh-1234-5678-ijkl-mnopqrstuvwx",
  "version" : {
    "number" : "8.12.0",
    "build_flavor" : "default",
    "build_type" : "deb",
    "build_hash" : "abcdef1234567890",
    "build_date" : "2025-07-15T12:34:56.789Z",
    "build_snapshot" : false,
    "lucene_version" : "9.8.0",
    "minimum_wire_compatibility_version" : "7.17.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "You Know, for Search"
}

安全配置

Elasticsearch 8.x默认启用了安全功能,我们需要设置密码:

重置elastic用户密码:

Elasticsearch 搜索引擎指南 Linux下安装Elasticsearch详细教程

sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

按照提示输入新密码并记住它。

测试带认证的请求:

curl -u elastic:你的密码 -X GET "localhost:9200/"

常见问题解决

启动失败,报错"max virtual memory areas vm.max_map_count too low"

解决方法:

sudo sysctl -w vm.max_map_count=262144

要使此设置永久生效,编辑/etc/sysctl.conf文件:

echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

无法从外部访问Elasticsearch

检查防火墙设置:

sudo ufw allow 9200

或者如果你使用的是firewalld:

sudo firewall-cmd --add-port=9200/tcp --permanent
sudo firewall-cmd --reload

内存不足导致性能问题

如果服务器内存较小,可以降低JVM堆大小:

编辑/etc/elasticsearch/jvm.options:

-Xms1g
-Xmx1g

然后重启服务:

sudo systemctl restart elasticsearch

下一步:开始使用Elasticsearch

现在你已经成功安装并运行了Elasticsearch,接下来可以:

  1. 安装Kibana作为可视化工具
  2. 学习如何使用REST API与Elasticsearch交互
  3. 导入一些测试数据开始实践搜索功能
  4. 了解索引、映射和查询DSL等核心概念

这只是开始!Elasticsearch功能强大但也复杂,建议从简单用例开始逐步深入。

发表评论