首页/新闻资讯/正文详情

MongoDB 高可用集群部署

发布时间:2026/9/27 8:51:48 来源:云帆数科 栏目:资讯中心
MongoDB 高可用集群部署
MongoDB 高可用集群部署一、方案概述1.1 目标在 K8s 高可用集群上部署一套 MongoDB 高可用集群具备高可用3 数据节点副本集容忍 1 个节点故障自动故障转移主节点故障时从节点自动提升为主仲裁节点避免偶数节点脑裂持久化每个节点独立 PVC数据落盘外部访问Ingress HTTPS可选1.2 技术选型组件用途Bitnami MongoDB Helm Chart部署 MongoDB 副本集StatefulSet管理 MongoDB PodPersistentVolumeClaim每个节点的持久化存储Longhorn分布式存储MongoDB Replica Set副本集高可用1.3 架构应用 ↓ Service: mongodb.mongodb.svc.cluster.local:27017 ↓ MongoDB Replica Set (3 数据节点 1 仲裁) ├── mongodb-0 (PRIMARY) ├── mongodb-1 (SECONDARY) ├── mongodb-2 (SECONDARY) └── mongodb-arbiter-0 (ARBITER) ↓ PersistentVolume (longhorn)二、前置条件2.1 集群状态K8s 集群kubectl get nodes全部ReadyLonghorn 已部署longhornStorageClass 就绪节点数量≥ 3保证副本集能选举2.2 存储要求MongoDB 需要 PVC 持久化数据。必须提前配好 StorageClass。kubectl get storageclass这命令看 StorageClass 列表预期看到longhorn。2.3 Longhorn 存储设置这是关键步骤不改的话Longhorn 会因为“空间不足”拒绝调度副本。kubectl patch settings.longhorn.io storage-over-provisioning-percentage -n longhorn-system --typemerge -p {value:200}这条命令允许 Longhorn 超配到磁盘总容量的 200%。kubectl patch settings.longhorn.io storage-minimal-available-percentage -n longhorn-system --typemerge -p {value:10}这条命令把最小可用空间从 25% 降到 10%。2.4 镜像网络要求MongoDB 的镜像在registry-1.docker.io/bitnami/mongodb上。Bitnami 从 2025 年 8 月 28 日起移除了 Docker Hub 公共目录的免费镜像直接拉会返回 403。解决方案用bitnami/mongodb:latest标签DaoCloud 代理可用。ansible k8s_cluster -i inventory.ini -m shell -a crictl pull docker.m.daocloud.io/bitnami/mongodb:latest -b这条命令在所有节点上从 DaoCloud 代理拉bitnami/mongodb:latest。ansible k8s_cluster -i inventory.ini -m shell -a ctr -n k8s.io images tag docker.m.daocloud.io/bitnami/mongodb:latest registry-1.docker.io/bitnami/mongodb:latest -b这条命令给镜像打标签让 containerd 认为本地有registry-1.docker.io/bitnami/mongodb:latest。三、下载 MongoDB Chart3.1 从 DaoCloud 拉取不能用helm repo add bitnami因为 Bitnami 的 chart 走 Docker Hub OCI国内不通。helm pull oci://docker.m.daocloud.io/bitnamicharts/mongodb --version 19.3.0这条命令从 DaoCloud 代理拉 MongoDB chart。预期输出Pulled: docker.m.daocloud.io/bitnamicharts/mongodb:19.3.0 Digest: sha256:fe65e88b838f225d13a1df988e323d47715c7c85f14863f5b05837c12ceed000下载后本地会有mongodb-19.3.0.tgz四、部署 MongoDB4.1 生成密码和密钥openssl rand -base64 24这条命令生成一个随机密码执行两次分别得到 root 密码和副本集密钥。把两次输出保存下来。4.2 安装 MongoDBhelm install mongodb ./mongodb-19.3.0.tgz \ --namespace mongodb \ --create-namespace \ --set architecturereplicaset \ --set replicaCount3 \ --set auth.rootPasswordroot密码 \ --set auth.replicaSetKey副本集密钥 \ --set persistence.storageClasslonghorn \ --set persistence.size10Gi这条命令用本地 chart 安装 MongoDB 副本集。逐项解析参数含义mongodbrelease 名./mongodb-19.3.0.tgz本地 chart 包--namespace mongodb装到 mongodb 命名空间--create-namespace自动创建命名空间architecturereplicaset副本集模式replicaCount33 个数据节点auth.rootPasswordroot 密码auth.replicaSetKey副本集内部认证密钥persistence.storageClasslonghorn用 Longhorn 存储persistence.size10Gi每个节点 10Gi4.3 观察 Pod 启动kubectl get pods -n mongodb -w这条命令观察 Pod 启动按CtrlC退出。预期mongodb-0 1/1 Running mongodb-1 1/1 Running mongodb-2 1/1 Running mongodb-arbiter-0 1/1 Running注意chart 会自动加一个arbiter节点用于投票不存数据。五、验证 MongoDB5.1 查看 Pod 和 PVCkubectl get pods -n mongodb kubectl get pvc -n mongodb这两条命令看 Pod 和 PVC 状态。预期4 个 Pod 全部Running。PVC 全部BoundSTORAGECLASS是longhorn。5.2 查看副本集状态kubectl exec -it -n mongodb mongodb-0 -- mongosh -u root -p root密码 --authenticationDatabase admin --eval rs.status()这条命令查看副本集状态。预期1 个PRIMARY2 个SECONDARY1 个ARBITER所有成员health: 15.3 测试读写kubectl exec -it -n mongodb mongodb-0 -- mongosh -u root -p root密码 --authenticationDatabase admin --eval db.test.insertOne({name: hello})这条命令插入一条测试数据。kubectl exec -it -n mongodb mongodb-0 -- mongosh -u root -p root密码 --authenticationDatabase admin --eval db.test.find()这条命令查询数据预期返回刚才插入的记录。六、应用接入6.1 连接信息在集群内部用途地址MongoDBmongodb.mongodb.svc.cluster.local:27017简写同命名空间mongodb:27017跨命名空间mongodb.mongodb.svc.cluster.local:27017用户名root密码从 Secret 取。6.2 取密码kubectl get secret -n mongodb mongodb -o jsonpath{.data.mongodb-root-password} | base64 -d echo这条命令从 Secret 取 root 密码。6.3 应用配置示例Python (pymongo)from pymongo import MongoClient client MongoClient( mongodb://root:密码mongodb.mongodb.svc.cluster.local:27017/?replicaSetrs0authSourceadmin )Node.js (mongodb)const { MongoClient } require(mongodb); const client new MongoClient( mongodb://root:密码mongodb.mongodb.svc.cluster.local:27017/?replicaSetrs0authSourceadmin );Java (mongodb-driver)MongoClient client MongoClients.create( mongodb://root:密码mongodb.mongodb.svc.cluster.local:27017/?replicaSetrs0authSourceadmin );Go (mongo-go-driver)client, err : mongo.Connect(context.TODO(), options.Client().ApplyURI( mongodb://root:密码mongodb.mongodb.svc.cluster.local:27017/?replicaSetrs0authSourceadmin, ))6.4 部署后端服务到 K8sapiVersion: apps/v1 kind: Deployment metadata: name: my-backend namespace: default spec: replicas: 2 selector: matchLabels: app: my-backend template: metadata: labels: app: my-backend spec: containers: - name: my-backend image: my-backend:latest ports: - containerPort: 8080 env: - name: MONGODB_HOST value: mongodb.mongodb.svc.cluster.local - name: MONGODB_PORT value: 27017 - name: MONGODB_USER value: root - name: MONGODB_PASSWORD valueFrom: secretKeyRef: name: mongodb key: mongodb-root-password七、常见问题7.1 Pod 卡在ImagePullBackOff原因MongoDB 镜像在registry-1.docker.io上国内拉取超时。解决ansible k8s_cluster -i inventory.ini -m shell -a crictl pull docker.m.daocloud.io/bitnami/mongodb:latest -b ansible k8s_cluster -i inventory.ini -m shell -a ctr -n k8s.io images tag docker.m.daocloud.io/bitnami/mongodb:latest registry-1.docker.io/bitnami/mongodb:latest -b kubectl delete pod -n mongodb --all7.2 Bitnami 镜像 403原因Bitnami 从 2025 年 8 月 28 日起移除了 Docker Hub 公共目录的免费镜像。解决用bitnami/mongodb:latest标签DaoCloud 代理可用。7.3 PVC 绑不上原因Longhorn 卷调度失败。排查kubectl get volumes.longhorn.io -n longhorn-system kubectl get volume.longhorn.io volume-name -n longhorn-system -o yaml | grep -A5 type: Scheduled如果报insufficient storagekubectl patch settings.longhorn.io storage-over-provisioning-percentage -n longhorn-system --typemerge -p {value:200} kubectl patch settings.longhorn.io storage-minimal-available-percentage -n longhorn-system --typemerge -p {value:10}7.4 副本集PRIMARY选举失败原因节点不够或网络不通。排查kubectl logs -n mongodb mongodb-0 --tail50关注election failednot enough healthy nodes7.5 写操作失败原因没有PRIMARY或多数派不可用。排查kubectl exec -it -n mongodb mongodb-0 -- mongosh -u root -p 密码 --authenticationDatabase admin --eval rs.status()如果所有节点都是SECONDARY说明选举失败。八、常用操作8.1 查看 MongoDB 状态kubectl get pods -n mongodb kubectl get pvc -n mongodb kubectl get svc -n mongodb8.2 查看日志kubectl logs -n mongodb mongodb-0 --tail1008.3 连接 MongoDBkubectl exec -it -n mongodb mongodb-0 -- mongosh -u root -p 密码 --authenticationDatabase admin8.4 扩容helm upgrade mongodb ./mongodb-19.3.0.tgz \ --namespace mongodb \ --set replicaCount5这条命令把副本集从 3 节点扩到 5 节点。8.5 删除 MongoDBhelm uninstall mongodb -n mongodb kubectl delete pvc -n mongodb --all kubectl delete namespace mongodb警告删除 PVC 会删除所有数据操作前先备份。九、架构总结9.1 组件清单组件数量作用mongodb3数据节点1 主 2 从mongodb-arbiter1仲裁节点不存数据只投票StatefulSet1管理 MongoDB PodPVC3每个数据节点一块存储Service2集群内部通信和客户端入口Secret1root 密码9.2 端口速查端口用途27017MongoDB 客户端连接27018MongoDB 内部通信9.3 高可用机制故障场景影响恢复方式从节点故障无影响主节点继续服务从节点重建后重新同步主节点故障短暂不可写从节点自动选举为新主10-30 秒恢复仲裁节点故障无影响只影响选举不影响读写多个节点故障可能不可写如果超过半数节点故障副本集停止服务9.4 已知隐患隐患影响解决方案Longhorn 空间调度保守卷报insufficient storage改 over-provisioning 和 minimal-availableBitnami 免费镜像移除无法拉取最新镜像用bitnami/mongodb:latestregistry-1.docker.io 超时镜像拉不下来用 DaoCloud 代理拉并打标签未配备份数据无法恢复用 mongodump 定期备份十、总结这套 MongoDB 基于 Bitnami Helm Chart 部署提供了高可用3 数据节点副本集 1 仲裁节点容忍 1 个节点故障自动故障转移主节点故障时从节点自动提升持久化每个数据节点独立 PVC声明式管理Helm chart 一条命令部署部署中最容易踩的坑Bitnami 免费镜像移除必须用bitnami/mongodb:latest标签。registry-1.docker.io 超时必须配 DaoCloud 代理拉镜像并打标签。Longhorn 空间调度保守改storage-over-provisioning-percentage200和storage-minimal-available-percentage10。chart 拉取超时用 DaoCloud 的 OCI 代理。解决了这四个问题MongoDB 就能稳定运行。

相关推荐

2027 AI校园碳迹伙伴:构建数字化校园碳普惠生态的完整产品方案
2027 AI校园碳迹伙伴:构建数字化校园碳普惠生态的完整产品方案

引言 在“双碳”目标与绿色校园建设的双重驱动下,如何将抽象的“减碳”理念转化为师生可感知、可参与、可激励的具体行动,成为高校数字化建设的重要课题。本文将为你完整拆解一款名为 “AI校园碳迹伙伴” 的数字化校园碳普惠平台产品方案。 该平台旨在通… · 2026/9/27 8:51:35

数据科学家在机器学习中的工作时间统计
数据科学家在机器学习中的工作时间统计

以下统计数据大致描述了数据科学家在一个机器学习项目中,不同工作环节所占的时间比例:工作内容时间占比清理和组织数据60%收集、整理或构建数据集19%在数据中发掘模式9%其他工作5%优化模型4%重塑训练数据集3%合计100%这组数据反映出一个重要事实&#xf… · 2026/9/27 8:51:35

国产化防爆无线AP T280-6Y 部署实践:组网架构、射频指标与调优建议
国产化防爆无线AP T280-6Y 部署实践:组网架构、射频指标与调优建议

在防爆认证(Ex db IIC T6 Gb / Ex tb IIIC T80℃ Db)与信创芯片(TR6560 TR5220)之外,国产化防爆无线AP T280-6Y 作为一款可进 1/2 区、20/21 区危险场所的 Wi-Fi6 设备,工程侧更关心组网架构、射频指标与部… · 2026/9/27 8:51:17

奉化首页的关键词优化速查手册
奉化首页的关键词优化速查手册

奉化首页关键词优化怎么选才不踩坑 做奉化本地网站的老板们,是不是经常盯着后台数据发愁?明明花钱做了个站,访客进来转一圈就走了,连个询盘电话都没有。很多人第一反应是:我的网站是不是太丑了?或者说,模板网站太丑不够用,是不是换个高颜值的模板就能… · 2026/9/27 9:29:57

织梦5.5模版安装上去为什么打开网站图片不能显示教程怎么选
织梦5.5模版安装上去为什么打开网站图片不能显示教程怎么选

织梦5.5图片不显?对比评测3种修复方案,避开域名服务器坑 域名服务器配置搞不懂,织梦5.5模板装完图片全裂开,这简直是新手建站最崩溃的瞬间。别急着骂服务器,十有八九是路径没对上或者权限没给够。我做了组对比评测,把三种主流修复方案扒了个底朝… · 2026/9/27 9:29:57

After Effects (AE)2026超详细保姆级安装教程
After Effects (AE)2026超详细保姆级安装教程

一、为什么一定要升级AE2026? 1. 3D功能大爆发,不用再依赖C4D了 以前做个简单的3D立方体,还要先开C4D建模再导进AE里,来回切换软件简直是噩梦。这次2026版本直接把3D功能拉满了,内置了立方体、球体这些基础的参数化模… · 2026/9/27 9:29:51

Python 比较运算符与逻辑运算符的返回值
Python 比较运算符与逻辑运算符的返回值

1. 比较运算符 常见的比较运算符&#xff1a; > < > < !在 Python 的常见基础用法中&#xff0c;比较运算符返回的是 bool 类型&#xff1a; 3 > 2 # True 5 4 # False 10 ! 8 # True比较运算符 → 返回 bool2. 逻辑运算符 Python 中… · 2026/9/27 9:29:45

WRITE_EXTERNAL_STORAGE no longer provides write access when targeting Android 10
WRITE_EXTERNAL_STORAGE no longer provides write access when targeting Android 10

targetSdkVersion 29 后&#xff0c;突然发现无法写文件了。targetSdkVersion 29&#xff0c;可以在 manifest 里加 android:requestLegacyExternalStorage"true"API30 以上只能使用应用私有文件‌&#xff1a;context.getExternalFilesDir()。 · 2026/9/27 9:29:45

变电站巡检机器人通信协议怎么对接?三种主流方案
变电站巡检机器人通信协议怎么对接?三种主流方案

一、为什么巡检机器人必须先谈协议 巡检机器人落地失败的常见原因&#xff0c;不是机器人走不动&#xff0c;而是数据进不了站端系统。机器人一天采回几千条红外测温、可见光图像和表计读数&#xff0c;如果这些数据只能躺在机器人自己的后台里&#xff0c;运维人员看不到、辅… · 2026/9/27 9:29:39

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介&#xff1a;这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程&#xff0c;从线性调频&#xff08;LFM&#xff09;信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑&#xff0c;面向电子信息工程、计算机、数学等专业学生&#xff0c;适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介&#xff1a;基于PyTorch的多模态虚假新闻检测项目完整代码包&#xff0c;面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者&#xff0c;解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征&#xff0c;以Res… · 2026/9/27 0:00:01

MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现

简介&#xff1a;这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程&#xff0c;从线性调频&#xff08;LFM&#xff09;信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑&#xff0c;面向电子信息工程、计算机、数学等专业学生&#xff0c;适用于课程设计、期末大作… · 2026/9/27 0:00:01

汕头网站建设制作厂家避坑指南:5大注意事项救急
汕头网站建设制作厂家避坑指南:5大注意事项救急

汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01

多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习

简介&#xff1a;基于PyTorch的多模态虚假新闻检测项目完整代码包&#xff0c;面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者&#xff0c;解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征&#xff0c;以Res… · 2026/9/27 0:00:01

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码