当前位置: 首页 > news >正文

K8S部署ELK(三):部署Elasticsearch搜索引擎

目录

1. Elasticsearch 详细介绍

1.1 Elasticsearch 核心概念

(1)基本架构

(2)数据模型(与关系型数据库对比)

1.2 核心特性

(1)全文检索

(2)近实时(NRT)

(3)分布式 & 高可用

(4)强大的聚合分析

(5)RESTful API

1.3 典型应用场景

1.4 数据写入与查询流程

(1)写入流程

(2)搜索流程

1.5 Elasticsearch 生态

1.6 性能优化要点

1.7 对比其他搜索引擎

2. 部署Elasticsearch

2.1 创建名字空间

2.3 创建service

2.4 创建statefulset

2.5 部署所有资源

2.6 检查Pod 状态


1. Elasticsearch 详细介绍

Elasticsearch 是一个开源的 分布式搜索和分析引擎,基于 Apache Lucene 构建,专为处理大规模数据而设计,提供近实时的搜索和分析能力。它广泛应用于 全文检索、日志分析、业务指标监控、安全分析 等领域。


1.1 Elasticsearch 核心概念

(1)基本架构

概念说明
Node(节点)一个运行中的 Elasticsearch 实例(服务器)。
Cluster(集群)多个 Node 组成的分布式系统(默认集群名 elasticsearch)。
Index(索引)类似数据库的“表”,存储相关文档(如 products, logs)。
Document(文档)索引中的基本数据单元(JSON 格式,类似数据库的“行”)。
Shard(分片)索引可拆分为多个分片,支持水平扩展(默认 1 主分片 + 1 副本)。
Replica(副本)分片的副本,提供高可用和负载均衡。

(2)数据模型(与关系型数据库对比)

RDBMSElasticsearch
DatabaseIndex
TableIndex (Type 已废弃)
RowDocument
ColumnField
SchemaMapping
SQLQuery DSL

1.2 核心特性

(1)全文检索

  • 支持 分词(Analyzer)模糊搜索(如“Elastc”能匹配“Elasticsearch”)。

  • 内置多种语言分析器(中文需插件如 IK Analyzer)。

(2)近实时(NRT)

  • 数据写入后 1 秒内 可被搜索(相比传统数据库的 B-tree 索引更快)。

(3)分布式 & 高可用

  • 数据自动分片(Sharding)和复制(Replication)。

  • 节点故障时自动切换副本。

(4)强大的聚合分析

  • 支持 统计(Metrics)、分组(Buckets)、嵌套聚合(类似 SQL 的 GROUP BY + COUNT/SUM)。

(5)RESTful API

  • 所有操作通过 HTTP API 完成,如:

    GET /products/_search
    {"query": { "match": { "name": "手机" } }
    }

1.3 典型应用场景

场景说明
搜索引擎电商商品搜索、新闻全文检索。
日志分析(ELK)存储和分析 Logstash/Filebeat 收集的日志。
指标监控结合 Metricbeat 监控服务器性能。
安全分析(SIEM)检测异常行为(如频繁登录失败)。
业务分析用户行为分析、实时仪表盘(通过 Kibana)。

1.4 数据写入与查询流程

(1)写入流程

  1. 客户端发送文档到任意 Node。

  2. Node 根据文档 ID 计算目标分片(默认 _id 哈希)。

  3. 数据写入主分片后,同步到副本分片。

  4. 返回写入成功响应。

(2)搜索流程

  1. 客户端发送查询请求到 Node。

  2. Node 作为协调节点,将查询广播到所有相关分片。

  3. 各分片返回结果,协调节点合并后返回客户端。

1.5 Elasticsearch 生态

  • Kibana:数据可视化和管理界面。

  • Logstash:数据采集和预处理。

  • Beats:轻量级数据采集器(如 Filebeat、Metricbeat)。

  • Elastic Stack(ELK):Elasticsearch + Logstash + Kibana 的完整日志解决方案。


1.6 性能优化要点

方向优化手段
硬件使用 SSD、增加内存(Lucene 依赖文件缓存)。
索引设计合理设置分片数(建议每个分片 10-50GB)。
查询优化使用 filter 替代 query(利用缓存)、避免通配符查询。
集群调优调整 JVM 堆大小(不超过物理内存的 50%)。

1.7 对比其他搜索引擎

特性ElasticsearchSolrOpenSearch
实时性⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐
分布式原生支持需手动配置兼容 ES 生态
易用性简单较复杂类似 ES
适用场景日志、分析文本搜索AWS 替代 ES

适用场景

  • 需要快速搜索和分析结构化/非结构化数据。

  • 实时日志或指标监控(如 ELK 架构)。

不适用场景

  • 频繁更新的 OLTP 系统(传统数据库更合适)。

  • 强一致性要求的场景(ES 是最终一致性)。

Elasticsearch 凭借其分布式架构和强大的搜索能力,已成为大数据和实时分析领域的核心工具之一。

2. 部署Elasticsearch

2.1 创建名字空间

kubectl create namespace elk

2.3 创建service

vim elasticsearch-service.yaml
---
apiVersion: v1
kind: Service
metadata:name: elasticsearch-cluster  #无头服务的名称,需要通过这个获取ip,与主机的对应关系namespace: elklabels:app: elasticsearch
spec:ports:- port: 9200name: elasticsearchclusterIP: Noneselector:app: elasticsearch  
---
apiVersion: v1
kind: Service
metadata:name: elasticsearch   #service服务的名称,向外暴露端口namespace: elklabels:app: elasticsearch
spec:ports:- port: 9200name: elasticsearchtype: NodePortselector:app: elasticsearch
​

2.4 创建statefulset

vim elasticsearch-statefulset.yaml
---
apiVersion: apps/v1
kind: StatefulSet
metadata:name: elasticsearchnamespace: elk
spec:serviceName: "elasticsearch-cluster"   #填写无头服务的名称replicas: 1  #实例数,最好为3selector: matchLabels: app: elasticsearchtemplate:metadata:labels:app: elasticsearchspec:containers:- name: elasticsearchimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/elasticsearch:7.17.3imagePullPolicy: IfNotPresentresources:requests:memory: "500Mi"cpu: "500m"limits:memory: "1000Mi"cpu: "1000m"ports:- containerPort: 9200name: elasticsearchenv:- name: node.namevalueFrom:fieldRef:fieldPath: metadata.name- name: discovery.typevalue: zen- name: cluster.namevalue: elasticsearch- name: cluster.initial_master_nodesvalue: "elasticsearch-0"- name: discovery.zen.minimum_master_nodesvalue: "1"- name: discovery.seed_hostsvalue: "elasticsearch-0.elasticsearch-cluster"- name: network.hostvalue: "0.0.0.0"- name: "http.cors.allow-origin"value: "*"- name: "http.cors.enabled"value: "true"- name: "number_of_shards"  #分片数value: "5"- name: "number_of_replicas"  #每个分片的副本数value: "1"- name: path.datavalue:  /usr/share/elasticsearch/data  #数据存储路径volumeMounts:                           - name: es-data                  mountPath: /usr/share/elasticsearch/data  #挂载数据目录initContainers:- name: fix-permissionsimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/busybox:1.37.0imagePullPolicy: IfNotPresentcommand: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]securityContext:privileged: truevolumeMounts:                           - name: es-data                  mountPath: /usr/share/elasticsearch/data  #挂载数据目录
​- name: increase-vm-max-mapimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/busybox:1.37.0imagePullPolicy: IfNotPresentcommand: ["sysctl", "-w", "vm.max_map_count=262144"]securityContext:privileged: true- name: increase-fd-ulimitimage: swr.cn-north-4.myhuaweicloud.com/ddn-k8s/docker.io/library/busybox:1.37.0imagePullPolicy: IfNotPresentcommand: ["sh", "-c", "ulimit -n 65536"]securityContext:privileged: truevolumeClaimTemplates:                     #这步自动创建pvc,并挂载动态pv- metadata:name: es-dataspec:accessModes: ["ReadWriteMany"]storageClassName: nfs-client  #存储类名称resources:requests:storage: 2Gi
​

2.5 部署所有资源

[root@master1 Elasticsearch]# ls
elasticsearch-service.yaml  elasticsearch-statefulset.yaml
[root@master1 Elasticsearch]# kubectl apply -f ./
service/elasticsearch-cluster created
service/elasticsearch created
statefulset.apps/elasticsearch created

2.6 检查Pod 状态

[root@master1 Elasticsearch]# kubectl get pod -n elk 
NAME              READY   STATUS    RESTARTS   AGE
elasticsearch-0   1/1     Running   0          45s
filebeat-6db9l    1/1     Running   0          87m
filebeat-qllxg    1/1     Running   0          87m
filebeat-r5hw7    1/1     Running   0          87m
kafka-0           1/1     Running   0          26m
http://www.lryc.cn/news/608325.html

相关文章:

  • 【机器学习】非线性分类算法(上):KNN(基于距离相似度)与朴素(特征独立)贝叶斯(基于概率统计)
  • 排序算法-堆排序
  • SQL 四大语言分类详解:DDL、DML、DCL、DQL
  • 分布在内侧内嗅皮层的层Ⅱ或层Ⅲ的头部方向细胞(head direction cells)对NLP中的深层语义分析的积极影响和启示
  • 智能制造——解读CMMM评估手册【附全文阅读】
  • MyBatis 批量操作 XML 实现方式
  • 信创应用服务器TongWeb安装教程、前后端分离应用部署全流程
  • 元宇宙重构未来交通新图景
  • linux source命令使用详细介绍
  • 空间平面旋转与xoy平行
  • Node.js中path模块的使用指南
  • QT中使用OpenCV保姆级教程
  • 1分钟临时共享空间在线小工具实现
  • 安卓自动点击器:设置点击周期 / 滑动,抢票、游戏刷日常秒会
  • 2025牛客多校第六场 D.漂亮矩阵 K.最大gcd C.栈 L.最小括号串 个人题解
  • C++入门基础(三):const引用、指针和引用的关系、inline(修饰内联函数)替代宏、nullptr代替null
  • Rust进阶-part1-智能指针概述-box指针
  • Java中Lambda 表达式的解释
  • 机器学习实战:KNN算法全解析 - 从原理到创新应用
  • 机器学习消融实验:方法论演进、跨领域应用与前沿趋势
  • 大模型(五)MOSS-TTSD学习
  • 【MATLAB】(四)函数运算
  • 【MATLAB】(五)向量
  • C语言第八章指针一
  • MybatisPlus生成代码
  • MQTT协议测试环境部署
  • MybatisPlus-自动生成代码
  • 洛谷刷题8.2
  • 【AI学习】RadioDiff:代码学习
  • 福彩双色球第2025088期篮球号码分析