ES原理、zookeeper、kafka

news/2025/10/20 21:45:44/文章来源:https://www.cnblogs.com/yuanxiaojiang/p/19153161

ES高级

ES底层原理

协调节点是 Elasticsearch 中接收客户端请求、将请求转发到相关数据节点、并汇总最终结果返回给客户端的中心路由节点

Cluster State 是 Elasticsearch 集群的元数据大脑,它记录了所有索引的设置、映射、节点信息等全局性配置

Pipeline 是 Elasticsearch 在索引文档(写入)前,对原始文档进行一系列预处理(如解析、转换、丰富数据)的一个工作流或过滤器集合

单个文档读取流程

image

多个文档读取流程

image

文档写入流程

image

ES底层分片存储原理剖析

  • Lucene 是驱动 Elasticsearch 实现高效倒排索引和快速全文搜索的底层核心搜索引擎库
  • Segment 是 Lucene 底层的、不可变的最小索引单元,一个分片由多个 Segment 组成,每次搜索都会遍历所有 Segment
  • 预写日志(WAL)主要记录的是所有未持久化到磁盘的最新数据操作,用于在系统崩溃时恢复分片,防止数据丢失
  • Checkpoint 会对比 最后一次磁盘提交点 和 Translog 中最后的操作序列号,将提交点之后的所有数据刷新到磁盘,并截断旧的 Translog
  • 出现 “searchable” 和 “unsearchable” 状态的根本原因,并不是一个技术缺陷,而是一个经过深思熟虑的架构设计:
    • 如果你想要极快的写入速度,就不能每次写入都直接落盘和刷新索引。
    • 如果你想要数据不丢失,就需要一个像 Translog 这样的“备忘录”。
    • 如果你想要高效的搜索,就需要 immutable(不可变)的索引结构以便缓存
  • 出现 “unsearchable” 状态,是因为数据已经成功写入了“备忘录”,但还没有被加工成“正式档案”
    • 数据先放入内存缓冲区,批量处理后再生成 Segment(就是在这个时间段造成了 unsearchable 的情况)
    • 数据先放入内存缓冲区,同时生成一个日志,如果只写入了日志而没有生成 segment,就会造成unsearchable

image

  ES集群加密

 ES集群加密认证(建议先拍摄快照)

  • 1.生成证书文件
[root@elk91 ~]# /usr/share/elasticsearch/bin/elasticsearch-certutil cert --days 3650 -out \
/etc/elasticsearch/myconfig/elastic-certificates.p12 -pass ""
Directory /etc/elasticsearch/myconfig does not exist. Do you want to create it? [Y/n]Yelasticsearch-certutil:Elasticsearch内置的PKI证书工具(专门用于生成和管理Elasticsearch 集群的SSL/TLS证书)cert:表示生成证书--days 3650:证书有效期(10年)-out /etc/elasticsearch/myconfig/elastic-certificates.p12:指定生成的证书文件保存位置指定生成的证书文件保存位置-pass "":密钥库密码(空密码)
  • 2.查看证书文件属主和属组并同步到其他节点
# 查看证书文件属主和组
[root@elk91 ~]# ll /etc/elasticsearch/myconfig/
-rw------- 1 root elasticsearch 3596 Oct 20 17:47 elastic-certificates.p12
[root@elk91 ~]# chmod +r /etc/elasticsearch/myconfig/elastic-certificates.p12
[root@elk91 ~]# ll /etc/elasticsearch/myconfig/
-rw-r--r-- 1 root elasticsearch 3596 Oct 20 17:47 elastic-certificates.p12# 同步证书到其他节点
[root@elk91 ~]# scp -r /etc/elasticsearch/myconfig/ root@10.0.0.92:/etc/elasticsearch/
[root@elk91 ~]# scp -r /etc/elasticsearch/myconfig/ root@10.0.0.93:/etc/elasticsearch/

 

  • 3.修改ES集群的配置文件并同步到其他节点(在最后一行添加)
# 启用 Elasticsearch 安全功能(包括认证和授权)
xpack.security.enabled: true
# 启用节点间通信的传输层 SSL 加密
xpack.security.transport.ssl.enabled: true
# 节点间 SSL 验证模式为检查证书有效性(不验证主机名)
xpack.security.transport.ssl.verification_mode: certificate
# 指定 SSL 密钥库路径(包含节点证书和私钥)
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/myconfig/elastic-certificates.p12
# 指定 SSL 信任库路径(包含受信任的 CA 证书)
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/myconfig/elastic-certificates.p12[root@elk91 ~]# scp /etc/elasticsearch/elasticsearch.yml root@10.0.0.92:/etc/elasticsearch/elasticsearch.yml
[root@elk91 ~]# scp /etc/elasticsearch/elasticsearch.yml root@10.0.0.93:/etc/elasticsearch/elasticsearch.yml

 

 

  • 4.重启所有节点ES集群、检查端口、访问测试
# 重启所有节点ES集群
[root@elk91/elk92/elk93 ~]# systemctl restart elasticsearch.service# 检查端口是否更新
[root@elk91/elk92/elk93 ~]# ss -lntup |grep "9[2|3]00"# 测试访问ES集群(访问被拒绝且状态码为401,则ES集群加密成功)
curl 10.0.0.93:9200/_cat/nodes  # 报错
curl 10.0.0.93:9200/_cat/nodes  # 报错

 

  • 5.生成ES的随机密码(此密码不可随意外泄)
[root@elk91 ~]# /usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto
warning: usage of JAVA_HOME is deprecated, use ES_JAVA_HOME
Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user.
The passwords will be randomly generated and printed to the console.
Please confirm that you would like to continue [y/N]y
Changed password for user apm_system
PASSWORD apm_system = HwysXjWaUn46LUFTp8jP
Changed password for user kibana_system
PASSWORD kibana_system = t63x4qAi4XiBUrg0OP8R
Changed password for user kibana
PASSWORD kibana = t63x4qAi4XiBUrg0OP8R
Changed password for user logstash_system
PASSWORD logstash_system = O8canAcjtjSPdsCM7wmJ
Changed password for user beats_system
PASSWORD beats_system = qtwns3ToQ3Cp3AfWDK7f
Changed password for user remote_monitoring_user
PASSWORD remote_monitoring_user = rch4vrN5D7qNQ4m1sPn1
Changed password for user elastic
PASSWORD elastic = P0wnK8EySuwva3f4371M

 

  • 6.使用密码访问ES集群
[root@elk91 ~]# curl -u elastic:P0wnK8EySuwva3f4371M 10.0.0.93:9200/_cat/nodes
10.0.0.93 65 65 9 0.00 0.13 0.17 cdfhilmrstw * elk93
10.0.0.91 69 89 13 0.03 0.68 0.71 cdfhilmrstw - elk91
10.0.0.92 70 56 8 0.06 0.19 0.22 cdfhilmrstw - elk92

 

 kibana页面登录认证及elastic密码修改

# 1.修改kibana的配置文件
[root@elk91 ~]# vim /etc/kibana/kibana.yml
elasticsearch.username: "kibana_system"
elasticsearch.password: "t63x4qAi4XiBUrg0OP8R"# 2.重启kibana服务
[root@elk91 ~]# systemctl restart kibana.service # 3.检查kibana服务是否监听
[root@elk91 ~]# ss -lntup |grep 5601

 

image

postman访问ES加密集群

image

filebeat访问ES加密集群

[root@elk93 ~]# cat /etc/filebeat/myconfig/tcp-to-elasticsearch-custom-index.yaml 
filebeat.inputs:
- type: tcphost: "0.0.0.0:9000"
output.elasticsearch:hosts: - "http://10.0.0.91:9200"- "http://10.0.0.92:9200"- "http://10.0.0.93:9200"index: "yuanxiaojiang-customindex-tcp%{+yyyy.MM.dd}"username: "elastic"password: "123456"setup.ilm.enabled: false
setup.template.name: "yuanxiaojiang-customindex"
setup.template.pattern: "yuanxiaojiang-customindex-tcp*"
setup.template.overwrite: false
setup.template.settings:index.number_of_shards: 3index.number_of_replicas: 0

 

logstash访问ES加密集群

[root@elk93 ~]# cat /etc/logstash/myconfig/my_patterns.conf 
input {file {path => "/tmp/patterns.log"start_position => "beginning"}
}
filter {grok {patterns_dir => ["/etc/logstash/my-patterns/"]match => {"message" => "%{SCHOOL:school_name} %{CLASS:class_name} %{YEAR:enroll_year} %{TERM:term}"}}
}
output {stdout {}
}
[root@elk93 ~]# logstash -rf /etc/logstash/myconfig/tcp-to-es.conf
[root@elk93 ~]# echo "logstash---> www.yuanxiaojiang.com" | nc 10.0.0.93 8888

 

kibana的RBAC(基于角色的访问控制)

image

ES集群API

ES集群API查看

[root@elk91 ~]# curl -su elastic:123456 10.0.0.91:9200/_cluster/health |jq
{"cluster_name": "my-application","status": "green","timed_out": false,"number_of_nodes": 3,"number_of_data_nodes": 3,"active_primary_shards": 49,"active_shards": 71,"relocating_shards": 0,"initializing_shards": 0,"unassigned_shards": 0,"delayed_unassigned_shards": 0,"number_of_pending_tasks": 0,"number_of_in_flight_fetch": 0,"task_max_waiting_in_queue_millis": 0,"active_shards_percent_as_number": 100
}

 

ES集群API相关参数说明

https://www.elastic.co/guide/en/elasticsearch/reference/7.17/cluster-health.html

 

 

cluster_name:集群的名称
status:集群的健康状态(基于其主分片和副本分片的状态)ES集群有以下三种状态:green:所有分片都已分配yellow所有主分片都已分配,但一个或多个副本分片未分配如果集群中的某个节点发生故障,则在修复该节点之前,某些数据可能不可用red一个或多个主分片未分配,因此某些数据不可用。这可能会在集群启动期间短暂发生,因为分配了主分片
timed_out:是否在参数false指定的时间段内返回响应(默认情况下30秒)
number_of_nodes:集群内的节点数
number_of_data_nodes:作为专用数据节点的节点数
active_primary_shards:可用主分片的数量
active_shards:可用主分片和副本分片的总数
relocating_shards:正在重定位的分片数
initializing_shards:正在初始化的分片数
unassigned_shards:未分配的分片数
delayed_unassigned_shards:分配因超时设置而延迟的分片数
number_of_pending_tasks:尚未执行的集群级别更改的数量
number_of_in_flight_fetch:未完成的提取次数
task_max_waiting_in_queue_millis:自最早启动的任务等待执行以来的时间(以毫秒为单位)
active_shards_percent_as_number:集群中活动分片的比率,以百分比表示

 

 

ELasticStack之ELFK架构存在的瓶颈

资源利用不足;
耦合性太强;
高峰期时间较短,峰值较短;- 11:40~13:30   35M  ----> 2GB12:30 ~ 13:00- 19:00 ~ 22:0020:00 ~ 21:30

 

image

image

image

zookeeper集群搭建

zookeeper集群规模选择

如果读的请求大约在75%以下,建议选择3台

参考连接:https://zookeeper.apache.org/doc/current/zookeeperOver.html

zookeeper集群搭建

# 下载zookeeper
[root@elk91 ~]# wget https://dlcdn.apache.org/zookeeper/zookeeper-3.9.4/apache-zookeeper-3.9.4-bin.tar.gz# 创建工作目录
[root@elk91 ~]# mkdir -p /my-zookeeper/{softwares,data,logs}/
[root@elk91 ~]# mkdir -p /my-zookeeper/{softwares,data,logs}/
[root@elk91 ~]# mkdir -p /my-zookeeper/{softwares,data,logs}/ # 解压软件包 [root@elk91 ~]# tar xf apache-zookeeper-3.9.4-bin.tar.gz -C /my-zookeeper/softwares/# 修改zookeeper的集群地址 [root@elk91 ~]# cp /my-zookeeper/softwares/apache-zookeeper-3.9.4-bin/conf/zoo_sample{.cfg,.cfg.bak} [root@elk91 ~]# vim /my-zookeeper/softwares/apache-zookeeper-3.9.4-bin/conf/zoo_sample.cfg tickTime=2000 # 定义最小单元的时间tick(ms) initLimit=10 # Followers 初始连接 Leader 的最大等待时间(10*tickTime) syncLimit=5 # Leader 与 Followers 间心跳响应的超时时间(5*tickTime) dataDir=/my-zookeeper/data/ # ZooKeeper 数据存储目录 clientPort=2181 # 客户端通过此端口访问ZooKeeper
4lw.commands.whitelist=* # 开启四字命令允许所有的节点访问

# server.ID=A:B:C[:D]
ID:服务器唯一标识(1-255)
A:服务器 IP 地址(10.0.0.91/92/93)
B:Leader 选举通信端口(5888)
C:节点间数据同步端口(6888)

server.91=10.0.0.91:5888:6888
server.92=10.0.0.92:5888:6888
server.93=10.0.0.93:5888:6888

# 同步配置文件到其他节点 

[root@elk91 ~]# scp -r /my-zookeeper/softwares/apache-zookeeper-3.9.4-bin/ root@10.0.0.92:/my-zookeeper/softwares/

[root@elk91 ~]# scp -r /my-zookeeper/softwares/apache-zookeeper-3.9.4-bin/ root@10.0.0.93:/my-zookeeper/softwares/

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941643.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF1606E Arena 题解(动态规划)

考虑设 \(f_{i,j}\) 表示现在存活 \(i\) 个人,血量最大的人为 \(j\)。这么设是因为注意到有没有胜者其实之和血量最大的是谁,以及有多少个血量最大的有关。 边界情况 \(f_{1,i}=0\)。 考虑转移。如果 \(j<i\),则…

服务器CPU市场概况2025

2025年的服务器CPU市场正处于关键转型期。传统的x86架构(以Intel和AMD为代表)依然占据主导,但基于Arm的解决方案正在快速崛起。随着人工智能(AI)、云计算和高性能计算(HPC)的普及,CPU的设计趋势正在朝着能效优…

CSP-S 24

9.21~9.2?9.21 今天开始集训告一段落了,去补文化课一周。 如果写不完回来会补(?) 115=100+0+15 t1 先等会 t2 先等会 t3 9.22:回来补债了 \([\gcd(i,j)=1]=[\gcd(p_i,p_j)=1]\) 这个限制初看好像很难转化,只能猜…

正睿 2025 NOIP20 连测 Day5 做题记录

T1给 \(m\) 个质数,第 \(i\) 个质数 \(p_i\) 出现了 \(n_i\) 次。求一种划分质数的方案,使得第一个集合的和等于第二个集合的乘积。萌萌题,注意到最后相当于是要求 \(p_1^{\alpha_1}p_2^{\alpha_2}\cdots p_k^{\alp…

29-腾讯云COS接入指南与价格说明

腾讯云对象存储(COS)接入流程与价格说明 一、腾讯云COS简介 腾讯云对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,具有高扩展性、低成本、高可靠性和高安全性等特点。用户可…

LLM学习记录DAY7

📘今日LLM学习笔记总结 一、大模型解码策略 1.1 自回归解码定义:逐词生成下一个词,基于已生成内容继续生成。 流程:输入词序列 ( u ) 重复:模型输出下一个词的概率分布 ( P ) 采样或选择下一个词 ( u ) 将 ( u )…

CSP-S 23

9.179.17 109=9+100 赛时将剩余时间“明智”的投入t4,结果就是后两题没分。 t1 三维前缀和+二分答案 写了个假的kdt调了2h... 二分显然是好想的。 看值域考虑复杂度: \(256\times 256\times 256\times 8=134217728\) …

Recall

可惜了,这静谧的长夜。 是夕阳,余晖照在我的肩上。 惨白的灯喧哗着。 昏黑,安静的可怕。 滴答,滴答。 滴答,滴答。 昏黑,安静的可怕。 惨白的灯喧哗着。 是夕阳,余晖照在我的肩上。 可惜了,这静谧的长夜。

CSP-S 20

9.119.11 今天是挂分的好日子~~~ 101=0+10+91 t1 追逐游戏 (chase) 倍增+k祖先 算了不想写了....... 第2次没保存然后死机丢失了... 不难理解也不难实现,细节手模即可。 t1 就这样吧,看代码。 code点击查看代码 #…

Flutter应用设置插件 - 轻松打开iOS和Android系统设置

一个功能强大的Flutter插件,支持从应用中直接打开iOS和Android系统的各种设置页面,包括位置、Wi-Fi、通知、蓝牙等系统设置,简化了用户设置跳转流程。app_settings 一个用于从Flutter应用中打开iOS和Android手机设置…

CSP-S 22

9.169.16 原来史可以连着吃 挂了100 t1 简单贪心,不多解释。 没有大样例爆了 code点击查看代码 #include <bits/stdc++.h> #define int long long using namespace std; const int inf = 1e18; int minn; int T…

/usr/bin/sudo 二进制文件的权限有问题,导致所有用户都无法使用 sudo

[root@node1 sudoers.d]# su - student [student@node1 ~]$ sudo whoami sudo ls /root -bash: /usr/bin/sudo: Permission denied -bash: /usr/bin/sudo: Permission denied 问题很明确了!在 node1 上,/usr/bin/sud…

MySQL 8.0.43社区版本安装流程

MySQL 8.0.43社区版本安装流程> 1. MySQL的下载 点击MySQL官网地址进入https://www.mysql.com/cn/,选择页面download,选择社区版本下载。选择对应自己主机机型下载Windows或者Linux版本的,这里以Windows版本为例子…

CSP-S 19

9.109.10 125=10+20+75+20 废话 模拟赛能不能类人一点??? 因为四道题所以四个样例是吧,你给那小样例有任何作用吗我请问呢? t1 染色(color) 结论题 赛时想假了(你但凡有个稍微大点的样例我也不会想这么假) 显然…

LangGraph 记忆系统实战:反馈循环 + 动态 Prompt 让 AI 持续学习

代理系统或者 RAG 方案,基本都需要一个双层记忆架构,这样 LLM 既能保持对当前上下文的专注,又能记住过往交互的内容。 短期记忆负责单个会话内的即时信息管理,长期记忆则跨会话存储知识,让系统能够持续学习和进化…

【HOWTO】购买和销售二手测试仪器指南

测试仪器是电子工程师、技术人员和电子爱好者在进行信号分析、测量和诊断时不可或缺的工具。尽管全新的测试仪器通常能提供最先进的技术,但价格往往较高,特别是对于预算有限的人。因此,二手测试仪器市场成为了一种经…

CSP-S 18

9.89.8 100+0+20+0 废话 赛时t1先打的暴搜,大数据直接飞了,折半搜即过,30min(当时感觉写的挺快应该不会很差)。 t2先模样例,哎怎么不对?哦少考虑情况。哎怎么还是不对?啊乘写成加了... 各种唐诗错误开始发力了,…

研1转码自学黑马程序员Python第7天 | Python函数知识 - 指南

研1转码自学黑马程序员Python第7天 | Python函数知识 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Conso…

小马算力致敬程序员

10 月 20日凌晨,我把最后一条 CI 流水线从自建 GPU 机器迁移到小马算力,推送、合并、触发——单元测试跑完,账单弹出:0.82。 同一时刻,公司群里弹出财务提醒:上月闲置显卡折旧 4 300。那一刻,我意识到“算力”这…