Elasticsearch安装与配置 #
一、安装前准备 #
1.1 系统要求 #
| 要求 | 说明 |
|---|---|
| Java版本 | ES 8.x内置JDK,无需单独安装 |
| 内存 | 最小2GB,生产建议8GB以上 |
| 磁盘 | SSD推荐,避免NAS存储 |
| 操作系统 | Linux/macOS/Windows |
1.2 端口说明 #
| 端口 | 用途 |
|---|---|
| 9200 | HTTP REST API端口 |
| 9300 | 节点间通信端口(TCP) |
二、Docker安装(推荐) #
2.1 单节点安装 #
bash
docker network create elastic
docker run -d \
--name elasticsearch \
--net elastic \
-p 9200:9200 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
-m 2GB \
docker.elastic.co/elasticsearch/elasticsearch:8.12.0
2.2 带安全配置安装 #
bash
docker run -d \
--name elasticsearch \
--net elastic \
-p 9200:9200 \
-e "discovery.type=single-node" \
-e "ELASTIC_PASSWORD=your_password" \
-e "xpack.security.enabled=true" \
-e "xpack.security.enrollment.enabled=true" \
-e "xpack.security.http.ssl.enabled=true" \
-e "xpack.security.transport.ssl.enabled=true" \
-m 4GB \
docker.elastic.co/elasticsearch/elasticsearch:8.12.0
2.3 使用Docker Compose #
yaml
version: '3.8'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.0
container_name: elasticsearch
environment:
- discovery.type=single-node
- xpack.security.enabled=false
- "ES_JAVA_OPTS=-Xms1g -Xmx1g"
ports:
- "9200:9200"
- "9300:9300"
volumes:
- es_data:/usr/share/elasticsearch/data
networks:
- elastic
kibana:
image: docker.elastic.co/kibana/kibana:8.12.0
container_name: kibana
environment:
- ELASTICSEARCH_HOSTS=http://elasticsearch:9200
ports:
- "5601:5601"
depends_on:
- elasticsearch
networks:
- elastic
volumes:
es_data:
driver: local
networks:
elastic:
driver: bridge
启动命令:
bash
docker-compose up -d
三、Linux安装 #
3.1 下载安装包 #
bash
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.0-linux-x86_64.tar.gz
tar -xzf elasticsearch-8.12.0-linux-x86_64.tar.gz
cd elasticsearch-8.12.0
3.2 创建用户 #
bash
sudo useradd elasticsearch
sudo chown -R elasticsearch:elasticsearch /path/to/elasticsearch-8.12.0
3.3 启动服务 #
bash
su elasticsearch
./bin/elasticsearch
3.4 后台运行 #
bash
./bin/elasticsearch -d -p pid
3.5 验证安装 #
bash
curl -X GET "localhost:9200"
响应示例:
json
{
"name" : "node-1",
"cluster_name" : "elasticsearch",
"version" : {
"number" : "8.12.0"
},
"tagline" : "You Know, for Search"
}
四、macOS安装 #
4.1 使用Homebrew #
bash
brew tap elastic/tap
brew install elastic/tap/elasticsearch-full
brew services start elastic/tap/elasticsearch-full
4.2 手动安装 #
bash
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.12.0-darwin-x86_64.tar.gz
tar -xzf elasticsearch-8.12.0-darwin-x86_64.tar.gz
cd elasticsearch-8.12.0
./bin/elasticsearch
五、Windows安装 #
5.1 下载解压 #
- 下载ZIP包:https://www.elastic.co/downloads/elasticsearch
- 解压到目标目录
5.2 启动服务 #
powershell
.\bin\elasticsearch.bat
5.3 安装为Windows服务 #
powershell
.\bin\elasticsearch-service.bat install
.\bin\elasticsearch-service.bat start
六、核心配置 #
6.1 配置文件位置 #
text
config/
├── elasticsearch.yml # 主配置文件
├── jvm.options # JVM配置
└── log4j2.properties # 日志配置
6.2 elasticsearch.yml核心配置 #
yaml
cluster.name: my-application
node.name: node-1
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["host1", "host2"]
cluster.initial_master_nodes: ["node-1", "node-2"]
xpack.security.enabled: false
6.3 JVM配置 #
编辑 config/jvm.options:
text
-Xms4g
-Xmx4g
-XX:+UseG1GC
-XX:G1HeapRegionSize=16m
-XX:+HeapDumpOnOutOfMemoryError
6.4 系统配置 #
Linux系统限制:
bash
sudo sysctl -w vm.max_map_count=262144
echo "vm.max_map_count=262144" | sudo tee -a /etc/sysctl.conf
文件描述符限制:
bash
ulimit -n 65536
在 /etc/security/limits.conf 添加:
text
elasticsearch soft nofile 65536
elasticsearch hard nofile 65536
七、生产环境配置 #
7.1 内存配置 #
text
内存分配原则
├── 堆内存
│ ├── 不超过物理内存50%
│ ├── 最大不超过32GB
│ └── Xms和Xmx设置相同
└── 留给Lucene
└── 至少50%内存用于操作系统缓存
7.2 集群配置示例 #
yaml
cluster.name: production-cluster
node.name: ${HOSTNAME}
node.roles: [master, data, ingest]
network.host: _site_
http.port: 9200
transport.port: 9300
discovery.seed_hosts:
- "node1:9300"
- "node2:9300"
- "node3:9300"
cluster.initial_master_nodes:
- "node1"
- "node2"
- "node3"
gateway.recover_after_nodes: 2
gateway.expected_nodes: 3
gateway.recover_after_time: 5m
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.http.ssl.enabled: true
7.3 JVM生产配置 #
text
-Xms16g
-Xmx16g
-XX:+UseG1GC
-XX:G1HeapRegionSize=32m
-XX:InitiatingHeapOccupancyPercent=30
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/var/log/elasticsearch/heapdump.hprof
-Djava.io.tmpdir=/tmp
-XX:+ExitOnOutOfMemoryError
八、安装Kibana #
8.1 Docker安装 #
bash
docker run -d \
--name kibana \
--net elastic \
-p 5601:5601 \
-e "ELASTICSEARCH_HOSTS=http://elasticsearch:9200" \
docker.elastic.co/kibana/kibana:8.12.0
8.2 配置连接 #
编辑 config/kibana.yml:
yaml
server.host: "0.0.0.0"
server.port: 5601
elasticsearch.hosts: ["http://localhost:9200"]
elasticsearch.username: "kibana_system"
elasticsearch.password: "your_password"
i18n.locale: "zh-CN"
8.3 访问Kibana #
打开浏览器访问:http://localhost:5601
九、健康检查 #
9.1 集群健康 #
bash
curl -X GET "localhost:9200/_cluster/health?pretty"
响应示例:
json
{
"cluster_name" : "elasticsearch",
"status" : "green",
"number_of_nodes" : 1,
"number_of_data_nodes" : 1,
"active_primary_shards" : 1,
"active_shards" : 1,
"relocating_shards" : 0,
"initializing_shards" : 0,
"unassigned_shards" : 0
}
9.2 节点信息 #
bash
curl -X GET "localhost:9200/_nodes/stats?pretty"
9.3 索引列表 #
bash
curl -X GET "localhost:9200/_cat/indices?v"
十、常见问题 #
10.1 启动失败 #
text
问题:max virtual memory areas vm.max_map_count [65530] is too low
解决:sudo sysctl -w vm.max_map_count=262144
10.2 内存不足 #
text
问题:Java heap space
解决:调整jvm.options中的-Xms和-Xmx
10.3 端口占用 #
bash
lsof -i :9200
kill -9 <PID>
10.4 权限问题 #
bash
chown -R elasticsearch:elasticsearch /var/lib/elasticsearch
chown -R elasticsearch:elasticsearch /var/log/elasticsearch
十一、总结 #
本章介绍了Elasticsearch的安装配置:
- Docker安装是最简单的方式
- 生产环境需要配置JVM和系统参数
- 安全配置在生产环境必须开启
- Kibana是管理和可视化的重要工具
- 定期检查集群健康状态
下一步,我们将学习Elasticsearch的核心概念。
最后更新:2026-03-27