SolrCloud Autoscaling 自动添加副本

SolrCloud Autoscaling 自动添加副本

前言 问题描述

起因是这样的,我在本地调试 Solr 源码(版本 7.7.3),用 IDEA 以 solrcloud 方式启动了 2 个 Solr 服务,如下所示:
在这里插入图片描述

上图的启动参数 VM Options 如下:

-DzkHost=127.0.0.1:2181/solr7 -Djetty.port=8985 -Duser.timezone=UTC 
-Djetty.home=/Workspace/source-code/solr/solr/server 
-Dsolr.solr.home=/Workspace/Solr/Solr7_SolrHome_8985 
-Dsolr.install.dir=/Workspace/source-code/solr/solr 
-Dsolr.log.dir=/Workspace/Solr/Solr7_SolrHome_8985/logs 
-Dsolr.log=/Workspace/Solr/Solr7_SolrHome_8985/logs/solr.log

solrcloud_8986 启动参数和上面的类似,只需更改端口号

之后我在本地创建了一个 MOVIE 的 Collection,创建的时候表单内容如下:
在这里插入图片描述
上面的页面是我们自己的搜索中台创建 Collection 的表单页面,当时我没注意到 autoAddReplicas 参数设置了 true,当创建好 Collection 后,系统会自动分配好 shard 和 副本到对应的 Solr 节点上,如下所示:
在这里插入图片描述
之后我把 Shard1 和 Shard2 对应的副本全部删除,在8985端口的Solr节点上创建这两个 Shard 的 TLOG 类型副本,之后在 8986 节点上创建 Shard1 的 PULL 类型副本,如下所示:
在这里插入图片描述
起初我本来想调试查看 PULL 副本同步 TLOG 副本数据的代码,结果当我断点调试的时候发现 PULL 类型的副本没了,系统自动的在 8985 端口的 Solr 节点创建了一个 NRT 类型的副本。遇到这种情况我就比较纳闷,于是我重复上面的步骤,把 8986 端口的 Solr 节点 down 掉,观察后面的现象。当我关闭 8986 端口后,节点状态的变化如下:
在这里插入图片描述
可以看到此时 8986 端口的 Solr 节点状态已变成 down,之后耐心等待~。大约 2 min 左右,Shard 副本信息变成了如下结果:
在这里插入图片描述
我们可以看到此时原先的 PULL 副本没有了,取而代之的新增了一个 NRT 副本,而且该副本创建在 8985 端口的 Solr 节点上。
后来我仔细审视整个流程并调试源码,发现是我创建 Solr Collection 的时候无意将 autoAddReplica设置了 true,这个参数默认应该是 false,那么这个参数有什么作用,为什么会发生这个现象,这里就要提到 SolrCloud 的 Autoscaling 自动添加副本的功能了。

SolrCloud Autoscaling 自动添加副本

官方文档地址:https://solr.apache.org/guide/7_7/solrcloud-autoscaling-auto-add-replicas.html#the-autoaddreplicas-parameter

Solr 提供了一种方法,当活动副本( active replicas )数量低于创建集合时指定的复制因子(replicationFactor)时,自动为集合添加副本。

这里就要说到之前我创建 Collection 时,填写的 replicationFactor 为 2,这个参数的意思如下:
在这里插入图片描述

Solr 官方文档地址:https://solr.apache.org/guide/7_7/collections-api.html

这个参数默认是 1,而且其默认创建的就是 NRT 类型副本,而我观察到的现象是如果我的一个 Shard 有多副本,当其他机器的副本不可用时,会扩展出一个新的副本来,而没有创建过其他副本的 Shard2 并不会拓展出来新的副本。发生这个现象的原因就是我在创建 Collection 的时候将 addAutoReplicas 参数设置成了 true,其官文文档如下:
在这里插入图片描述
后面我又创建了一个新的 Collection 并将 autoAddReplicas 设置成了 false,重复之前的操作的步骤,等待 2 min 后,IDEA 中的 8985 端口的 Solr 节点打印出了如下日志:
在这里插入图片描述
中台页面可以看到:
在这里插入图片描述
原 PULL 类型的副本没有消失,而且也没有创建出新的副本。

autoAddReplicas 参数

在创建 Collection 的时候将布尔值 autoAddReplicas 参数传递给 Collection API 的 CREATE 命令,就会开启SolrCloud Autoscaling 自动添加副本的功能。接口如下:

创建启用 autoAddReplicas 的集合:
http://localhost:8983/solr/admin/collections?action=CREATE&name=my_collection&numShards=1&replicationFactor=5&autoAddReplicas=true

MODIFYCOLLECTION 命令可用于为任何集合启用或禁用此功能,接口如下:

修改集合以禁用 autoAddReplicas
http://localhost:8983/solr/admin/collections?action=MODIFYCOLLECTION&collection=my_collection&autoAddReplicas=false

在 ZooKeeper 中,如下节点可以看到集合的状态信息:
在这里插入图片描述
比如上图 autoAddReplicas 为 false,当我请求:http://localhost:8985/solr/admin/collections?action=MODIFYCOLLECTION&collection=MOVIE&autoAddReplicas=true 接口的时候,其值就会变为 true:
在这里插入图片描述

.autoAddReplicas 触发器

在上面的场景中,每次 8986 端口 Solr 节点 down 掉后再过 2 min 之后才会触发新增副本的操作,这个时间又是在哪里配置的?
在 Solr 中,当任何集合启用 autoAddReplicas 功能时,将自动创建名为 .autoAddReplicas 的触发器。

一个触发器就足以服务于所有启用此功能的集合。.autoAddReplicas 触发器监控从集群中丢失的节点,并使用默认的触发器动作来创建新的副本,以替换那些由丢失节点托管的副本。如果旧节点重新上线,它会卸载被移动的副本,该节点将根据需要自由托管其他副本。

由于该触发器为所有集合提供 autoAddReplicas 功能,因此可以使用挂起触发器和恢复触发器的自动扩展 API 命令,通过一次 API 调用为所有集合禁用和启用此功能。

为所有集合挂起 autoAddReplicas 功能

{
  "suspend-trigger": {
    "name" : ".autoAddReplicas"
  }
}

为所有集合恢复 autoAddReplicas 功能

{
  "resume-trigger": {
    "name" : ".autoAddReplicas"
  }
}

请求的 url 为:

curl -X POST -H "Content-Type: application/json" -d '{
  "suspend-trigger": {
    "name": ".auto_add_replicas"
  }
}' "http://localhost:8985/solr/admin/autoscaling"

# 响应如下:
{
  "responseHeader":{
    "status":0,
    "QTime":236},
  "changed":[".auto_add_replicas"],
  "result":"success",
  "WARNING":"This response format is experimental.  It is likely to change in the future."}

---

curl -X POST -H "Content-Type: application/json" -d '{
  "resume-trigger": {
    "name" : ".auto_add_replicas"
  }
}' "http://localhost:8985/solr/admin/autoscaling"

# 响应如下:
{
  "responseHeader":{
    "status":0,
    "QTime":121},
  "changed":[".auto_add_replicas"],
  "result":"success",
  "WARNING":"This response format is experimental.  It is likely to change in the future."}

在 ZooKeeper 中的 autoscaling.json 也可以看到更改,如下所示:
在这里插入图片描述
上面截图可以看到 waitFor 被设置成了 120(单位是秒),这也是为什么节点 down 掉 2min 后才会新增副本,关于 autoscaling.json 的解释如下:

在 SolrCloud 中,autoscaling.json 是一个配置文件,用于定义如何自动扩展集群资源以应对不同的事件。内容如下:

{
    "triggers": {
        ".auto_add_replicas": {
            "name": ".auto_add_replicas",
            "event": "nodeLost",
            "waitFor": 120,
            "enabled": "true",
            "actions": [
                {
                    "name": "auto_add_replicas_plan",
                    "class": "solr.AutoAddReplicasPlanAction"
                },
                {
                    "name": "execute_plan",
                    "class": "solr.ExecutePlanAction"
                }
            ]
        },
        ".scheduled_maintenance": {
            "name": ".scheduled_maintenance",
            "event": "scheduled",
            "startTime": "NOW",
            "every": "+1DAY",
            "enabled": true,
            "actions": [
                {
                    "name": "inactive_shard_plan",
                    "class": "solr.InactiveShardPlanAction"
                },
                {
                    "name": "inactive_markers_plan",
                    "class": "solr.InactiveMarkersPlanAction"
                },
                {
                    "name": "execute_plan",
                    "class": "solr.ExecutePlanAction"
                }
            ]
        }
    },
    "listeners": {
        ".auto_add_replicas.system": {
            "beforeAction": [],
            "afterAction": [],
            "stage": [
                "STARTED",
                "ABORTED",
                "SUCCEEDED",
                "FAILED",
                "BEFORE_ACTION",
                "AFTER_ACTION",
                "IGNORED"
            ],
            "trigger": ".auto_add_replicas",
            "class": "org.apache.solr.cloud.autoscaling.SystemLogListener"
        },
        ".scheduled_maintenance.system": {
            "beforeAction": [],
            "afterAction": [],
            "stage": [
                "STARTED",
                "ABORTED",
                "SUCCEEDED",
                "FAILED",
                "BEFORE_ACTION",
                "AFTER_ACTION",
                "IGNORED"
            ],
            "trigger": ".scheduled_maintenance",
            "class": "org.apache.solr.cloud.autoscaling.SystemLogListener"
        }
    },
    "properties": {}
}

Triggers 部分

.auto_add_replicas 触发器

  • name:触发器的名称,.auto_add_replicas。
  • event:触发这个触发器的事件类型,这里是 nodeLost,意味着当集群中的节点丢失时触发。
  • waitFor:在执行任何操作前等待的时间(秒),这里设置为 120 秒,以便在节点可能只是暂时不可达而非永久丢失的情况下,给予系统一定的恢复时间。
  • enabled:指示触发器是否启用。
  • actions
    • auto_add_replicas_plan:定义了当触发器被触发时要执行的具体行动,使用 solr.AutoAddReplicasPlanAction 类,这个动作负责计划在其他节点上创建丢失节点上副本的替代副本。
    • execute_plan:执行上一步计划的动作,使用 solr.ExecutePlanAction 类。

.scheduled_maintenance 触发器

  • name:触发器的名称,.scheduled_maintenance。
  • event:事件类型为 scheduled,表示这是一个根据计划进行的定期任务。
  • startTime:计划任务开始的时间,这里设置为 NOW,表示立即开始。
  • every:触发频率,这里是 +1DAY,表示每天执行一次。
  • enabled:此触发器是否启用。
  • actions
    • inactive_shard_plan:使用 solr.InactiveShardPlanAction 类,可能涉及对某些 shard 进行维护或使其暂时不活跃。
    • inactive_markers_plan:使用 solr.InactiveMarkersPlanAction 类,处理与维护相关的标记。
    • execute_plan:执行上述计划的动作。

Listeners 部分

.auto_add_replicas.system.scheduled_maintenance.system 监听器

这些监听器用于记录系统日志,并在特定的阶段对触发器活动进行反应。

  • beforeActionafterAction:分别在动作执行前后的监听器响应,这里没有具体的动作定义。
  • stage:定义监听器应响应的各种阶段,如 STARTED, ABORTED, SUCCEEDED, FAILED 等,这有助于跟踪每个操作的生命周期。
  • trigger:关联的触发器名称。
  • class:处理监听事件的类,这里是 org.apache.solr.cloud.autoscaling.SystemLogListener,用于将自动扩展事件记录到系统日志。

properties 部分

通常这个部分可以用来定义一些全局属性或默认值。


参考文档:https://solr.apache.org/guide/7_7/solrcloud-autoscaling-auto-add-replicas.html

部分断点截图:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

QT控制comboBox切换方法

目录 1. 效果2. 操作 1. 效果 如下图: 点击全切换雨天模式按钮 则 comboBox 文本显示为 “雨天模式”点击全切换正常模式按钮 则 comboBox 文本显示为 “雨天模式” 切换到 雨天模式 切换到 正常模式 2. 操作 使用 “setCurrentIndex” 方法,切换 combo…

vmware虚拟机增加磁盘容量

概述 当初始分配给虚拟机的磁盘空间不够时,需要从外部的主系统增加配给。 具体操作分为两步:一:通过虚拟机界面添加分配的磁盘配给;二:将新分配的配给给使用起来。 操作 添加磁盘配给 在虚拟机内部添加新分配的配给…

安装Intel Realsense D435i驱动与ROS包报错

1.下载安装realsense SDK 1.1 安装依赖 sudo apt install libudev-dev pkg-config libgtk-3-dev sudo apt install libusb-1.0-0-dev pkg-config sudo apt install libglfw3-dev sudo apt install libssl-dev1.2 权限 cd librealsense/ sudo cp config/99-realsense-libusb.…

独享代理VS共享代理,新手选择攻略

随着互联网的广泛普及和应用,涉及网络隐私、数据安全和网络访问控制的问题变得越来越重要。代理服务器作为一种常见的网络工具,可以在跨境电商、海外社媒、SEO投放、网页抓取等领域发挥作用,实现匿名访问并加强网络安全。在代理服务器类别中&…

GoLand 2024 for Mac GO语言集成开发工具环境

Mac分享吧 文章目录 效果一、下载软件二、开始安装1、双击运行软件(适合自己的M芯片版或Intel芯片版),将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功3、打开访达,点击【文…

哪个牌子的充电宝牌子便宜好用?2024年性价比高充电宝排行榜!

在 2024 年,充电宝市场依旧琳琅满目,让人眼花缭乱。大家都在寻找那个既便宜又好用的充电宝,可面对众多品牌和产品,常常感到无从下手。别担心!经过深入的市场调研和实际使用体验,我们为您精心整理出了 2024 …

掌握空投,预见未来:空投教程网,撸毛党的必备工具

随着区块链技术的发展,越来越多的人开始关注这一领域。对于很多人来说,如何有效地参与区块链项目,尤其是空投活动,成为了一个重要的问题。为了解决这一问题,“空投教程网”应运而生。作为一个专为撸毛党设计的工具&…

【高中数学/基本不等式】已知:x,y皆大于1,且x+2y=4 求:1/(x-1)+1/(y-1)的最小值为?

【问题来源】 https://www.ixigua.com/7025123539728466469?logTag1c2fd2e305d60e6277ab 之第一题 【问题】 已知:x,y皆大于1,且x2y4 求:1/(x-1)1/(y-1)的最小值为? 【解答】 解: 若将(x2y)/41代入目标式&…

【PostgreSQL】数据基石:PostgreSQL的数据类型与表结构设计

目录 核心数据类型深入探索 基础数值与文本类型 日期与时间类型 特殊与复合类型 JSON与HSTORE 表的创建、修改与管理 创建与修改表结构 索引与性能优化 约束与数据完整性 核心数据类型深入探索 PostgreSQL以其多样化的数据类型著称,不仅包括标准SQL数据类型…

昇思25天学习打卡营第04天 | 数据集 Dataset

昇思25天学习打卡营第04天 | 数据集 Dataset 文章目录 昇思25天学习打卡营第04天 | 数据集 Dataset数据集加载数据集迭代数据集的变换shufflemapbatch 自定义数据集可随机访问数据集对象可迭代数据集生成器 总结打卡 数据集Dataset对原始数据进行封装、变换,为神经网…

光照老化试验箱在化工产品暴晒测试中的应用

概述 光照老化试验箱是一种模拟自然光照条件下材料老化情况的实验设备,广泛应用于化工、建材、电子、汽车等行业中对材料的耐候性、耐光性能等进行测试。通过模拟日光中的紫外线和温度等环境因素,加速材料老化过程,以此评估材料在长期使用中…

C语言编程-基于单链表实现贪吃蛇游戏

基于单链表实现贪吃蛇游戏 1.定义结构体参数 蛇行走的方向 蛇行走的状态 蛇身节点类 维护蛇的结构体型 2.游戏运行前预备工作 定位光标位置 游戏欢迎界面 绘制游戏地图(边界) 初始化游戏中的蛇身 创建食物 3.游戏运行 下一个位置是食物,就吃掉…

阿里云 SAE 助力修正商城 3 周内提升系统承载能力 20 倍,轻松应对春晚流量

作者:赵世振、刘松伟、朱坪" 从了解阿里云 SAE 到使用 SAE 进行应用架构升级共经历 3 周,这 3 周我们系统能承载的 QPS 从 5000 增强到 10 万,提升 20 倍,轻松应对了春晚大促流量洪波。并且,SAE 还帮助我们降低了…

超详细:安装Linux系统、虚拟现实教程

文章目录 一、如何下载并使用VMware虚拟机1.百度搜索vmware2.进入官网点击Workstation Pro链接3.博通注册对应的账号4.博通填写用户名、密码后直接登录会跳转到博通登录页5.个人使用选择个人版 二、国内镜像网站下载(Centos版本)三、镜像系统的安装1.打开…

PCL小笔记

一、常用概念 1,过滤器Filters 消除噪音 2,特征Features 集合点属性:曲面的曲率估计和查询点的法线 通过k-neighborhood计算得到这两个属性作为特征 查找方法:KD-tress、八叉树等 3,关键点Keypoints 可以利用明确标…

Halcon支持向量机

一 支持向量机 1 支持向量机介绍: 支持向量机(Support Vector Machine,SVM)是Corinna Cortes和Vapnik于1995年首先提出的,它在解决小样本、非线性及高维模式识别表现出许多特有的优势。 2 支持向量机原理: 在n维空间中找到一个分类超平面…

4.整合第三方技术【整合JUnit】

目录 1.创建项目: 2.导入测试对应的starter 3.添加测试对象 3.1 添加Prodcut接口文件 3.2 添加ProdcutImpl文件 3.3 测试类添加测试文件,并开始测试 4.测试类文件解析 4.1.测试类使用SpringBootTest修饰 4.2使用自动装配的形式添加要测试的对象 1.…

LeetCode 算法:路径总和 III c++

原题链接🔗:路径总和 III 难度:中等⭐️⭐️ 题目 给定一个二叉树的根节点 root ,和一个整数 targetSum ,求该二叉树里节点值之和等于 targetSum 的 路径 的数目。 路径 不需要从根节点开始,也不需要在叶…

大模型与机器人精彩碰撞-7月5日晚上八点不见不散!

在瞬息万变的科技时代,新兴人工智能和机器人技术的结合正在引领新一轮的创新浪潮。你是否想成为未来科技的领航者?你是否想了解最前沿的AI与机器人技术?行麦科技重磅推出的“AIGC时代的生存法则”AI系列课,将为你揭开大模型与机器…

数据库操作语言(DML)

数据库操作语言(DML) 文章目录 数据库操作语言(DML)一、四种操作二、数据的插入(增)三、数据的删除(删)四、数据的修改(改)五、数据的查询(查&…