3. Elasticsearch 单节点安装:下载、配置与验证
Elasticsearch 是 ELK 栈的核心存储与检索引擎。本节将演示在 Linux 环境下完成单节点安装的全过程,涵盖二进制包下载、核心参数配置、启动验证及常见问题排查。掌握单节点安装是后续搭建集群与集成 Logstash、Kibana 的基础。
3.1 下载与解压
Elasticsearch 官方提供 .tar.gz 与 .rpm / .deb 包。本课程采用通用性最强的 .tar.gz 方式,适用于所有 Linux 发行版。
3.1.1 版本选择与下载
建议使用 7.x 或 8.x LTS 版本。以下以 Elasticsearch 7.17.15 为例(请根据实际需求替换版本号)。
下载方式对比
| 方式 | 命令 / 地址 | 适用场景 |
|---|---|---|
| wget 直链 | wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.17.15-linux-x86_64.tar.gz |
服务器有外网访问权限 |
| 官网手动下载 | https://www.elastic.co/downloads/elasticsearch |
本地下载后通过 scp 上传 |
| yum/apt 仓库 | 添加 Elastic 官方源后 yum install elasticsearch |
生产环境推荐,便于版本管理 |
3.1.2 解压与目录结构
# 解压到 /usr/local 目录
tar -zxvf elasticsearch-7.17.15-linux-x86_64.tar.gz -C /usr/local/
# 创建软链接,方便版本切换
ln -s /usr/local/elasticsearch-7.17.15 /usr/local/elasticsearch
# 查看解压后的目录结构
ls -l /usr/local/elasticsearch/
解压后关键目录说明:
| 目录 / 文件 | 作用 |
|---|---|
bin/ |
启动脚本、插件管理工具 |
config/ |
核心配置文件 elasticsearch.yml、jvm.options、log4j2.properties |
data/ |
索引数据存储目录(默认) |
logs/ |
运行日志目录 |
plugins/ |
已安装的插件 |
jdk/ |
内置 JDK(7.0+ 版本自带) |
注意:Elasticsearch 不允许以
root 用户运行。解压后需创建专用用户并授权。
# 创建 elasticsearch 用户
useradd -m -s /bin/bash elasticsearch
# 更改目录所有者
chown -R elasticsearch:elasticsearch /usr/local/elasticsearch-7.17.15
3.2 配置 elasticsearch.yml 核心参数
elasticsearch.yml 位于 config/ 目录下,是决定节点行为的核心配置文件。单节点安装只需关注以下四个关键参数。
3.2.1 参数详解
| 参数 | 默认值 | 推荐值(单节点) | 说明 |
|---|---|---|---|
cluster.name |
elasticsearch |
elk-cluster |
集群名称,同一集群所有节点必须一致 |
node.name |
主机名 | node-1 |
节点名称,集群内唯一标识 |
path.data |
$ES_HOME/data |
/data/elasticsearch/data |
索引数据存储路径,建议挂载独立磁盘 |
network.host |
127.0.0.1 |
0.0.0.0 |
监听地址,0.0.0.0 表示所有网络接口 |
3.2.2 配置示例
编辑 /usr/local/elasticsearch/config/elasticsearch.yml,追加或修改以下内容:
# ---------------------------- 集群与节点 ----------------------------
cluster.name: elk-cluster
node.name: node-1
# ---------------------------- 数据与日志路径 ----------------------------
path.data: /data/elasticsearch/data
path.logs: /data/elasticsearch/logs
# ---------------------------- 网络与端口 ----------------------------
network.host: 0.0.0.0
http.port: 9200
# ---------------------------- 单节点发现(重要) ----------------------------
discovery.type: single-node
关键说明:
1.
2.
3.
1.
discovery.type: single-node 是单节点模式必须配置的参数,否则节点会因无法发现其他节点而启动失败。2.
path.data 和 path.logs 建议使用独立数据盘,避免与系统盘争抢 I/O。3.
network.host 设置为 0.0.0.0 后,需确保防火墙开放 9200 和 9300 端口。
3.3 启动与验证
3.3.1 启动 Elasticsearch
切换到 elasticsearch 用户,执行启动脚本:
# 切换用户
su - elasticsearch
# 前台启动(调试用)
/usr/local/elasticsearch/bin/elasticsearch
# 后台启动(生产推荐)
/usr/local/elasticsearch/bin/elasticsearch -d -p /tmp/elasticsearch.pid
启动参数说明:
-d:后台守护进程模式-p:将 PID 写入指定文件,便于后续管理
3.3.2 验证节点状态
节点启动约 10-30 秒后,通过以下方式验证:
- 检查进程
ps -ef | grep elasticsearch | grep -v grep
- 查看日志
tail -f /data/elasticsearch/logs/elk-cluster.log
正常启动日志末尾应包含:
[INFO ][o.e.n.Node ] [node-1] started
[INFO ][o.e.l.LicenseService ] [node-1] license [xxxx] mode [basic] - valid
[INFO ][o.e.g.GatewayService ] [node-1] recovered [0] indices into cluster_state
- API 验证
curl -X GET "http://localhost:9200/"
返回示例:
{
"name" : "node-1",
"cluster_name" : "elk-cluster",
"cluster_uuid" : "xxxx",
"version" : {
"number" : "7.17.15",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "xxxx",
"build_date" : "2024-01-15T10:00:00Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8",
"minimum_index_compatibility_version" : "6.0.0"
},
"tagline" : "You Know, for Search"
}
- 集群健康检查
curl -X GET "http://localhost:9200/_cluster/health?pretty"
期望输出:
{
"cluster_name" : "elk-cluster",
"status" : "green",
"timed_out" : false,
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 0,
"active_shards" : 0,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0,
"delayed_unassigned_shards" : 0,
"number_of_pending_tasks" : 0,
"number_of_in_flight_fetch" : 0,
"task_max_waiting_in_queue_millis" : 0,
"active_shards_percent_as_number" : 100.0
}
状态解读:
green:所有主分片和副本分片均正常分配。yellow:主分片正常,但副本分片未分配(单节点常见,可忽略)。red:存在未分配的主分片,需排查数据或配置问题。
3.4 单节点安装流程总览
3.5 常见问题与排查
| 问题现象 | 原因 | 解决方案 |
|---|---|---|
启动报错 max virtual memory areas vm.max_map_count [65530] is too low |
系统参数不足 | sysctl -w vm.max_map_count=262144 并写入 /etc/sysctl.conf |
启动报错 can not run elasticsearch as root |
使用 root 用户启动 | 切换到 elasticsearch 用户 |
无法访问 http://localhost:9200 |
network.host 未配置或防火墙未开放 | 检查 network.host 配置,开放 9200 端口 |
集群状态 red |
索引分片未分配 | 检查 _cluster/allocation/explain API 定位原因 |
| 节点无法加入集群 | discovery.type 未设置或 seed hosts 配置错误 | 单节点设置 discovery.type: single-node |
生产环境建议:
- 使用 systemd 管理 Elasticsearch 服务,实现开机自启。
- 配置 JVM 堆内存(
jvm.options),建议不超过物理内存的 50%,且不超过 32GB。 - 开启安全认证(8.x 默认开启,7.x 需安装 x-pack)。