文章目录
- Elasticsearch 部署手册
-
- 1. 登录虚拟机
- 2. 检查基础环境
- 3. 调整系统参数
- 4. 下载 Elasticsearch
- 5. 解压安装
- 6. 创建数据和日志目录
- 7. 修改 Elasticsearch 配置
- 8. 设置 JVM 内存
- 9. 启动 Elasticsearch
- 10. 验证启动状态
- 11. 从宿主机访问
- 12. 写入和查询测试数据
- 13. 停止 Elasticsearch
- 14. 重启 Elasticsearch
- 15. 常见问题
-
- 不能用 root 启动
- vm.max_map_count 太小
- 9200 端口被占用
- 内存不足
- 启动后访问不了
- 16. 一键部署脚本
- 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 免密登录。
ssh ubuntu@192.168.93.128
如果没有免密,也可以用密码登录:
ssh ubuntu@192.168.93.128
账号密码:
ubuntu / 123456
2. 检查基础环境
Elasticsearch tar 包自带 JDK,但需要系统有 wget、tar 等基础工具。
whoami
uname -a
df -h /home/ubuntu
free -h
command -v wget
command -v tar
如果缺少工具,执行:
sudo apt-get update
sudo apt-get install -y wget tar
如果 sudo 要密码,输入:
123456
3. 调整系统参数
Elasticsearch 需要较大的 vm.max_map_count,否则启动或运行时容易报错。
临时生效:
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
sudo sysctl -p
确认:
sysctl vm.max_map_count
期望结果:
vm.max_map_count = 262144
4. 下载 Elasticsearch
部署目录统一放在 /home/ubuntu/elasticsearch。
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
可选:下载校验文件并校验包完整性。
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
如果校验通过,会看到类似:
elasticsearch-7.17.29-linux-x86_64.tar.gz: OK
5. 解压安装
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
确认目录:
ls -lah /home/ubuntu/elasticsearch
ls -lah /home/ubuntu/elasticsearch/bin/elasticsearch
ls -lah /home/ubuntu/elasticsearch/jdk/bin/java
查看版本:
/home/ubuntu/elasticsearch/bin/elasticsearch –version
6. 创建数据和日志目录
mkdir -p /home/ubuntu/elasticsearch-data
mkdir -p /home/ubuntu/elasticsearch-logs
7. 修改 Elasticsearch 配置
备份原配置:
cd /home/ubuntu/elasticsearch
cp config/elasticsearch.yml config/elasticsearch.yml.bak
写入单节点开发环境配置:
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
说明:
network.host: 0.0.0.0
允许从宿主机访问 http://192.168.93.128:9200
discovery.type: single-node
单机开发环境必备,避免集群发现相关配置。
xpack.security.enabled: false
关闭 7.17 的安全认证,方便开发环境直接访问。
确认配置:
grep -Ev '^\\s*(#|$)' /home/ubuntu/elasticsearch/config/elasticsearch.yml
8. 设置 JVM 内存
当前虚拟机已经运行 RocketMQ、Redis、XXL-JOB、Hippo4j 等服务,不建议给 ES 太大内存。这里设置为 512m。
cd /home/ubuntu/elasticsearch
mkdir -p config/jvm.options.d
cat > config/jvm.options.d/heap.options <<'EOF'
-Xms512m
-Xmx512m
EOF
确认:
cat /home/ubuntu/elasticsearch/config/jvm.options.d/heap.options
9. 启动 Elasticsearch
注意:Elasticsearch 不能用 root 用户启动。当前应该使用 ubuntu 用户。
whoami
期望:
ubuntu
后台启动:
cd /home/ubuntu/elasticsearch
./bin/elasticsearch -d -p /home/ubuntu/elasticsearch/es.pid
等待启动:
sleep 30
10. 验证启动状态
查看进程:
cat /home/ubuntu/elasticsearch/es.pid
pgrep -af 'org.elasticsearch.bootstrap.Elasticsearch'
查看端口:
ss -ltnp | grep ':9200'
如果系统没有 ss,用:
netstat -ltnp | grep ':9200'
访问 ES 根接口:
wget -qO- http://127.0.0.1:9200/
正常会返回类似 JSON:
{
"name" : "node-1",
"cluster_name" : "local-es-cluster",
"version" : {
"number" : "7.17.29"
},
"tagline" : "You Know, for Search"
}
查看集群健康状态:
wget -qO- 'http://127.0.0.1:9200/_cluster/health?pretty'
单节点正常结果通常是 green 或 yellow。刚启动时短暂 yellow 也常见。
11. 从宿主机访问
浏览器打开:
http://192.168.93.128:9200/
或者在 Windows PowerShell 里执行:
curl http://192.168.93.128:9200/
如果虚拟机内部能访问,宿主机访问不了,检查防火墙:
sudo ufw status
放行 9200:
sudo ufw allow 9200/tcp
12. 写入和查询测试数据
写入一条文档:
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
查询:
wget -qO- http://127.0.0.1:9200/codex_test/_doc/1?pretty
删除测试索引:
wget -qO- –method=DELETE http://127.0.0.1:9200/codex_test
13. 停止 Elasticsearch
优先使用 pid 文件停止:
kill "$(cat /home/ubuntu/elasticsearch/es.pid)"
等待几秒:
sleep 5
pgrep -af 'org.elasticsearch.bootstrap.Elasticsearch' || echo 'Elasticsearch stopped'
如果没停掉,可以强制一点:
pkill -f 'org.elasticsearch.bootstrap.Elasticsearch'
14. 重启 Elasticsearch
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 启动
错误类似:
can not run elasticsearch as root
解决:切回普通用户:
su – ubuntu
cd /home/ubuntu/elasticsearch
./bin/elasticsearch -d -p /home/ubuntu/elasticsearch/es.pid
vm.max_map_count 太小
错误类似:
max virtual memory areas vm.max_map_count [65530] is too low
解决:
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 端口被占用
查看占用:
ss -ltnp | grep ':9200'
换成 9201:
cd /home/ubuntu/elasticsearch
sed -i 's/^http.port:.*/http.port: 9201/' config/elasticsearch.yml
然后重启。
内存不足
查看内存:
free -h
降低堆内存:
cat > /home/ubuntu/elasticsearch/config/jvm.options.d/heap.options <<'EOF'
-Xms256m
-Xmx256m
EOF
然后重启。
启动后访问不了
看日志:
tail -200 /home/ubuntu/elasticsearch-logs/local-es-cluster.log
看端口:
ss -ltnp | grep ':9200'
虚拟机内部访问:
wget -qO- http://127.0.0.1:9200/
宿主机访问:
http://192.168.93.128:9200/
16. 一键部署脚本
如果想从零快速部署,可以复制下面整段执行:
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. 部署结果记录模板
部署完成后,可以按下面记录:
主机: 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/
验证项:
9200 正在监听
根接口 / 返回 Elasticsearch JSON
_cluster/health 能返回状态
测试文档可写入和查询



