在 Linux 上装 Elasticsearch 并跑通第一个索引
Elasticsearch 是一个基于 Lucene 的分布式搜索和分析引擎,常用于日志检索、站内搜索和数据分析。
如果你只是想在单台 Linux 服务器上搭一套能用的 Elasticsearch,最省事的方式是下载官方 tar 包,改两三个配置项后启动,再用 _cat 和 _search 接口验证。
下面按这个顺序展开。
装之前先确认三件事
Elasticsearch 对内存和文件描述符比较敏感,装之前先看环境:
- 操作系统:主流的 64 位 Linux 发行版均可,本文命令以 CentOS/Ubuntu 通用方式给出。
- 内存:建议至少 2 GB,其中一半左右可以分给 Elasticsearch 的 JVM 堆。
- Java:Elasticsearch 8.x 的 tar 包自带 JDK,不需要单独安装 Java,但系统里已有的
JAVA_HOME可能干扰启动,建议在启动脚本里显式指向自带 JDK。
另外,Elasticsearch 默认不允许以 root 用户启动,需要先建一个普通用户:
useradd elastic
passwd elastic
下载解压并修改核心配置
以 Elasticsearch 8.x 为例,从官网下载对应架构的 tar 包,解压到 /usr/local 并改归属:
cd /tmp
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.15.0-linux-x86_64.tar.gz
tar -xzf elasticsearch-8.15.0-linux-x86_64.tar.gz -C /usr/local/
chown -R elastic:elastic /usr/local/elasticsearch-8.15.0
进入 config/elasticsearch.yml,至少修改这几项:
cluster.name: my-es
node.name: node-1
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
其中 discovery.type: 表示单节点模式,
single-node
避免默认集群发现逻辑在单机上反复报错;network.host: 允许外部访问,
0.0.0.0
生产环境建议改成具体内网 IP 并配合防火墙。
JVM 堆内存通过 config/jvm.options.d/heap.options 调整,例如 2 GB 内存的机器可以写:
-Xms1g
-Xmx1g
堆内存不要超过物理内存的一半,也不要超过 31 GB 左右,否则会失去指针压缩的优势。
启动服务并处理常见报错
切换到 elastic 用户启动:
su - elastic
cd /usr/local/elasticsearch-8.15.0
./bin/elasticsearch
第一次启动时,日志里会输出 elastic 用户的初始密码和 HTTP CA 证书指纹,务必保存下来。
常见启动失败有两类:
- 报
max virtual memory areas vm.max_map_count [65530] is too low:在/etc/sysctl.conf加vm.max_map_count=262144,执行sysctl -p生效。 - 报
unable to lock JVM Memory:说明内存锁定失败,可以在elasticsearch.yml里设置bootstrap.memory_lock: true并给 elastic 用户配置memlock权限,或者先把该项设为false让服务先跑起来。
如果需要后台运行,可以用 nohup ./bin/elasticsearch &,或者用 systemd 写一个 unit 文件管理。
验证服务并跑通第一个索引
服务启动后,另开一个终端用 curl 检查:
curl -k -u elastic:你的密码 https://localhost:9200
返回 JSON 里包含 cluster_name、version.number 和 tagline 就说明节点正常。
接着创建一个测试索引并写入一条文档:
curl -k -u elastic:你的密码 -X PUT "https://localhost:9200/books" -H 'Content-Type: application/json' -d '{"settings":{"number_of_shards":1,"number_of_replicas":0}}'
curl -k -u elastic:你的密码 -X POST "https://localhost:9200/books/_doc/1" -H 'Content-Type: application/json' -d '{"title":"Elasticsearch 入门","price":59}'
然后用 _cat 看索引状态、用 _search 确认文档可检索:
curl -k -u elastic:你的密码 "https://localhost:9200/_cat/indices?v"
curl -k -u elastic:你的密码 "https://localhost:9200/books/_search?q=title:Elasticsearch"
_cat/indices 中索引状态为 green 或 yellow(单节点副本为 0 时通常是 green),_search 返回 hits.total.value 大于 0,
就说明搭建完成。
上线前需要留意的几个点
单机跑通不等于可以直接对外提供服务。
Elasticsearch 8.x 默认开启安全认证,走的是 HTTPS;
如果客户端不校验证书,需要用 -k 跳过,生产环境应导入 CA 证书。
另外,network.host 设为 0.0.0.0 时务必配置防火墙或安全组,只放行可信来源的 9200 端口,不要直接把带密码的接口暴露在公网。
如果后续要扩展成多节点集群,需要把 discovery.type 去掉,改为配置 discovery.seed_hosts 和 cluster.initial_master_nodes,并保证各节点 cluster.name 一致。
单机验证阶段先用单节点模式把流程跑通,再考虑集群。