【Elasticsearch】搜索时分片路由
Elasticsearch 的Search Shard Routing(搜索分片路由)是一个核心机制,用于在分布式环境中高效地分发和执行搜索请求,确保查询能够快速、准确地返回结果,同时充分利用集群资源并保持系统的高可用性。以下是结合上述内容对 Elasticsearch 搜索分片路由的详细阐述:
---
1.搜索分片路由的基本概念
Elasticsearch 是一个分布式搜索引擎,数据被分割成多个分片(Shards),并分布在不同的节点(Nodes)上。每个索引(Index)由一个或多个主分片(Primary Shards)组成,每个主分片可以有零个或多个副本分片(Replica Shards)。副本分片的作用是提供数据冗余,以防止硬件故障,并分担搜索负载,从而提高搜索容量。
搜索分片路由的核心任务是决定如何将搜索请求分发到这些分片上。它需要考虑以下关键因素:
• 性能:如何快速响应搜索请求,减少延迟。
• 资源利用:如何合理分配集群资源,避免过载。
• 高可用性:如何在部分节点或分片不可用时,仍然能够完成搜索任务。
---
2.默认的搜索分片路由策略:自适应副本选择(Adaptive Replica Selection)
Elasticsearch 默认采用自适应副本选择策略来路由搜索请求。这种策略的目标是通过动态选择合适的分片和节点,优化搜索性能并降低延迟。自适应副本选择会根据以下因素进行决策:
(1)响应时间
• 协调节点(Coordinating Node)与候选节点之间之前请求的响应时间。响应时间越短,节点的优先级越高。
(2)搜索执行时间
• 候选节点执行上一次搜索所花费的时间。如果某个节点在处理搜索任务时表现良好,它将更有可能被选中。
(3)线程池队列大小
• 候选节点的`search`线程池队列大小。如果队列已满,说明该节点负载较高,可能会被跳过。
通过这些动态指标,自适应副本选择能够智能地选择当前负载较低、响应较快的节点来处理搜索请求。
---
3.自定义搜索分片路由
虽然自适应副本选择能够很好地平衡性能和资源利用,但在某些场景下,用户可能需要对搜索请求的路由进行更细粒度的控制。Elasticsearch 提供了`preference`查询参数,允许用户指定搜索请求的路由策略:
(1)本地优先(`_local`)
将搜索请求限制在本地节点的分片上。如果本地节点没有目标索引的分片副本,Elasticsearch 会回退到其他合适的节点。这种方式可以减少网络开销,提高搜索性能。
```http
GET /my-index-000001/_search?preference=_local
{
"query": {
"match": {
"user.id": "kimchy"
}
}
}
```
(2)自定义字符串
用户可以指定一个自定义的`preference`字符串,例如用户名或会话 ID。如果集群状态和分片选择没有变化,相同的`preference`字符串会将搜索请求路由到相同的分片。这种方式可以利用分片的缓存机制,为频繁执行的搜索提供更快的响应。
```http
GET /my-index-000001/_search?preference=my-custom-shard-string
{
"query": {
"match": {
"user.id": "kimchy"
}
}
}
```
(3)基于文档路由值
在索引文档时,可以指定一个路由值(Routing Value),将文档存储到特定的分片中。在搜索时,使用相同的路由值可以确保搜索请求被发送到存储目标文档的分片上。这种方式特别适用于需要精确控制文档存储和检索的场景。
```http
GET /my-index-000001/_search?routing=my-routing-value
{
"query": {
"match": {
"user.id": "kimchy"
}
}
}
```
---
4.搜索并发性和并行性控制
在大规模集群中,搜索请求可能涉及多个分片。为了防止集群过载,Elasticsearch 提供了以下机制来控制搜索的并发性和并行性:
(1)`max_concurrent_shard_requests`参数
该参数用于限制每个节点上可以并发处理的分片数量,防止单个搜索请求过载集群。默认值为`5`,可以根据集群的资源和负载情况进行调整。
```http
GET /my-index-000001/_search?max_concurrent_shard_requests=3
{
"query": {
"match": {
"user.id": "kimchy"
}
}
}
```
(2)`action.search.shard_count.limit`集群设置
该设置用于限制搜索请求可以命中的最大分片数量。如果请求超过此限制,Elasticsearch 会拒绝该请求,从而避免对集群造成过大压力。此设置可以通过集群设置 API 动态调整。
---
5.搜索分片路由的高可用性设计
Elasticsearch 的搜索分片路由机制不仅考虑了性能和资源利用,还设计了高可用性机制:
• 副本分片的冗余:副本分片的存在确保了即使某个节点或分片不可用,搜索请求仍然可以通过其他副本分片完成。
• 动态重路由:如果某个节点拒绝了搜索请求(例如负载过高),Elasticsearch 会自动将请求重新路由到其他合适的节点。
• 分片重新分配:在集群状态发生变化时(例如节点故障或分片迁移),Elasticsearch 会动态调整分片路由,确保搜索请求始终能够找到目标分片。
---
6.总结
Elasticsearch 的搜索分片路由机制是其高效、灵活且高可用的分布式搜索能力的核心。它通过以下方式实现了这些目标:
• 默认策略:自适应副本选择通过动态评估节点性能和负载,优化搜索请求的路由。
• 自定义控制:通过`preference`参数,用户可以根据具体需求对搜索路由进行细粒度控制。
• 资源保护:通过限制并发分片数量和设置分片数量上限,防止集群过载。
• 高可用性:通过副本分片的冗余和动态重路由机制,确保搜索请求的高可用性。
这种灵活且高效的路由机制使得 Elasticsearch 能够在大规模分布式环境中快速响应搜索请求,同时保持系统的稳定性和可靠性。
相关文章:
【Elasticsearch】搜索时分片路由
Elasticsearch 的Search Shard Routing(搜索分片路由)是一个核心机制,用于在分布式环境中高效地分发和执行搜索请求,确保查询能够快速、准确地返回结果,同时充分利用集群资源并保持系统的高可用性。以下是结合上述内容…...
MySQL登录问题总结
不管何种数据库,使用的第一步都是先登录。 MySQL命令行登录语句:mysql -u username -P port -p -D database_name 登录MySQL的报错一般从报错信息都能得到反馈,常见报错原因分析如下,实例中的以test用户为例,登录环境为…...
一些耳朵起茧子的名词解释
1 web应用 1.1 web应用的概念 Web应用(Web Application) 是一种通过浏览器访问的软件程序,它运行在服务器上,用户通过网络(如互联网或内网)与它进行交互。与传统网站(主要提供静态内容&#x…...
Redis 持久化:从零到掌握
Redis 作为一款广泛使用的内存数据库,虽然核心功能是基于内存提供高性能的数据存取,但在实际应用中,数据的持久化是不可忽视的。毕竟,内存中的数据一旦出现故障或重启,就会面临数据丢失的风险。因此,Redis …...
Mybatis MyBatis框架的缓存 一级缓存
1. 缓存的概念 缓存的概念 在内存中临时存储数据,速度快,可以减少数据库的访问次数。经常需要查询,不经常修改的数据,不是特别重要的数据都适合于存储到缓存中。 2.Mybatis缓存 mybatis包含了一个非常强大的查询缓存特性&#…...
第1章大型互联网公司的基础架构——1.6 RPC服务
你可能在1.1节的引言中注意到业务服务层包括HTTP服务和RPC服务,两者的定位不一样。一般来说,一个业务场景的核心逻辑都是在RPC服务中实现的,强调的是服务于后台系统内部,所谓的“微服务”主要指的就是RPC服务;而HTTP服…...
多个用户如何共用一根网线传输数据
前置知识 一、电信号 网线(如以太网线)中传输的信号主要是 电信号,它携带着数字信息。这些信号用于在计算机和其他网络设备之间传输数据。下面是一些关于网线传输信号的详细信息: 1. 电信号传输 在以太网中,数据是…...
idea-gradle打包运行配置
最近接触了一个项目,使用gradle做为构建工具,这里记录一波,毕竟平时使用的都是maven idea 配置 这里有个坑,Gradle Wrapper,配置的地址gradle下载超时 这个配置修改成阿里的 第一张 第二张 第二张配置的jvm貌似没啥用…...
(新版本onenet)stm32+esp8266/01s mqtt连接onenet上报温湿度和远程控制(含小程序)
物联网实践教程:微信小程序结合OneNET平台MQTT实现STM32单片机远程智能控制 远程上报和接收数据——汇总 前言 之前在学校获得了一个新玩意:ESP-01sWIFI模块,去搜了一下这个小东西很有玩点,远程控制LED啥的,然后我就想…...
一键部署开源DeepSeek并集成到钉钉
一键部署开源DeepSeek并集成到钉钉 简介: DeepSeek发布了两款先进AI模型V3和R1,分别适用于对话AI、内容生成及推理任务。由于官方API流量限制,阿里云推出了私有化部署方案,无需编写代码即可完成部署,并通过计算巢AppF…...
【爬虫基础】第一部分 网络通讯 P1/3
前言 1.知识点碎片化:每个网站实现的技术相似但是有区别,要求我们根据不同的网站使用不同的应对手段。主要是常用的一些网站爬取技术。 2.学习难度:入门比web简单,但后期难度要比web难,在于爬虫工程师与网站开发及运维…...
ES10中Object.fromEntries(),trimStart() ,trimend()的使用方法和使用场景例子
ES10(ECMAScript 2019)新特性总结 ES10(ECMAScript 2019)引入了一些新的方法,增强了 JavaScript 的灵活性和易用性。以下是 Object.fromEntries(),trimStart() 和 trimEnd() 的使用方法、使用场景以及例子…...
车载音频配置(二)
目录 OEM 自定义的车载音频上下文 动态音频区配置 向前兼容性 Android 14 车载音频配置 在 Android 14 中,AAOS 引入了 OEM 插件服务,使你可以更主动地管理由车载音频服务监督的音频行为。 随着新的插件服务的引入,车载音频配置文件中添加了以下更改: • OEM 自定义的车…...
级联选择器多选动态加载
一.级联展示 注:因为级联选择器这里是动态加载,因此如果上来选中一级就需要加载出后面三级的全部数据,依然会很卡,因此,和产品协商把一二级多选框去掉了,这样也避免了你选择一级不能实现子级被全部选中的问…...
华为动态路由-OSPF-骨干区
华为动态路由-OSPF-骨干区 一、OSPF简介 1、OSPF概述 OSPF是一种开放式的、基于链路状态的内部网关协议(IGP),用于在自治系统内部进行路由选择和通信。 OSPF是互联网工程任务组(IETF)定义的标准之一,被广…...
网络安全治理模型
0x02 知识点 安全的目标是提供 可用性 Avialability机密性 confidentiality完整性 Integrity真实性 Authenticity不可否认性 Nonrepudiation 安全治理是一个提供监督、问责和合规性的框架 信息安全系统 Information Security Management System ISMS 策略,工作程…...
企业软件合规性管理:构建高效、安全的软件资产生态
引言 在数字化转型的浪潮下,企业的软件使用方式日益多元化,涉及云端、订阅制、永久授权及浮动许可等多种模式。然而,随着软件资产的增多,企业面临着合规性管理的严峻挑战:非法软件使用、许可证管理不当、软件资产闲置…...
spring微服务+dubbo框架,某一服务启动时提示多个bean存在
在java的springboot项目中使用DubboService的注解的实现类中,在引用本模块的类时,使用的DubboRefrence注解,在启动项目时报错,提示该类需要以一个bean对象,但是存在了两个,把DubboRefrence的注解改成Autowi…...
跟着 Lua 5.1 官方参考文档学习 Lua (3)
文章目录 2.5 – Expressions2.5.1 – Arithmetic Operators2.5.2 – Relational Operators2.5.3 – Logical Operators2.5.4 – Concatenation2.5.5 – The Length Operator2.5.6 – Precedence2.5.7 – Table Constructors2.5.8 – Function Calls2.5.9 – Function Definiti…...
PyTorch 源码学习:阅读经验 代码结构
分享自己在学习 PyTorch 源码时阅读过的资料。本文重点关注阅读 PyTorch 源码的经验和 PyTorch 的代码结构。因为 PyTorch 不同版本的源码实现有所不同,所以笔者在整理资料时尽可能按版本号升序,版本号见标题前[]。最新版本的源码实现还请查看 PyTorch 仓…...
力扣-二叉树-501 二叉搜索树的众数
思路 二叉搜索树的特性就是中序遍历有序,所以思考时可以先按照有序数组思考 代码 class Solution { public:vector<int> result;TreeNode* pre nullptr;int count 1;int maxCount 0;void travesl(TreeNode* node){if(node nullptr) return;travesl(nod…...
vscode复制到下一行
linux中默认快捷键是ctrl shift alt down/up 但是在vscode中无法使用,应该是被其他的东西绑定了,经测试,可以使用windows下的快捷键shift alt down/up { “key”: “shiftaltdown”, “command”: “editor.action.copyLinesDownAction”…...
vscode将文件中行尾默认CRLF改为LF
安装prettier npm install --save-dev --save-exact prettier执行命令 npx prettier --write --end-of-line lf .即可将项目中的所有文件行尾序列格式改为lf *在你使用git拉取代码的时候,git会自动将代码当中与你当前系统不同的换行方式转化成你当前系统的换行方…...
Windows 环境下配置多个不同版本的 Maven
在实际开发中,不同的项目可能需要使用不同版本的 Maven。例如,老项目可能依赖于 Maven 3.3,而新项目可能需要 Maven 3.8+ 才能正常运行。因此,在 Windows 下配置多个 Maven 版本并能方便地切换是非常必要的 1. 下载并安装多个 Maven 版本 1.1 下载 Maven 访问 Apache Mav…...
网络运维学习笔记 013网工初级(HCIA-Datacom与CCNA-EI)DHCP动态主机配置协议(此处没讲思科)
文章目录 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)网关配置DHCP服务器配置如果没有DHCP服务器,只在网关上做DHCP服务器: DHCP(Dynamic Host Configuration Protocol,动态主…...
【ISO 14229-1:2023 UDS诊断(ECU复位0x11服务)测试用例CAPL代码全解析④】
ISO 14229-1:2023 UDS诊断【ECU复位0x11服务】_TestCase04 作者:车端域控测试工程师 更新日期:2025年02月17日 关键词:UDS诊断协议、ECU复位服务、0x11服务、ISO 14229-1:2023 TC11-004测试用例 用例ID测试场景验证要点参考条款预期结果TC…...
llama.cpp将sensor格式的大模型转化为gguf格式
前言 ollama本地只能导入gguf格式的大模型文件,将safetensors 文件转化为gguf格式。需要使用 llama.cpp 这个开源工具。以下是使用 llama.cpp 转换 .safetensors 格式模型到 .gguf 格式的详细步骤: 1. 首先克隆并编译 llama.cpp: 克隆项目 git clone https://gi…...
Fastgpt学习(5)- FastGPT 私有化部署问题解决
1.☺ 问题描述: Windows系统,本地私有化部署,postgresql数据库镜像日志持续报错" data directory “/var/lib/postgresql/data” has invalid permissions ",“ DETAIL: Permissions should be urwx (0700) or urwx,gr…...
【Linux AnolisOS】配置Linux固定ip地址。然后在Windows上连接使用linux中docker容器里的redis和nacos。
1.关于将虚拟机ip地址更改为静态地址 ,跟着下面这个视频搞的,不想看文章的可以看视频。 第四章-07-配置Linux固定IP地址哔哩哔哩bilibili 当用的centos9 视频里让我们打开网络配置文件 vim /etc/sysconfig/network-scripts/ifcfg-ens33 但是我打开时…...
Linux应用之构建命令行解释器(bash进程)
目录 1.分析 2.打印输入提示符 3.读取并且处理输入字符串 4.创建子进程并切换 5.bash内部指令 6.完整代码 1.分析 当我们登录服务器的时候,命令行解释器就会自动加载出来。接下来我们就。在命令行中输入指令来达到我们想要的目的。 我们在命令行上输入的…...
