第二章:安装部署
详细讲解 Elasticsearch 的多种安装方式,包括单节点安装、Docker 部署和集群部署。
最后更新: 2024-01-15
页面目录
第二章:安装部署
2.1 环境要求
2.1.1 硬件要求
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 2 核 | 8 核以上 |
| 内存 | 4 GB | 32 GB 以上 |
| 磁盘 | 20 GB | SSD 500 GB+ |
| 网络 | 千兆 | 万兆 |
2.1.2 软件要求
- 操作系统:Linux(推荐)、macOS、Windows
- JDK:Elasticsearch 8.x 内置 JDK 17,7.x 需要 JDK 8+
- 用户:非 root 用户运行
2.2 下载 Elasticsearch
# 下载 Elasticsearch 8.x 最新版
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.0-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.0-linux-x86_64.tar.gz.sha512
# 验证完整性
shasum -a 512 -c elasticsearch-8.12.0-linux-x86_64.tar.gz.sha512
# 解压
tar -xzf elasticsearch-8.12.0-linux-x86_64.tar.gz
cd elasticsearch-8.12.0/
2.3 单节点安装
2.3.1 配置 Elasticsearch
编辑 config/elasticsearch.yml:
# 集群名称
cluster.name: my-es-cluster
# 节点名称
node.name: node-1
# 数据目录
path.data: /data/elasticsearch/data
# 日志目录
path.logs: /var/log/elasticsearch
# 绑定的网络地址
network.host: 0.0.0.0
# HTTP 端口
http.port: 9200
# 初始主节点列表
cluster.initial_master_nodes: ["node-1"]
# 关闭安全认证(开发环境)
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
2.3.2 启动 Elasticsearch
# 创建非 root 用户(必须)
useradd -m -s /bin/bash elasticsearch
chown -R elasticsearch:elasticsearch /path/to/elasticsearch-8.12.0
# 切换用户启动
su - elasticsearch
./bin/elasticsearch
# 后台运行
./bin/elasticsearch -d -p pid
2.3.3 验证安装
# 检查健康状态
curl http://localhost:9200/_cluster/health?pretty
# 响应示例
{
"cluster_name": "my-es-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
}
# 查看节点信息
curl http://localhost:9200/_nodes?pretty
2.4 Docker 部署
2.4.1 单节点 Docker 部署
# 拉取镜像
docker pull elasticsearch:8.12.0
# 创建数据卷目录
mkdir -p /data/elasticsearch/{data,logs,backup}
chmod 777 /data/elasticsearch/{data,logs,backup}
# 启动单节点
docker run -d \
--name es-node1 \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "ES_JAVA_OPTS=-Xms2g -Xmx2g" \
-e "xpack.security.enabled=false" \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data \
-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \
--restart=always \
elasticsearch:8.12.0
2.4.2 Docker Compose 集群部署
创建 docker-compose.yml:
version: '3.8'
services:
es01:
image: elasticsearch:8.12.0
container_name: es01
environment:
- node.name=es01
- cluster.name=es-cluster
- discovery.seed_hosts=es02,es03
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- xpack.security.enabled=false
volumes:
- es01_data:/usr/share/elasticsearch/data
ports:
- "9200:9200"
- "9300:9300"
networks:
- es_net
es02:
image: elasticsearch:8.12.0
container_name: es02
environment:
- node.name=es02
- cluster.name=es-cluster
- discovery.seed_hosts=es01,es03
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- xpack.security.enabled=false
volumes:
- es02_data:/usr/share/elasticsearch/data
networks:
- es_net
es03:
image: elasticsearch:8.12.0
container_name: es03
environment:
- node.name=es03
- cluster.name=es-cluster
- discovery.seed_hosts=es01,es02
- cluster.initial_master_nodes=es01,es02,es03
- "ES_JAVA_OPTS=-Xms2g -Xmx2g"
- xpack.security.enabled=false
volumes:
- es03_data:/usr/share/elasticsearch/data
networks:
- es_net
kibana:
image: kibana:8.12.0
container_name: kibana
environment:
- ELASTICSEARCH_HOSTS=http://es01:9200
ports:
- "5601:5601"
networks:
- es_net
depends_on:
- es01
volumes:
es01_data:
es02_data:
es03_data:
networks:
es_net:
driver: bridge
启动集群:
docker-compose up -d
# 检查集群状态
curl http://localhost:9200/_cluster/health?pretty
2.5 Linux 系统服务部署
2.5.1 安装 RPM 包(CentOS/RHEL)
# 下载 RPM 包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.0-x86_64.rpm
# 安装
sudo rpm -ivh elasticsearch-8.12.0-x86_64.rpm
# 启用开机启动
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
# 查看状态
sudo systemctl status elasticsearch
2.5.2 APT 安装(Debian/Ubuntu)
# 添加 Elastic GPG key
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
# 添加仓库
echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | \
sudo tee /etc/apt/sources.list.d/elastic-8.x.list
# 安装
sudo apt-get update && sudo apt-get install elasticsearch
# 配置服务
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch
sudo /bin/systemctl start elasticsearch
2.6 集群配置
2.6.1 生产环境配置
# /etc/elasticsearch/elasticsearch.yml
# 集群配置
cluster.name: production-es-cluster
node.name: ${HOSTNAME}
node.attr.region: us-east-1
# 路径配置
path.data: /data/elasticsearch/data
path.logs: /var/log/elasticsearch
path.repo: /backup/elasticsearch
# 网络配置
network.host: 0.0.0.0
transport.tcp.port: 9300
http.port: 9200
http.max_content_length: 200mb
# 发现配置
discovery.seed_hosts:
- 192.168.1.101:9300
- 192.168.1.102:9300
- 192.168.1.103:9300
cluster.initial_master_nodes:
- node-1
- node-2
- node-3
# 内存锁定
bootstrap.memory_lock: true
# JVM 配置
# 在 jvm.options 中配置
2.6.2 JVM 配置
编辑 config/jvm.options.d/jvm.options:
# 堆大小(建议为物理内存的 50%,不超过 32GB)
-Xms4g
-Xmx4g
# GC 配置
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200
-XX:G1ReservePercent=25
# 其他优化
-XX:+AlwaysPreTouch
-Djava.io.tmpdir=${ES_TEMP_DIR}
2.7 常用运维命令
2.7.1 节点操作
# 查看所有节点
curl -X GET "localhost:9200/_cat/nodes?v"
# 查看节点属性
curl -X GET "localhost:9200/_nodes/stats?pretty"
# 关闭节点
curl -X POST "localhost:9200/_shutdown"
2.7.2 集群健康检查
# 健康状态
curl -X GET "localhost:9200/_cluster/health?pretty"
# 等待特定状态
curl -X GET "localhost:9200/_cluster/health?wait_for_status=yellow&timeout=50s"
# 分片分配
curl -X GET "localhost:9200/_cat/allocation?v"
2.8 常见问题排查
| 问题 | 原因 | 解决方案 |
|---|---|---|
| 启动失败 | 内存不足 | 增加物理内存或降低堆大小 |
| 启动失败 | 文件权限 | 检查 data/logs 目录权限 |
| 健康状态 yellow | 副本未分配 | 增加节点或调整副本数 |
| 健康状态 red | 主分片丢失 | 使用快照恢复 |
| 连接拒绝 | 端口被占用 | 检查端口或修改配置 |
2.9 总结
本章介绍了 Elasticsearch 的多种安装部署方式,包括单节点安装、Docker 部署和集群部署。在生产环境中,建议使用至少 3 个节点的集群部署,并进行合理的 JVM 和系统配置。下一章将详细介绍 Elasticsearch 的核心概念。