部署 Elasticsearch
搜索和分析引擎,全文搜索、聚合和 Kibana。
平台高级
为什么
Elasticsearch 提供分布式全文搜索、聚合和大规模日志分析。Kibana 可视化,Logstash 摄取管道。
平台即服务采用率 2024 年增长 24%,团队从虚拟机管理转向 git push 部署。the cloud infrastructure market reached $330B in 2024, growing 22% year-over-year (Synergy Research),PaaS 层捕获了大多数新工作负载。
何时使用
搜索、日志分析和指标用 Elasticsearch。主 DB 避免(用作次)。
如何做
1. Docker — elasticsearch:8 加 Kibana
2. 集群 — HA 最少 3 节点
3. 索引 — 配 mapping 建索引
4. 搜索 — query DSL 全文 + 过滤
5. 聚合 — bucket + metric 分析
6. Kibana — :5601 可视化
7. 安全 — 启用 TLS + auth(8.x 默认)
示例
# docker-compose.yml
services:
es:
image: elasticsearch:8
environment:
discovery.type: single-node
xpack.security.enabled: false
ports: ["9200:9200"]
kibana:
image: kibana:8
environment: ELASTICSEARCH_HOSTS: http://es:9200
ports: ["5601:5601"]
# 索引和搜索
curl -X PUT localhost:9200/users -H 'Content-Type: application/json' -d '
{ "mappings": { "properties": { "name": { "type": "text" } } } }'
curl -X POST localhost:9200/users/_doc -d '{ "name": "Alice" }'
curl localhost:9200/users/_search?q=name:alice
常见问题
- ⚠堆过大 — ES_JAVA_OPTS 设 RAM 50%,留半给 Lucene
- ⚠单节点无 HA — 仅开发,生产需 3 节点
- ⚠环境间配置漂移 — 使用基础设施即代码(Terraform/Pulumi)保持 dev/staging/prod 一致
最佳实践
- ✓堆设 RAM 50% — 半 JVM,半 Lucene 堆外
- ✓用索引生命周期管理 — 自动滚动删除旧索引
- ✓设置健康检查和优雅关闭 — 处理 SIGTERM 以在退出前排空进行中的请求