Elasticsearch 是一个分布式、开源的全文搜索和分析引擎,专为大数据环境中的快速搜索和数据分析而设计。它基于 Apache Lucene 构建,提供了强大的全文检索能力、实时数据处理和分布式存储,常与 Logstash 和 Kibana 一起组成 Elastic Stack(以前称为 ELK Stack)。
1. 核心特性
1.1 全文搜索
- 倒排索引:支持高效的全文检索。
- 多字段查询:支持对多个字段同时进行复杂查询。
- 高亮功能:返回搜索结果中匹配的字段,并以高亮显示。
1.2 数据分析
- 聚合操作:支持统计、分组、排序等聚合查询,如平均值、总和、最大值、最小值等。
- 多维度数据分析:支持在多个维度上分析数据,提供强大的数据洞察能力。
1.3 分布式架构
- 高可用性:通过数据分片和副本,保证系统的容错性和高可用性。
- 水平扩展:可以通过增加节点轻松扩展系统容量和性能。
1.4 实时性
- 实时索引:支持实时写入和查询,适用于日志分析和实时数据处理。
- 实时监控:可用于监控系统性能和异常日志。
1.5 RESTful API
- 易用性:提供直观的 HTTP/JSON API,便于集成和开发。
- 强大的查询 DSL:支持复杂的查询语言,适用于各种搜索和分析需求。
1.6 可观测性
- 日志和监控:集成 Kibana,可以实时查看 Elasticsearch 的性能指标和日志。
- 分布式跟踪:支持 OpenTelemetry 和 Elastic APM。
2. Elasticsearch 的架构
Elasticsearch 的核心是一个分布式系统,主要包括以下概念:
2.1 集群(Cluster)
- 定义:由多个 Elasticsearch 节点组成的分布式系统。
- 功能:提供高可用性和分布式处理能力。
- 唯一标识:集群有一个唯一的名字,通过该名字可以识别和连接到集群。
2.2 节点(Node)
- 定义:集群中的一个实例,每个节点都有一个名称。
- 角色:
- 主节点:负责管理集群的元数据和状态。
- 数据节点:存储数据并处理 CRUD、搜索和聚合操作。
- 协调节点:路由请求,但不存储数据。
- 热/冷节点:优化存储和查询性能的专用节点类型。
2.3 索引(Index)
- 定义:类似于关系型数据库中的表,存储相关文档的集合。
- 分片(Shard):
- 将数据分割成更小的块,以支持分布式存储。
- 每个索引可以划分为多个主分片(Primary Shard)。
- 支持配置副本分片(Replica Shard)来提高容错能力。
2.4 文档(Document)
- 定义:索引中的最小数据单元,类似于数据库中的一行记录。
- 格式:JSON 格式,支持灵活的结构化和非结构化数据存储。
2.5 倒排索引(Inverted Index)
- 定义:一种数据结构,用于快速查找包含某个关键词的文档。
- 功能:是 Elasticsearch 实现全文搜索的基础。
3. Elasticsearch 的安装和部署
3.1 环境要求
- Java 环境:Elasticsearch 自带了 OpenJDK,无需单独安装。
- 内存要求:建议至少 4GB 内存,生产环境推荐 16GB 或以上。
3.2 安装方式
方法 1:通过 .deb
或 .rpm
包安装
在 Ubuntu/Debian 上安装
-
导入 Elasticsearch 公钥:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
-
添加 Elasticsearch 仓库:
sudo apt-get install apt-transport-https echo "deb https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-8.x.list
-
更新仓库并安装 Elasticsearch:
sudo apt-get update sudo apt-get install elasticsearch
-
启动服务:
sudo systemctl start elasticsearch sudo systemctl enable elasticsearch
在 CentOS/RHEL 上安装
-
导入 Elasticsearch 公钥:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
-
创建 YUM 仓库:
cat <<EOF | sudo tee /etc/yum.repos.d/elasticsearch.repo [elasticsearch] name=Elasticsearch repository baseurl=https://artifacts.elastic.co/packages/8.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md EOF
-
安装 Elasticsearch:
sudo yum install elasticsearch
-
启动服务:
sudo systemctl start elasticsearch sudo systemctl enable elasticsearch
方法 2:通过 Docker 安装
-
拉取镜像:
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.10.0
-
运行容器:
docker run -d --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:8.10.0
-
验证服务:
在浏览器访问:
http://localhost:9200
或使用
curl
:curl -X GET "localhost:9200"
4. 配置与优化
4.1 基本配置文件
Elasticsearch 的配置文件位于 /etc/elasticsearch/elasticsearch.yml
(Linux)或 config/elasticsearch.yml
(Docker)。
-
集群名称:
cluster.name: my-cluster
-
节点名称:
node.name: node-1
-
数据和日志路径:
path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch
-
网络绑定:
network.host: 0.0.0.0
4.2 性能优化
- 分片调整:避免过多的小分片,提高查询性能。
- JVM 堆内存:设置为系统内存的 50%,最大不超过 32GB。
- 磁盘性能:使用 SSD 提高索引和查询性能。
5. 使用场景
5.1 日志管理与分析
结合 Logstash 和 Kibana,Elasticsearch 常用于集中式日志管理和分析,如应用日志、系统日志、审计日志。
5.2 数据搜索与推荐
适用于构建搜索功能,如电商网站的商品搜索、博客站点的文章搜索等。
5.3 监控与报警
通过收集系统性能指标,实时监控和分析数据变化,设置阈值报警。
5.4 数据可视化与分析
配合 Kibana 创建数据仪表板,对业务数据进行实时展示和分析。
6. 优势与劣势
优势
- 高性能:基于 Lucene 的全文搜索引擎,查询速度快。
- 灵活性:支持多种数据类型和复杂查询。
- 分布式架构:易于扩展,支持大规模数据处理。
- 强大的生态系统:与 Elastic Stack 工具无缝集成。
劣势
- 资源消耗:对内存和存储要求较高。
- 学习成本:复杂的查询 DSL 和分布式架构需要时间学习。
- 集群管理难度:大规模集群管理需要经验。
7. Elasticsearch 的生态系统
Elasticsearch 是 Elastic Stack(ELK/Elastic Stack)的核心组件,它与其他工具一起组成了强大的数据采集、存储、分析和可视化生态系统:
7.1 Logstash
- 作用:数据管道工具,用于从各种数据源采集、过滤、转换数据,并将其传输到 Elasticsearch。
- 功能:
- 支持多种数据输入和输出插件。
- 提供灵活的过滤和处理规则。
7.2 Kibana
- 作用:数据可视化工具,用于展示和分析存储在 Elasticsearch 中的数据。
- 功能:
- 提供交互式仪表板。
- 支持实时监控和报警。
- 包括专用功能模块(如机器学习、地图、APM)。
7.3 Beats
- 作用:轻量级数据采集工具,专为特定的数据类型而设计(如日志、网络流量、指标等)。
- 常用模块:
- Filebeat:日志文件采集。
- Metricbeat:系统和服务指标采集。
- Packetbeat:网络流量采集。
7.4 Elastic Cloud
- 作用:由 Elastic 官方提供的托管服务,支持 Elasticsearch 和整个 Elastic Stack 的部署。
- 特点:
- 简化了集群部署和运维。
- 支持自动扩展和内置安全功能。
总结
Elasticsearch 是一个功能强大、灵活的分布式搜索和分析引擎,在日志分析、数据搜索和实时监控等领域广泛应用。结合 Elastic Stack,Elasticsearch 提供了从数据采集到数据存储与可视化展现的全链路服务。