当前位置: 首页 > news >正文

基于k8s环境的mongodb多副本高可用方案

文章目录

  • 基于现有版本出具高可用多副本改造方案
    • 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进行写数据,造成数据不一致问题。

http://www.dtcms.com/a/490148.html

相关文章:

  • 汽车免拆诊断案例 | 2014 款宝马 M4 车冷起动后发动机抖动
  • 横泉水库建设管理局网站鄂州网站建设哪家专业
  • 虚拟人驱动密码:惯性动作捕捉设备+无穿戴动作捕捉技术
  • Linux01
  • StarRocks 数据分析加速:ETL 如何实现实时同步与高效查询
  • 2025年主流开源AI智能体框架平台概览
  • 自己做卖假货网站手机网站
  • 多字节串口收发IP设计(六)串口帧接收模块设计及仿真(含源码)
  • Android 对话框 - 对话框全屏显示(设置 Window 属性、使用自定义样式、继承 DialogFragment 实现、继承 Dialog 实现)
  • 项目实践1—全球证件智能识别系统(Qt客户端开发+FastAPI后端人工智能服务开发)
  • 源同步接口(六)
  • app 门户网站我在征婚网站认识一个做IT
  • 【FFmpeg】对比 d3d12va 、d3d11va、dxva2 这三种视频硬解方案
  • 苹果iOS开发零基础特训(视频教程)
  • 数字图像相关(DIC)技术在岩石剪切变形测量中的应用研究:全场应变与破坏机制分析
  • 建站工具 开源捷克网站后缀
  • @Resource和@Autowired注入区别
  • 网站设置cookie什么意思以个人名义做地方门户网站
  • 客户案例 | 派克新材x甄知科技,构建全场景智能IT运维体系
  • python基本数据类型、字典、 集合、条件与循环控制、函数(3)
  • 语音处理:wav头格式非44字节场景处理分析
  • git 安全证书 【git】
  • leetcode 168. Excel 表列名称 python
  • LabVIEW 高速采集系统性能优化
  • 忻州建设公司网站临汾做网站的公司
  • 书籍学习|基于SprinBoot+vue的书籍学习平台(源码+数据库+文档)
  • PNNX + TorchScript + 手动修改后处理逻辑,最终输出适配 NCNN官方 yolov8.cpp
  • 记录小程序真机bug,而模拟器无法复现
  • 【iOS取证篇】浅谈iPhone手机的失窃设备保护功能
  • Qoder 全栈Ai工具