尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

实用指南:基于k8s环境的mongodb多副本高可用方案

实用指南:基于k8s环境的mongodb多副本高可用方案
📅 发布时间:2026/6/20 15:37:46

文章目录

  • 基于现有版本出具高可用多副本改造方案
    • 1.1.单副本与多副本比较
    • 1.2.多副本升级方案
      • 1.2.1.升级方案参考
      • 1.2.2.多副本部署过程示例
      • 1.2.3.验证mongodb数据高可用

基于现有版本出具高可用多副本改造方案

1.1.单副本与多副本比较

现有xx平台的数据库mongodb部署架构为单节点单副本方式,要升级为多副本模式,利用数据冗余与安全。
在这里插入图片描述

1.2.多副本升级方案

1.2.1.升级方案参考

以下是单副本升级为多副本方案,可作为参考
在这里插入图片描述

1.2.2.多副本部署过程示例

以下为多副本部署的试例,可作参考

1.2.2.1.使用sts,先成功部署mongodb
利用现有yaml文件,可成功部署mongo-0,mongo-1,仲裁节点mongo-arbiter,如下示例
在这里插入图片描述
1.2.2.2.初始化mongodb数据库
通过kubectl -n mongodb exec -it mongo-0 /bin/bah登录进入容器中,直接执行mongo进入到mongodb数据库中
使用

Use adminrs.initiate(
{   _id: "rs0",
members: [
{       _id: 0,       host: "mongo-0.mongo-headless.mongodb.svc.cluster.local:27017",       priority: 50     },
{       _id: 1,       host: "mongo-1.mongo-headless.mongodb.svc.cluster.local:27017",       priority: 40     },
{       _id: 2,       host: "mongo-arbiter-0.mongo-headless.mo-*ngodb.svc.cluster.local:27017",       arbiterOnly: true     }   ] })

执行结果如下:
在这里插入图片描述
对以上初始化命令作一解释:

rs.initiate() 是 MongoDB 中用于首次初始化一个副本集(Replica Set)的命令。执行该命令后,MongoDB 实例将从独立模式(Standalone)切换为副本集模式,并根据配置启动选举流程,选出主节点(Primary),建立主从复制关系
_id: “rs0”
指定副本集的逻辑名称为 rs0。
所有成员必须使用相同的副本集名称才能加入该集群。
该名称在整个 MongoDB 部署中应保持唯一。

成员 1:mongo-0(主节点候选)

{_id: 0,host: "mongo-0.mongo-headless.mongodb.svc.cluster.local:27017",priority: 50
}

_id: 0:该成员在副本集中的唯一编号。
host:该成员的主机地址,使用 Kubernetes Headless Service 提供的 DNS 名称,确保 Pod 重启后地址不变。
priority: 50:优先级为 50(默认为 1),数值越高越容易被选举为主节点。mongo-0 在正常情况下将作为主节点运行。

成员 2:mongo-1(从节点)

{_id: 1,host: "mongo-1.mongo-headless.mongodb.svc.cluster.local:27017",priority: 40
}

_id: 1:该成员的唯一编号。
host:指向 mongo-1 Pod 的 DNS 地址。
priority: 40:优先级低于 mongo-0,正常情况下作为从节点(Secondary)运行,用于数据同步和读负载分担。

成员 3:mongo-arbiter-0(仲裁节点)

{_id: 2,host: "mongo-arbiter-0.mongo-headless.mongodb.svc.cluster.local:27017",arbiterOnly: true
}

arbiterOnly: true:表示这是一个纯仲裁节点(Arbiter)。
仲裁节点不存储数据,仅参与选举投票。作用是在两个数据节点之间提供“决胜一票”,确保在主节点故障时能选出新的主节点,避免脑裂(Split-Brain)问题。
资源占用小,适合用于优化部署成本。

通过rs.status()查看:
主从节点,从节点,仲裁节点三个
在这里插入图片描述
通过rs.conf()再查看副本集,如下图:
在这里插入图片描述

1.2.3.验证mongodb数据高可用

1.2.3.1.插入数据测试主从高可用

在主节点上,插入数据1000条,用于验证,返回1000

// 插入 1000 条测试数据
for (let i = 1; i <= 1000; i++) {db.test.insertOne({_id: i,name: "user" + i,ts: new Date()});
}
// 查询总记录数
db.test.count();

在这里插入图片描述

再到从上查询,可以查询到1000,表示主从同步正常。

在这里插入图片描述

1.2.3.2.mongo-0优先级高时切换情况

1.2.3.2.1.停主节点mongo-0是否切换

停主节点mongo-0,验证mongo-1 从是否切换为主,
在这里插入图片描述

通过停进程,可以快速查询到mongo-1切换为主, mongo-0为从

在这里插入图片描述

当仲裁节点检测到原主节点mongo-0恢复并重新接入集群后,会触发新一轮选举;由于初始化时已配置mongo-0的优先级高于mongo-1,因此在选举中mongo-0获胜并自动重新成为主节点,实现主从角色的自动回归。

容器化部署好处,当delete mongo-0容器时,k8也会自动拉取起的mongo-0,
在这里插入图片描述

整个来回切换时间为10-20秒时间完成。不需要人为干预。

此时查看主从的数据
在这里插入图片描述

在这里插入图片描述

1000个数据存在,正常读取。

1.2.3.3.mongo-0、1优先级相同时切换情况
1.2.3.3.1.停主节点mongo-0是否切换
当delete掉mongo-0 后,快速查看副本情况,mongo-0是异常的。
在这里插入图片描述

此时mongo-1变为主节点,
在这里插入图片描述

待10-20秒后,再次查看mongo-0,已经变为从节点,如下图:
在这里插入图片描述

当主节点与从节点的优先级相同时,若主节点发生异常,副本集可自动将从节点选举为新的主节点,实现故障切换,保障系统高可用性。

查看数据是否正常:
Mongo-1主上:
在这里插入图片描述

Mongo-0从上:
在这里插入图片描述

总结:通过仲裁的选举,mongdb能满足高可用需求,由于是k8s部署,我们还是以设置优先级指定mongo-0作为主,这样恢复后,不会造成数据因延迟切换到mongo-1进行写数据,造成数据不一致问题。

相关新闻

  • 2025年北京离婚律师事务所权威推荐榜单:离婚律所/婚姻律所/离婚房产律所精选
  • 如何从电脑上卸载安卓应用程序 - 教程
  • 2025年靠谱的高温专用密集型母线槽厂家最新用户好评榜

最新新闻

  • 道路运输许可证丢了登报怎么线上办理?正规办理渠道与流程 - 速递信息
  • Claude Opus 4.7深度解析:长上下文、自主检查与多模态语义编织
  • 嵌入式GUI开发实战:Alpha混合与位图绘制优化指南
  • 2026 年 6 月亨得利最新官方正式深度辟谣|拆解虚假资讯牟利底层逻辑,亨得利全直营门店资质全景深度解析 - 亨得利官方维修中心
  • 费亨得利官方公正辟谣|2026年6月最新声明:亨得利全国正规服务渠道权威公示 - 亨得利官方维修中心
  • iOS自动化测试演进:从WDA底层原理到Appium实战框架选型

日新闻

  • 信任的进化:技术实现详解——如何用JavaScript构建博弈论模拟器
  • Terrakube自定义工作流:如何集成OPA、Infracost等工具扩展IaC能力
  • grunt-concurrent快速入门:5分钟学会并行运行Grunt任务

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号