Elasticsearch 部署手册

文章目录

  • [Elasticsearch 部署手册](#Elasticsearch 部署手册)
    • [1. 登录虚拟机](#1. 登录虚拟机)
    • [2. 检查基础环境](#2. 检查基础环境)
    • [3. 调整系统参数](#3. 调整系统参数)
    • [4. 下载 Elasticsearch](#4. 下载 Elasticsearch)
    • [5. 解压安装](#5. 解压安装)
    • [6. 创建数据和日志目录](#6. 创建数据和日志目录)
    • [7. 修改 Elasticsearch 配置](#7. 修改 Elasticsearch 配置)
    • [8. 设置 JVM 内存](#8. 设置 JVM 内存)
    • [9. 启动 Elasticsearch](#9. 启动 Elasticsearch)
    • [10. 验证启动状态](#10. 验证启动状态)
    • [11. 从宿主机访问](#11. 从宿主机访问)
    • [12. 写入和查询测试数据](#12. 写入和查询测试数据)
    • [13. 停止 Elasticsearch](#13. 停止 Elasticsearch)
    • [14. 重启 Elasticsearch](#14. 重启 Elasticsearch)
    • [15. 常见问题](#15. 常见问题)
      • [不能用 root 启动](#不能用 root 启动)
      • [vm.max_map_count 太小](#vm.max_map_count 太小)
      • [9200 端口被占用](#9200 端口被占用)
      • 内存不足
      • 启动后访问不了
    • [16. 一键部署脚本](#16. 一键部署脚本)
    • [17. 部署结果记录模板](#17. 部署结果记录模板)

Elasticsearch 部署手册

本文记录在 Ubuntu 虚拟机 192.168.93.128 上部署 Elasticsearch 的完整过程。命令按顺序复制执行即可。

本手册使用 Elasticsearch 7.17.29 的 Linux tar 包方式部署,适合当前这台 Ubuntu 16 虚拟机。tar 包自带 JDK,不依赖系统 Java。

说明:Elastic 当前主线已经到 9.x,但很多 Java 项目仍会使用 7.17.x 或 8.x。当前虚拟机系统较老,为了部署简单、兼容性好、默认安全配置不复杂,这里使用 7.17.29 做单节点开发环境。

1. 登录虚拟机

前提:本机已经配置过 SSH 免密登录。

bash 复制代码
ssh ubuntu@192.168.93.128

如果没有免密,也可以用密码登录:

bash 复制代码
ssh ubuntu@192.168.93.128

账号密码:

text 复制代码
ubuntu / 123456

2. 检查基础环境

Elasticsearch tar 包自带 JDK,但需要系统有 wgettar 等基础工具。

bash 复制代码
whoami
uname -a
df -h /home/ubuntu
free -h
command -v wget
command -v tar

如果缺少工具,执行:

bash 复制代码
sudo apt-get update
sudo apt-get install -y wget tar

如果 sudo 要密码,输入:

text 复制代码
123456

3. 调整系统参数

Elasticsearch 需要较大的 vm.max_map_count,否则启动或运行时容易报错。

临时生效:

bash 复制代码
sudo sysctl -w vm.max_map_count=262144

持久化配置:

bash 复制代码
grep -q '^vm.max_map_count=' /etc/sysctl.conf \
  && sudo sed -i 's/^vm.max_map_count=.*/vm.max_map_count=262144/' /etc/sysctl.conf \
  || echo 'vm.max_map_count=262144' | sudo tee -a /etc/sysctl.conf

sudo sysctl -p

确认:

bash 复制代码
sysctl vm.max_map_count

期望结果:

text 复制代码
vm.max_map_count = 262144

4. 下载 Elasticsearch

部署目录统一放在 /home/ubuntu/elasticsearch

bash 复制代码
cd /home/ubuntu
mkdir -p /home/ubuntu/elasticsearch-download
cd /home/ubuntu/elasticsearch-download

ES_VERSION=7.17.29

wget -O elasticsearch-${ES_VERSION}-linux-x86_64.tar.gz \
  https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${ES_VERSION}-linux-x86_64.tar.gz

可选:下载校验文件并校验包完整性。

bash 复制代码
wget -O elasticsearch-${ES_VERSION}-linux-x86_64.tar.gz.sha512 \
  https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${ES_VERSION}-linux-x86_64.tar.gz.sha512

sha512sum -c elasticsearch-${ES_VERSION}-linux-x86_64.tar.gz.sha512

如果校验通过,会看到类似:

text 复制代码
elasticsearch-7.17.29-linux-x86_64.tar.gz: OK

5. 解压安装

bash 复制代码
cd /home/ubuntu
ES_VERSION=7.17.29

rm -rf /home/ubuntu/elasticsearch-${ES_VERSION}
tar -xzf /home/ubuntu/elasticsearch-download/elasticsearch-${ES_VERSION}-linux-x86_64.tar.gz -C /home/ubuntu

ln -sfn /home/ubuntu/elasticsearch-${ES_VERSION} /home/ubuntu/elasticsearch

确认目录:

bash 复制代码
ls -lah /home/ubuntu/elasticsearch
ls -lah /home/ubuntu/elasticsearch/bin/elasticsearch
ls -lah /home/ubuntu/elasticsearch/jdk/bin/java

查看版本:

bash 复制代码
/home/ubuntu/elasticsearch/bin/elasticsearch --version

6. 创建数据和日志目录

bash 复制代码
mkdir -p /home/ubuntu/elasticsearch-data
mkdir -p /home/ubuntu/elasticsearch-logs

7. 修改 Elasticsearch 配置

备份原配置:

bash 复制代码
cd /home/ubuntu/elasticsearch
cp config/elasticsearch.yml config/elasticsearch.yml.bak

写入单节点开发环境配置:

bash 复制代码
cat > config/elasticsearch.yml <<'YAML'
cluster.name: local-es-cluster
node.name: node-1

path.data: /home/ubuntu/elasticsearch-data
path.logs: /home/ubuntu/elasticsearch-logs

network.host: 0.0.0.0
http.port: 9200

discovery.type: single-node

xpack.security.enabled: false
YAML

说明:

text 复制代码
network.host: 0.0.0.0
允许从宿主机访问 http://192.168.93.128:9200

discovery.type: single-node
单机开发环境必备,避免集群发现相关配置。

xpack.security.enabled: false
关闭 7.17 的安全认证,方便开发环境直接访问。

确认配置:

bash 复制代码
grep -Ev '^\s*(#|$)' /home/ubuntu/elasticsearch/config/elasticsearch.yml

8. 设置 JVM 内存

当前虚拟机已经运行 RocketMQ、Redis、XXL-JOB、Hippo4j 等服务,不建议给 ES 太大内存。这里设置为 512m。

bash 复制代码
cd /home/ubuntu/elasticsearch
mkdir -p config/jvm.options.d

cat > config/jvm.options.d/heap.options <<'EOF'
-Xms512m
-Xmx512m
EOF

确认:

bash 复制代码
cat /home/ubuntu/elasticsearch/config/jvm.options.d/heap.options

9. 启动 Elasticsearch

注意:Elasticsearch 不能用 root 用户启动。当前应该使用 ubuntu 用户。

bash 复制代码
whoami

期望:

text 复制代码
ubuntu

后台启动:

bash 复制代码
cd /home/ubuntu/elasticsearch
./bin/elasticsearch -d -p /home/ubuntu/elasticsearch/es.pid

等待启动:

bash 复制代码
sleep 30

10. 验证启动状态

查看进程:

bash 复制代码
cat /home/ubuntu/elasticsearch/es.pid
pgrep -af 'org.elasticsearch.bootstrap.Elasticsearch'

查看端口:

bash 复制代码
ss -ltnp | grep ':9200'

如果系统没有 ss,用:

bash 复制代码
netstat -ltnp | grep ':9200'

访问 ES 根接口:

bash 复制代码
wget -qO- http://127.0.0.1:9200/

正常会返回类似 JSON:

json 复制代码
{
  "name" : "node-1",
  "cluster_name" : "local-es-cluster",
  "version" : {
    "number" : "7.17.29"
  },
  "tagline" : "You Know, for Search"
}

查看集群健康状态:

bash 复制代码
wget -qO- 'http://127.0.0.1:9200/_cluster/health?pretty'

单节点正常结果通常是 greenyellow。刚启动时短暂 yellow 也常见。

11. 从宿主机访问

浏览器打开:

text 复制代码
http://192.168.93.128:9200/

或者在 Windows PowerShell 里执行:

powershell 复制代码
curl http://192.168.93.128:9200/

如果虚拟机内部能访问,宿主机访问不了,检查防火墙:

bash 复制代码
sudo ufw status

放行 9200:

bash 复制代码
sudo ufw allow 9200/tcp

12. 写入和查询测试数据

写入一条文档:

bash 复制代码
wget -qO- \
  --header='Content-Type: application/json' \
  --post-data='{"name":"codex","type":"deploy-check","message":"elasticsearch ok"}' \
  http://127.0.0.1:9200/codex_test/_doc/1

查询:

bash 复制代码
wget -qO- http://127.0.0.1:9200/codex_test/_doc/1?pretty

删除测试索引:

bash 复制代码
wget -qO- --method=DELETE http://127.0.0.1:9200/codex_test

13. 停止 Elasticsearch

优先使用 pid 文件停止:

bash 复制代码
kill "$(cat /home/ubuntu/elasticsearch/es.pid)"

等待几秒:

bash 复制代码
sleep 5
pgrep -af 'org.elasticsearch.bootstrap.Elasticsearch' || echo 'Elasticsearch stopped'

如果没停掉,可以强制一点:

bash 复制代码
pkill -f 'org.elasticsearch.bootstrap.Elasticsearch'

14. 重启 Elasticsearch

bash 复制代码
cd /home/ubuntu/elasticsearch

if [ -f /home/ubuntu/elasticsearch/es.pid ]; then
  kill "$(cat /home/ubuntu/elasticsearch/es.pid)" 2>/dev/null || true
  sleep 5
fi

pgrep -af 'org.elasticsearch.bootstrap.Elasticsearch' && pkill -f 'org.elasticsearch.bootstrap.Elasticsearch' || true

./bin/elasticsearch -d -p /home/ubuntu/elasticsearch/es.pid

sleep 30
wget -qO- http://127.0.0.1:9200/

15. 常见问题

不能用 root 启动

错误类似:

text 复制代码
can not run elasticsearch as root

解决:切回普通用户:

bash 复制代码
su - ubuntu
cd /home/ubuntu/elasticsearch
./bin/elasticsearch -d -p /home/ubuntu/elasticsearch/es.pid

vm.max_map_count 太小

错误类似:

text 复制代码
max virtual memory areas vm.max_map_count [65530] is too low

解决:

bash 复制代码
sudo sysctl -w vm.max_map_count=262144

grep -q '^vm.max_map_count=' /etc/sysctl.conf \
  && sudo sed -i 's/^vm.max_map_count=.*/vm.max_map_count=262144/' /etc/sysctl.conf \
  || echo 'vm.max_map_count=262144' | sudo tee -a /etc/sysctl.conf

9200 端口被占用

查看占用:

bash 复制代码
ss -ltnp | grep ':9200'

换成 9201:

bash 复制代码
cd /home/ubuntu/elasticsearch
sed -i 's/^http.port:.*/http.port: 9201/' config/elasticsearch.yml

然后重启。

内存不足

查看内存:

bash 复制代码
free -h

降低堆内存:

bash 复制代码
cat > /home/ubuntu/elasticsearch/config/jvm.options.d/heap.options <<'EOF'
-Xms256m
-Xmx256m
EOF

然后重启。

启动后访问不了

看日志:

bash 复制代码
tail -200 /home/ubuntu/elasticsearch-logs/local-es-cluster.log

看端口:

bash 复制代码
ss -ltnp | grep ':9200'

虚拟机内部访问:

bash 复制代码
wget -qO- http://127.0.0.1:9200/

宿主机访问:

text 复制代码
http://192.168.93.128:9200/

16. 一键部署脚本

如果想从零快速部署,可以复制下面整段执行:

bash 复制代码
set -e

ES_VERSION=7.17.29
ES_HOME=/home/ubuntu/elasticsearch-${ES_VERSION}
ES_LINK=/home/ubuntu/elasticsearch

sudo sysctl -w vm.max_map_count=262144
grep -q '^vm.max_map_count=' /etc/sysctl.conf \
  && sudo sed -i 's/^vm.max_map_count=.*/vm.max_map_count=262144/' /etc/sysctl.conf \
  || echo 'vm.max_map_count=262144' | sudo tee -a /etc/sysctl.conf

mkdir -p /home/ubuntu/elasticsearch-download
cd /home/ubuntu/elasticsearch-download

if [ ! -s elasticsearch-${ES_VERSION}-linux-x86_64.tar.gz ]; then
  wget -O elasticsearch-${ES_VERSION}-linux-x86_64.tar.gz \
    https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${ES_VERSION}-linux-x86_64.tar.gz
fi

cd /home/ubuntu
rm -rf "${ES_HOME}"
tar -xzf /home/ubuntu/elasticsearch-download/elasticsearch-${ES_VERSION}-linux-x86_64.tar.gz -C /home/ubuntu
ln -sfn "${ES_HOME}" "${ES_LINK}"

mkdir -p /home/ubuntu/elasticsearch-data
mkdir -p /home/ubuntu/elasticsearch-logs

cd "${ES_LINK}"

cat > config/elasticsearch.yml <<'YAML'
cluster.name: local-es-cluster
node.name: node-1
path.data: /home/ubuntu/elasticsearch-data
path.logs: /home/ubuntu/elasticsearch-logs
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
xpack.security.enabled: false
YAML

mkdir -p config/jvm.options.d
cat > config/jvm.options.d/heap.options <<'EOF'
-Xms512m
-Xmx512m
EOF

if [ -f /home/ubuntu/elasticsearch/es.pid ]; then
  kill "$(cat /home/ubuntu/elasticsearch/es.pid)" 2>/dev/null || true
  sleep 5
fi

pgrep -af 'org.elasticsearch.bootstrap.Elasticsearch' && pkill -f 'org.elasticsearch.bootstrap.Elasticsearch' || true

./bin/elasticsearch -d -p /home/ubuntu/elasticsearch/es.pid

sleep 30
wget -qO- http://127.0.0.1:9200/
wget -qO- 'http://127.0.0.1:9200/_cluster/health?pretty'

17. 部署结果记录模板

部署完成后,可以按下面记录:

text 复制代码
主机: 192.168.93.128
安装目录: /home/ubuntu/elasticsearch
版本: Elasticsearch 7.17.29
端口: 9200
集群名: local-es-cluster
节点名: node-1
数据目录: /home/ubuntu/elasticsearch-data
日志目录: /home/ubuntu/elasticsearch-logs
访问地址: http://192.168.93.128:9200/

验证项:

text 复制代码
9200 正在监听
根接口 / 返回 Elasticsearch JSON
_cluster/health 能返回状态
测试文档可写入和查询
相关推荐
小翰生信1 小时前
单细胞m6A研究迎来新利器:Scm6A数据库网站解析
大数据·人工智能·数据库开发·数据库架构·生信分析·atac-seq·染色质可及性分析
_codemonster2 小时前
软考易错知识总结(二)
大数据·人工智能
rongcj2 小时前
为什么是张雪?为什么是荣耀?
大数据·人工智能·物联网
ACP广源盛139246256732 小时前
GSV6155@ACP#DP 1.4a 重定时器芯片,物理 AI 信号长距传输的稳定保障
大数据·人工智能·分布式·嵌入式硬件·spark
沪漂阿龙2 小时前
Vector Store:FAISS、Chroma、Milvus、Qdrant、ES 怎么选?
人工智能·elasticsearch·架构·milvus·faiss
2601_954971132 小时前
大数据行业紧缺人才细分赛道分析
大数据
babe小鑫2 小时前
2026年大数据与计算机专业学习数据分析的技术价值
大数据·学习·数据分析
Jerry.张蒙3 小时前
AI工具Opencode助力SAP提质增效实践
大数据·运维·服务器·人工智能·运维开发
Data-Miner11 小时前
集团数字化转型大数据平台整体建设方案
大数据