惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

博客园 - 司徒正美
罗磊的独立博客
Recorded Future
Recorded Future
Cyberwarzone
Cyberwarzone
AWS News Blog
AWS News Blog
S
Securelist
Stack Overflow Blog
Stack Overflow Blog
Latest news
Latest news
T
Tailwind CSS Blog
有赞技术团队
有赞技术团队
T
Threat Research - Cisco Blogs
Scott Helme
Scott Helme
K
Kaspersky official blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Engineering at Meta
Engineering at Meta
S
Schneier on Security
P
Proofpoint News Feed
C
Cyber Attacks, Cyber Crime and Cyber Security
Last Week in AI
Last Week in AI
O
OpenAI News
P
Proofpoint News Feed
V2EX - 技术
V2EX - 技术
Google Online Security Blog
Google Online Security Blog
The Hacker News
The Hacker News
C
Cisco Blogs
V
Vulnerabilities – Threatpost
P
Palo Alto Networks Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy & Cybersecurity Law Blog
博客园 - 三生石上(FineUI控件)
C
CXSECURITY Database RSS Feed - CXSecurity.com
Attack and Defense Labs
Attack and Defense Labs
S
Secure Thoughts
S
SegmentFault 最新的问题
M
MIT News - Artificial intelligence
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
S
Security @ Cisco Blogs
宝玉的分享
宝玉的分享
L
LINUX DO - 热门话题
Webroot Blog
Webroot Blog
Project Zero
Project Zero
aimingoo的专栏
aimingoo的专栏
Know Your Adversary
Know Your Adversary
U
Unit 42
Hugging Face - Blog
Hugging Face - Blog
I
Intezer
Recent Commits to openclaw:main
Recent Commits to openclaw:main
T
Troy Hunt's Blog
Google DeepMind News
Google DeepMind News

Xiaobin's Notes

Mac本地快速部署DeepSeek Electron的原理 如何让大语言模型输出JSON格式 webstorm 的 cpu 占用高 修改Joplin主题样式 ECMAScript 历代版本 新一代包管理器 PNPM React useEffect() Hook Vue 2.x 使用高德地图JS API 2.0加载起点终点路径轨迹 家庭用电插座 MacOS 14.4 引发Java 应用崩溃 重定向广告 Pyenv工具 ElasticSearch集群节点 Elasticsearch Mapping 参数 Elasticsearch元数据 Elasticsearch的数据类型 Go语言的向后兼容和toolchain规则 Go 1.21 新增特性
ElasticSearch集群原理
xbl · 2023-12-20 · via Xiaobin's Notes

1 集群分布式原理

ES集群可以根据节点数, 动态调整主分片与副本数, 做到整个集群有效均衡负载。

单节点状态下:

两个节点状态下, 副本数为1:

三个节点状态下, 副本数为1:

三个节点状态下, 副本数为2:

2 分片处理机制

设置分片大小的时候, 需预先做好容量规划, 如果节点数过多, 分片数过小, 那么新的节点将无法分片, 不能做到水平扩展, 并且单个分片数据量太大, 导致数据重新分配耗时过大。

假设一个集群中有一个主节点、两个数据节点。orders索引的分片分布情况如下所示:

1
2
3
4
5
6
7
PUT orders 
{
"settings":{
"number_of_shards":2, ## 主分片 2
"number_of_replicas":2 ## 副分片总数 4
}
}

整个集群中存在P0和P1两个主分片, P0对应的两个R0副本分片, P1对应的是两个R1副本分片。

3 新建索引处理流程

  1. 写入的请求会进入主节点, 如果是NODE2副本接收到写请求, 会将它转发至主节点。
  2. 主节点接收到请求后, 根据documentId做取模运算(外部没有传递documentId,则会采用内部自增ID), 如果取模结果为P0,则会将写请求转发至NODE3处理。
  3. NODE3节点写请求处理完成之后, 采用异步方式, 将数据同步至NODE1和NODE2节点。

4 读取索引处理流程

  1. 读取的请求进入MASTER节点, 会根据取模结果, 将请求转发至不同的节点。
  2. 如果取模结果为R0,内部还会有负载均衡处理机制,如果上一次的读取请求是在NODE1的R0, 那么当前请求会转发至NODE2的R0, 保障每个节点都能够均衡的处理请求数据。
  3. 读取的请求如果是直接落至副本节点, 副本节点会做判断, 若有数据则返回,没有的话会转发至其他节点处理。