赞
踩
加入倒排索引之前,es在其主体上进行的操作:
字符过滤 转变为字符 / 文本切分单|多个分词 / 分词过滤转变分词 / 分词索引存储到索引
cluster.name 相同 集群,承担数据 负载压力
分段存:索引文件被分成段,不变性 本身是倒排索引,写入不可改
文件系统缓存
段写入到磁盘生成提交点,记录all提交后段信息的文件,只读
段在内存,只写的权限,不能被检索
新增:新增段就ok
删除:新增.del文件,列出被删段信息,可被查到 最终结果被返回前从结果集中移除
更新:删除+新增,旧的文件标记del文件,新版索引到新段
新数据先写入内存
文件系统缓存:1s 内存达到一定量 触发刷新refresh 新段 存储到 文件缓存系统
磁盘:提交点 刷盘
内存分段提交到磁盘
translog 事务日志,记录每次es的操作
flush 事务被清空,段全量提交到磁盘
内存缓存满了/flush超过一定时间/事务日志达到阈值
提升搜索性能 均衡I/O CPU计算能力
分段总量保持可控范围内,每个搜索请求轮流检查每个段 段多检索慢
真正的删除文档
文档经过analyzer处理(分词/去停用词/单复数/时态) term 文档编号 词频
索引优化: 给term排序 二分查找 logN
term index:A开头的有哪些term 分别在哪页
含term的前缀,通过term index快速定位到term dictionary的某个offset 磁盘顺序查找
from size: 普通的分页查询
scroll:快照,每次只能获取一页的内容,然后会返回一个scroll_id
search_after:依赖上一次查询的结果 高效 可扩展 大规模分野 实时
整理:Elasticsearch 三种分页方式_es search after原理-CSDN博客
query之前执行,过滤掉多的数据
倒排索引中查找搜索串, 文档id bitset 过滤 追踪query,近256个query中超过次数 缓存bitset,小的segemtn不需要缓存,提升性能
bitset由es自动更新
每个字段都有自己的倒排索引
跳表 同时遍历多个term的posting list 互相skip
跳表:多层有序链表组成 最低层level1含all元素,含指针
多数据量使用跳表 效果显著
少的使用bitset 压缩 按位与 得到最后的交集
使用bitset数据结构,多个term求出bitset,对bitset做AN操作
内存 存 more数据,内存FST压缩term index (内存里)
posting list存储文档id,id很大的时候压缩,排序和大数变小数
得分:搜索词条的频率以及它有多常见(一个文档中)
TF-IDF,多个文档中越多越不相关,and you,and 出现的次数多不重要
ZenDiscovery模块复制,ping rpc发现彼此 unicast
多个node当选master,脑裂 破坏数据一致性,导致集群不可控
分布式 投票,master被多节点认可,保证只有一个
discovery.zen.minimum_master_nodes=sum(node)/2+1 多半
脑裂:
master候选等待多数节点join后才能成为master,保证master得到认可
raft算法,选举周期term 每周期只能投一票 再投就是下一周期,如最后两个节点都认为自己是master,两个term都收集到了多数派的选票,多数节点的term是较大的那个
去中心化
shards
索引分片,es可把完整索引分成多个分片,可以把一个大的索引拆分多个分布到
replicas:索引副本,可设置多个索引副本
masterNode该节点不和应用创建连接,保存集群状态
修改节点状态信息以及处理元数据:索引增 删 分片路由 索引相关的mapping/setting
recovery:数据恢复/数据重新分布,节点加入/退出 据机器负载对索引分片重新分配
ingest:大数据处理环节的ETL 抽取 转换 加载
数据前置处理转换的节点,pipeline管道 过滤转换
数据转换和丰富,20个内置处理器 grok date gsub
批量请求或索引操作前,ingest拦截请求 处理文档
logstash:大量输入/出插件,支持不同架构;在本地缓存数据,集成大量不同消息队列
ingest:批量bulk 索引index请求将数据推送es,长时间无法联系es丢数据;28种类处理器操作 单一事件上下文运行
每个索引分成多个分片shards进行存储,分片会分布式部署在多个不同的节点
副本分片:容错/ 请求的负载均衡
discovery.zen.ping.unicast.hosts配置的节点获取集群状态,找到master节点,发送一个join request(discovery.zen.join_timeout),主节点接收到request后,同步集群状态到新节点
非主节点出现3次ping不通的情况(ping_interval 默认为1s;ping_timeout =30s),主节点会认为该节点已宕机,将该节点踢出集群
当主节点发生故障,集群中的其他节点将会ping当前的master eligible节点,并从中选出一个新的主节点
通过配置discovery.zen.minimum_master_nodes防止集群出现split brain:检查集群中master eligible的个数来判断是否选举出一个主节点。其个数最好设置为(number_master eligible/2)+1,防止当主节点出问题时,脑裂问题
节点可以通过设置node.master为false来阻止自己变为一个主节点
从active master eligible node被选举为master节点, 没有 从masterCandidates选出id最小的节点
每个 shard 都有自己的Allocation ID区分
集群级元信息中记录了最新shard 的Allocation ID集合 in-sync allocation IDs
主副shard没有同步,那么副本的shard会将被从in-sync allocation IDs踢出
shard为 节点的平方数
一个shard 30-50G,SSD固态硬盘100G
*T数据 一个分片50G 主分片20个 400个
海外社交,用户比较多
shard数不能太多 master单独做client节点
elasticsearch高可用 原理 (图解+秒懂+史上最全)-CSDN博客
Elasticsearch Curator 数据迁移
索引复制其他es集群,数据中心高可用HA 灾难回复DR CDN样体系
一个集群被多个集群订阅,复制到多个集群
follower拉取pull leader的数据,follower不能写入
平衡算法 扩容 减容 导入数据
Elasticsearch 主从同步之跨集群复制-CSDN博客
这个网速 写了很多没保存
部署时关闭缓存swap/
使用:
20个节点,香港 印度 中东 欧洲 美国 巴西
20+索引 不同业务 35G左右 索引大小200G
20个分片 40个副本
https://www.cnblogs.com/liang1101/p/7284205.html
https://blog.csdn.net/laoyang360/article/details/78290484
https://www.jianshu.com/p/716408af7ebb
https://blog.csdn.net/laoyang360/article/details/93376355
https://segmentfault.com/a/1190000021614149
https://www.jianshu.com/p/716408af7ebb
https://discuss.elastic.co/t/dec-22nd-2018-cn-elasticsearch-ccr/161626
https://www.elastic.co/guide/en/elasticsearch/reference/7.5/indices-split-index.html
https://www.elastic.co/guide/en/elasticsearch/reference/6.1/indices-split-index.html
ES7基础篇-10-SpringBoot集成ES操作-CSDN博客
https://www.cnblogs.com/acestart/p/14884380.html
https://www.cnblogs.com/lxcmyf/p/14276974.html
elasticsearch高可用 原理 (图解+秒懂+史上最全)-CSDN博客
https://so.csdn.net/so/search?q=elasticsearch&t=blog&u=ma15732625261&urw= 之前17年18年写的水文 别看这么多 其实挺简单
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。