MongoDB 7 分片副本集升级方案详解(下)

#作者:任少近

文章目录

  • 1.4 分片升级
  • 1.5 升级shard1
    • 1.6 升级shard2,shard3
    • 1.7 升级mongos
    • 1.8重新启用负载均衡器
    • 1.9 推荐MongoDB Compass来验证数据
  • 2 注意事项:

1.4 分片升级

使用“滚动”升级从 MongoDB 7.0 升级到 8.0,即在其他成员可用时单独升级各个成员,目的最大限度地减少停机时间。

  1. 确认从节点: shard1,shard2,shard3
  2. 升级从节点,一次必须一个。
  3. 升级前两个库的情况,记录一下,后期对比情况。

1.5 升级shard1

1.5.1.1第一步:关闭并升级从分片
要关闭 mongod 进程,请使用 mongosh 连接到分片节点,并运行以下命令:
根据以上信息,确认分片从节点为server2.

[root@k8s-node6 bin]#mongosh mongodb://server2:27001

在这里插入图片描述

shard1 [direct: primary] test> use admin
switched to db admin
shard1 [direct: primary] admin> rs.status();

在这里插入图片描述
查询到server2有shard1为从节点,登录到server2上,关闭分片

shard1 [direct: secondary] admin> db.adminCommand( { shutdown: 1 } )
MongoNetworkError: connection 3 to 127.0.0.1:27001 closed
admin>

查到以下已经停止,进程也关闭。
在这里插入图片描述
将 7.0 二进制文件替换为 8.0 二进制文件。bin_7.0.14下为老版本的mongod
在这里插入图片描述
启动server2上的shard1

[root@k8s-node6 conf]# mongod --config /usr/local/mongodb/shard1/conf/shard1.conf

查看状态:已恢复,stateStr: ‘SECONDARY’

在这里插入图片描述
查看进程,已正常。
在这里插入图片描述
查看版本,已确认到升级成功
在这里插入图片描述
在这里插入图片描述
1.5.1.2 第二步:关闭并升级ARBITER
要关闭 mongod 进程,请使用 mongosh 连接到分片节点,并运行以下命令:
根据以上信息,确认分片ARBITER为server3,进行升级。

在这里插入图片描述
要关闭 mongod 进程,请使用 mongosh 连接到集群节点,并运行以下命令

[root@k8s-node7 bin]#  mongosh mongodb://localhost:27001

在这里插入图片描述

shard1 [direct: arbiter] admin> db.adminCommand( { shutdown: 1 } )
MongoNetworkError: connection 2 to 127.0.0.1:27001 closed

在这里插入图片描述
启动server3上的shard1

mongod --config /usr/local/mongodb/shard1/conf/shard1.conf
查看状态:已恢复,stateStr: ‘ARBITER’

在这里插入图片描述
查看进程
在这里插入图片描述
查看版本
在这里插入图片描述
查看本地的版本
在这里插入图片描述

1.5.1.3第三步:升级主分片节点

  1. 降级主分片节点,变为从分片节点
  2. 关闭此从分片节点。
  3. 并将mongod二进制文件替换为8.0二进制文件。
  4. 请使用 mongosh 连接到主节点,并运行以下命令:
  5. 启此从分片节点

1.5.1.3.1降级主分片节点。
登录到主分片节点上
在这里插入图片描述
如图:降级完成后,主分片节点已经成为从分片节点。
在这里插入图片描述
也可以查看到rs.status()
在这里插入图片描述
1.5.1.3.2 升级主分片
关闭已降级主分片节点,
db.adminCommand( { shutdown: 1 } )
在这里插入图片描述
查看已降级的主分片节点状态,已经为异常状态,此进程也已停止。
在这里插入图片描述
替换二进制文件:
将mongod二进制文件替换为8.0二进制文件。

在这里插入图片描述
mongod
启动分片进程

mongod --config /usr/local/mongodb/shard1/conf/shard1.conf
查看server1状态,已恢复,变成从,运行正常。

在这里插入图片描述
查看本地版本
在这里插入图片描述
第一个分片shard1升级完成。

1.6 升级shard2,shard3

按相同方式升级shard2,shard3,不再赘述。

1.7 升级mongos

一个一个要升级mongos,并kill,重启,官方不支持重启。

将 7.0 二进制文件替换为 8.0 二进制文件。重启mongos
在这里插入图片描述
在这里插入图片描述

1.8重新启用负载均衡器

使用 mongosh 连接到集群中的 mongos,然后运行 sh.startBalancer() 重新启用负载均衡器:

sh.startBalancer()

在这里插入图片描述
查看状态

[direct: mongos] admin> sh.getBalancerState()

在这里插入图片描述
至此,升级完成。

1.9 推荐MongoDB Compass来验证数据

升级后,查询数据情况
通过rs.status(),查看库的情况:
在这里插入图片描述
两者比较没有任何变化。
查看此前插入的1万条数据。

本次可通过MongoDB Compass的可直观查看结果。

Server1上为3273个
在这里插入图片描述
Server2为3388个
在这里插入图片描述
Server3上为3339个
在这里插入图片描述
升级后,数据还是10000条数据,数据不会有丢失。本次升级成功。

2 注意事项:

  1. 副本集和分片不应部署在同一主机上:将副本集(Replica Set)和分片(Shard)部署在同一台主机上是不利的,特别是在升级时。由于副本集和分片都使用相同的mongod程序,升级副本集需要替换mongod程序并重启,这会影响到正在运行的分片进程。尽管在本次测试中未观察到直接影响,但仍可能存在潜在的风险。虽然MongoDB官方文档中没有明确指出这一点,但从运维的角度来看,这种部署方式应尽量避免。

  2. featureCompatibilityVersion的作用:尽管MongoDB已升级至版本8,但如果featureCompatibilityVersion仍设置为7.0,数据库的行为将遵循MongoDB 7.0的规范。如果将featureCompatibilityVersion从7.0更新为8.0,将会启用MongoDB 8中的一些新特性,并引入新的数据库行为。如果在生产环境中发现不兼容的问题,可以通过回滚到旧版本来解决这些问题;而在开发和测试环境中,这种方式更便于验证和测试。

  3. 修改featureCompatibilityVersion的方式:可以通过以下命令在MongoDB中设置:
    db.runCommand({ setFeatureCompatibilityVersion: “8” })

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

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

相关文章

【redis】数据类型之bitmaps

Redis的Bitmaps是一种基于字符串的数据结构,用于处理位级别的操作。虽然Bitmaps在Redis中并不是一种独立的数据类型,而是基于字符串实现的,但它们提供了高效的位操作功能,适用于需要处理大量布尔值或二进制数据的场景。 基本概念…

mysql8.0使用MGR实现高可用与利用MySQL Router构建读写分离MGR集群

MGR是MySQL Group Replication的缩写,即MySQL组复制。 在以往,我们一般是利用MySQL的主从复制或半同步复制来提供高可用解决方案,但这存在以下几个比较严重的问题: 主从复制间容易发生复制延迟,尤其是在5.6以前的版本…

【IC】AI处理器核心--第二部分 用于处理 DNN 的硬件设计

第 II 部分 用于处理 DNN 的硬件设计 第 3 章 关键指标和设计目标 在过去的几年里,对 DNN 的高效处理进行了大量研究。因此,讨论在比较和评估不同设计和拟议技术的优缺点时应考虑的关键指标非常重要,这些指标应纳入设计考虑中。虽然效率通常…

Flutter Gradle 命令式插件正式移除,你迁移旧版 Gradle 配置了吗?

在 Flutter 3.29 版本里官方正式移除了 Flutter Gradle Apply 插件,其实该插件自 3.19 起已被弃用,同时 Flutter 团队后续也打算把 Flutter Gradle 从 Groovy 转换为 Kotlin,并将其迁移到使用 AGP(Android Gradle Plugin&#xff…

C++类和对象进阶:运算符重载深度详解

C类和对象进阶:运算符重载 前言引入运算符重载定义语法注意事项重载为全局函数重载为成员函数运算符重载的本质 默认赋值运算符重载(默认成员函数)编译器自己生成的赋值运算符重载函数需要自己实现的场景总结默认赋值运算符重载 拷贝构造函数和赋值重载的区分验证 总…

three.js 使用geojson ,实现中国地图区域,边缘流动效果

three.js 使用geojson ,实现中国地图区域,边缘流动效果 在线链接:https://threehub.cn/#/codeMirror?navigationThreeJS&classifyexpand&idgeoBorder 国内站点预览:http://threehub.cn github地址: https://github.co…

PortSwigger——WebSockets vulnerabilities

文章目录 一、WebSockets二、Lab: Manipulating WebSocket messages to exploit vulnerabilities三、Lab: Manipulating the WebSocket handshake to exploit vulnerabilities四、Using cross-site WebSockets to exploit vulnerabilities4.1 跨站WebSocket劫持(cro…

【数据结构初阶第十节】队列(详解+附源码)

好久不见。。。别不开心了,听听喜欢的歌吧 必须有为成功付出代价的决心,然后想办法付出这个代价。云边有个稻草人-CSDN博客 目录 一、概念和结构 二、队列的实现 Queue.h Queue.c test.c Relaxing Time! ————————————《有没…

AVL树:高效平衡的二叉搜索树

🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 引言🤔 在数据结构的奇妙世界里,二叉搜索树(BST)原本是查找数据的好帮手。想象一下…

Qt Designer菜鸟使用教程(实现一个本地英文翻译软件)

1 安装Qt Designer 安装这个包的时候会自带安装 Qt Designer, 安装目录为python的安装根目录的 Lib/site-packages/qt5_applications/Qt/bin 目录下。 pip install pyqt5-tools2 新建窗体 2.1 新建主窗体 创建之后如下图: 设置主窗口大小: 设置窗…

机械学习基础-5.分类-数据建模与机械智能课程自留

data modeling and machine intelligence - CLASSIFICATION 为什么我们不将回归技术用于分类?贝叶斯分类器(The Bayes Classifier)逻辑回归(Logistic Regression)对逻辑回归的更多直观理解逻辑 /sigmoid 函数的导数我们…

C++ 网络编程

1. socket Socket 是一种用于网络通信的编程接口,它提供了一种类似于文件描述符的接口,允许不同计算机之间的进程进行通信。Socket 可以工作在多种协议上,最常用的是 TCP/IP 和 UDP/IP 协议 1.1 UDP 1.1.1 概念 UDP(用户数据报协…

C/C++内存管理

目录 前言 1、C/C内存划分 2、C语言中的动态内存管理方式 3、C内存管理方式 3.1操作内置类型 3.2操作自定义类型 3.3为什么对应的new和delete必须搭配使用(了解) 4、operator new与operator delete函数 5、new和delete的实现原理 5.1内置类型 5…

微软开源GraphRAG的使用教程-使用自定义数据测试GraphRAG

微软在今年4月份的时候提出了GraphRAG的概念,然后在上周开源了GraphRAG,Github链接见https://github.com/microsoft/graphrag,截止当前,已有6900Star。 安装教程 官方推荐使用Python3.10-3.12版本,我使用Python3.10版本安装时,在…

RK3568平台开发系列讲解(调试篇)网卡队列均衡负载

🚀返回专栏总目录 文章目录 一、RPS 的介绍1. RPS 的工作原理2. RPS 配置3. 启用和调优 RPS4. RPS 优势二、下行测试iperf测试沉淀、分享、成长,让自己和他人都能有所收获!😄 RPS(Receive Packet Steering) 是一种用于提高网络接收性能的技术,通常用于多核处理器系统中…

RagFlow + Docker Desktop + Ollama + DeepSeek-R1本地部署自己的本地AI大模型工具

前期准备 首先,我们需要下载 Ollama 以及配置相关环境。 Ollama 的 GitHub仓库 (https://github.com/ollama/ollama)中提供了详细的说明,简单总结如下: Step1:下载 Ollama 下载(https://ollama.com/dow…

变分边界详解

起因 当时看VAE论文时有这么一段,但是看完直接一头雾水,这都那跟哪,第一个公式咋做的变换就变出那么一堆。网上搜了很多博客都语焉不详,只好自己来写一篇,希望能解答后来人的疑惑。 公式1 参考文章:证据…

云消息队列 ApsaraMQ Serverless 演进:高弹性低成本、更稳定更安全、智能化免运维

如今,消息队列已成为分布式架构中不可或缺的关键服务,为电商、物联网、游戏和教育等行业,提供了异步解耦、集成、高性能和高可靠的核心价值。 过去一年,我们发布了云消息队列 ApsaraMQ 全系列产品 Serverless 化,面向…

【蓝桥杯嵌入式】8_IIC通信-eeprom读写

全部代码网盘自取 链接:https://pan.baidu.com/s/1PX2NCQxnADxYBQx5CsOgPA?pwd3ii2 提取码:3ii2 1、电路图 这个电路允许通过I2C总线与EEPROM(M24C02-WMN6TP)和数字电位器(MCP4017T-104ELT)进行通信。EEPROM用于存储数据,而数字电位器可以用…

DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件

1 DeepSeek处理自有业务的案例:让AI给你写一份小众编辑器(EverEdit)的语法着色文件 1.1 背景 AI能力再强,如果不能在企业的自有业务上产生助益,那基本也是一无是处。将企业的自有业务上传到线上训练,那是脑子进水的做法&#xff…