(mongodb副本集) PSA模式添加、修改节点

(mongodb副本集) PSA模式添加、修改节点

PSA模式介绍

PSA模式(Primary-Secondary-Arbiter)是MongoDB复制集中的一种架构配置。在这种模式下,复制集由一个主节点(PRIMARY)、一个从节点(SECONDARY)和一个仲裁者节点(ARBITER)组成。

在MongoDB的复制集中,仲裁者节点(Arbiter)是一种特殊类型的节点,其主要作用是在主节点(Primary)不可用时参与选举过程,帮助复制集选择一个新的主节点。以下是仲裁者节点的一些特点:

  1. 不存储数据:与普通的从节点(Secondary)不同,仲裁者节点不存储数据副本,因此不会占用额外的存储资源。
  2. 投票权:尽管仲裁者节点不存储数据,但它拥有一个投票权,可以在选举新主节点时参与投票。
  3. 减少成本:由于仲裁者节点不需要存储数据,因此可以在成本较低的机器上运行,或者在不同的数据中心运行,以提高复制集的可用性和容错能力。
  4. 提高选举效率:在复制集中,选举新主节点需要超过半数的投票。在只有两个从节点的复制集中,如果一个从节点不可用,复制集将无法进行选举。引入仲裁者节点可以确保即使一个从节点不可用,复制集仍然可以进行选举。
  5. 不参与数据复制:仲裁者节点不参与数据复制过程,因此不会增加网络和存储的负担。
  6. 不影响业务:由于仲裁者节点不处理业务读写请求,其故障不会影响业务的正常运行。

PSA模式下添加/修改节点出现的问题

情况一:添加副节点

rs.add()​添加的节点默认priority和votes都为1。然而,在PSA模式中,通常希望新添加的节点不参与选举(即votes​为0),并且priority​为0以避免其成为主节点。如果新添加的节点具有投票权和优先级,那么在主节点宕机时,它可能会被选举为主节点,这可能会导致数据不一致和可用性问题。

myrepl:PRIMARY> rs.add('127.0.0.1:27019')
...{"ok" : 0,"errmsg" : "Rejecting reconfig where the new config has a PSA topology and the secondary is electable, but tfig contains only one writable node. Refer to https://docs.mongodb.com/manual/reference/method/rs.reconfigForPSASet/steps on reconfiguring a PSA set.","code" : 103,"codeName" : "NewReplicaSetConfigurationIncompatible","$clusterTime" : {"clusterTime" : Timestamp(1731679536, 1),"signature" : {"hash" : BinData(0,"AAAAAAAAAAAAAAAAAAAAAAAAAAA="),"keyId" : NumberLong(0)}}
...

情况二:修改副节点

这里副节点的priority​和votes​一开始都为0,报错原因同上:在PSA模式中,通常希望新添加的节点不参与选举(即votes​为0),并且priority​为0以避免其成为主节点。

myrepl:PRIMARY>var cfg = rs.conf()
myrepl:PRIMARY>cfg.members[2].priority = 1
myrepl:PRIMARY>cfg.members[2].votes = 1
myrepl:PRIMARY>rs.reconfig(cfg){"ok" : 0,"errmsg" : "Rejecting reconfig where the new config has a PSA topology and the secondary is electable, but the old config contains only one writable node. Refer to https://docs.mongodb.com/manual/reference/method/rs.reconfigForPSASet/ for next steps on reconfiguring a PSA set.","code" : 103,"codeName" : "NewReplicaSetConfigurationIncompatible"
}

PSA模式下如何添加/修改节点

在PSA模式下,如果直接使用rs.reconfig()​修改节点可能会失败,因为MongoDB不允许在只有一个可写节点的情况下重新配置PSA拓扑。在这种情况下,应使用rs.reconfigForPSASet()​方法,它分两步重新配置副本集:

这里假设是在添加第三个节点,其为副节点。对节点的修改同理。

// 获取当前副本集的配置信息,并将其存储在变量cfg中
cfg = rs.conf();// 直接修改cfg对象中的members数组的第3个元素(索引为2,因为索引从0开始)
// 这个操作是在内存中修改副本集的配置,还没有应用到副本集
myrepl:PRIMARY> cfg.members[2] = { "_id": 2, // 为新成员指定一个唯一的_id"host": "127.0.0.1:27019", // 指定新成员的主机地址和端口"votes": 1, // 允许新成员参与选举,拥有1票"priority": 1 // 设置新成员的优先级为1,这意味着它可以被选举为主节点
};// 使用rs.reconfigForPSASet方法重新配置副本集
// 这里的2表示我们正在修改members数组中的第3个成员(索引为2)
// cfg是我们刚刚修改过的包含新成员信息的配置对象
rs.reconfigForPSASet(2, cfg);

rs.reconfigForPSASet()

rs.reconfigForPSASet()​ 方法是 MongoDB 中用于在 PSA(Primary-Secondary-Arbiter)模式的副本集中安全添加或修改副节点的函数。

rs.reconfigForPSASet( memberIndex: <num>, config: <configuration>, { "force" : <boolean>, "maxTimeMS" : <int> })
  • memberIndex​:正在添加或修改的从节点的索引。
  • config​:用于指定副本集新配置的文档。
  • force​:可选参数,不建议使用 force: true​,因为这可能导致已提交的写入操作回滚。
  • maxTimeMS​:可选参数,指定在 rs.reconfigForPSASet()​ 操作期间处理每次重新配置的累积时间限制(以毫秒为单位)。

rs.reconfigForPSASet()​分两步重新配置副本集:

  • 首先,使用{ votes: 1, priority: 0 }​添加或修改从节点。
  • 一旦添加或修改的从节点赶上所有已提交的写入,请重新配置从节点以具有非零优先级{ votes: 1, priority: <num> }​。

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

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

相关文章

基于Java+SSM+JSP+MYSQL实现的宠物领养收养管理系统功能设计与实现二

运行环境:jdk1.8、mysql5.x、idea、maven3.5/3.5 如果环境一致 运行不起来可以右侧联系我,包运行。 功能:管理员信息数据层Mapper、宠物信息数据层Mapper、宠物领养记录信息数据层Mapper、宠物评论信息数据层Mapper、宠物评论回复信息数据层Mapper、用户信息数据层Mapper 技…

Alpha冲刺(3/14)——2024.11.14

目录一、团队成员分工与进度二、成员任务问题及处理方式三、冲刺会议内容记录会议内容四、GitHub签入记录及项目运行截图GitHub签入记录五、项目开发进展及燃尽图项目开发进展燃尽图六、团队成员贡献表 一、团队成员分工与进度成员 完成的任务 完成的任务时长 剩余时间施靖杰 编…

「AI Infra 软件开源不是一个选项,而是必然」丨云边端架构和 AI Infra专场回顾@RTE2024

在人工智能和开源技术蓬勃发展的当下,AI Infra 项目正经历着日新月异的变革。从跨平台运行时到云边端 AI 基础设施,再到多模态知识助手,创新浪潮席卷而来。这些进步不仅显著提升了技术指标,也为实时音视频处理、边缘计算、大模型应用等场景开辟了新的可能性。在 RTE 2024 大…

2024-2025-1 20241305 《计算机基础与程序设计》第八周学习总结

作业信息这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 2024-2025-1计算机基础与程序设计第八周作业这个作业的目标 1、功能设计与面向对象设计 2、面向对象设计过程 3、面向对象语言三要素 4、汇编、编译、解释、执行作业正文 本博客链接教材学习…

基于Java+SSM+JSP+MYSQL实现的宠物领养收养管理系统功能设计与实现一

功能点:管理员信息实体类Entity、宠物信息实体类Entity、宠物领养记录信息实体类Entity、宠物评论信息实体类Entity、宠物评论回复信息实体类Entity、用户信息实体类Entity 技术点:SSM+JSP+Mysql+Bootstrap+JS+CSS 免费学习:猿来入此一、前言介绍: 免费学习:猿来入此 1.1 …

2024-2025-1 20241320 《计算机基础与程序设计》第8周学习总结

2024-2025-1 20241320 《计算机基础与程序设计》第8周学习总结 作业信息 |这个作业属于哪个课程| https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP |这个作业要求在哪里| https://www.cnblogs.com/rocedu/p/9577842.html#WEEK08 |这个作业的目标| 功能设计与面向对象设…

项目冲刺11.15

这个作业属于哪个课程 计科22级34班这个作业要求在哪里 作业要求这个作业的目标 进行为期七天的项目冲刺并记录前言 本篇博客是项目冲刺的第七篇,七篇博客的汇总如下:博客汇总第一篇博客第二篇博客第三篇博客第四篇博客第五篇博客第六篇博客第七篇博客团队简介队名 拖延是你不…

Latex 安装

使用的开发环境是 VSCode. Latex 在编译时需要用到宏包. 宏包到底是啥? 有啥作用? 从何处下载? Latex 软件的安装:texlive: 一次性下载所有的宏包. 磁盘需求较大, 约 7 ~ 8 G.miktex: 仅下载必要的宏包, 编译时补充下载宏包. 磁盘需求较小, 约几百 M.清华大学开源软件镜像站…

20222424 2024-2025-1 《网络与系统攻防技术》实验五实验报告

20222424 2024-2025-1 《网络与系统攻防技术》实验五实验报告 1.实验内容 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息:DNS注册人及联系方式 该域名对应IP地址 IP地址注册人及联系方式 IP地址所在国家、城市和具体地理位置 PS:…

Windows程序设计指南

Windows程序设计指南“到Petzold的书中找找”——仍然是解决Windows程式开发各种疑难杂症时的灵丹妙药。在第五版的《Windows程式开发设计指南》中,作者身为倍受敬重的WindowsPioneerAward(Windows开路先锋奖)得主,依据最新版本Windows作业系统,以可靠的取材资料校定这一本…

Windows高级调试

Windows高级调试中文版文档摘要: 本书《Windows高级调试》主要讲解Windows高级调试技术和工具,包括调试器简介、调试器揭密、符号文件与源文件的管理、栈内存破坏、堆内存破坏、安全、进程间通信、资源泄漏、同步、编写定制的调试扩展、64位调试、事后调试、Windows Vista基础…

iman——冲刺日志(第四天)

又一阉割版 团队成员分工与进度 📝👥组别 成员 完成的任务 完成任务所用时间 (小时) 剩余时间 (小时)前端 阿依娜孜 完成了行程概览地图中标记连线与探索功能的删除与添加。 3 2前端 郭剑敏 实现了地图标点的驾车路线绘制功能。 3 1前端 王梓铭 优化了主页与导航栏布局,提…