当前位置: 首页 > 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.dtcms.com/a/311653.html

相关文章:

  • accept函数及示例
  • CMake指令:mark_as_advanced
  • Django 日志配置详解
  • gbase8s 常见表约束介绍
  • 数字化转型驱动中小制造企业的质量管理升级
  • 技术面试知识点详解 - 从电路到编程的全栈面经
  • 【密码学】5. 公钥密码
  • 【Python修仙编程】(二) Python3灵源初探(11)
  • Noob靶机
  • 集成电路学习:什么是CMSIS微控制器软件接口标准
  • 用键盘快速移动Word和WPS文字中的选中段落
  • K8S部署ELK(二):部署Kafka消息队列
  • 计算机分类大全
  • 【学习笔记】MySQL技术内幕InnoDB存储引擎——第9章 性能调优
  • Android 13/14/15 默认授权应用权限的实现方法
  • 广告牌+序列帧的Shader效果
  • rocky\centos安装docker镜像的命令
  • 深入理解C++中的list容器:介绍、使用与实现
  • Flutter dart运算符
  • mini-swe-agent源码解读(进行中)
  • Redis 7 哈希(Hash)使用指南
  • 细分推广场景,让推客推广更贴合用户当下需求
  • 存储过程的介绍、基本语法、delimiter的使用
  • 未来交通:元宇宙技术重塑出行体验
  • 用Unity结合VCC更改人物模型出现的BUG
  • WebSocket断线重连机制:保障实时通信的高可用性
  • 疯狂星期四文案网第27天运营日记
  • 井云科技2D交互数字人:让智能服务触手可及的实用方案
  • KSP与ASM深度对比:原理、性能与使用场景
  • SpringBoot怎么查看服务端的日志