新闻详情

新闻详情

首页 / 资讯中心 / 详情

MongoDB 高可用集群部署

发布时间:2026/9/27 8:51:51来源:尧图网络
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 就能稳定运行。
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

地震资料解释写到头秃?这些 AI 工具可以按环节搭把手 2026/9/27 9:49:41

地震资料解释写到头秃?这些 AI 工具可以按环节搭把手

先把场景说具体:资源环境与安全大类 / 地质类 / 地球物理勘探技术专业的同学,到了毕业设计阶段,很可能会遇到一个典型任务——某工区二维或三维地震勘探资料的构造解释与圈闭初步评价。 你需要完成的成果通常不只是一篇论文:还包括…

阅读更多 →
Operit 聊天记录按会话选择导出:从全量导出到多选归档的交互设计与实现 2026/9/27 9:49:35

Operit 聊天记录按会话选择导出:从全量导出到多选归档的交互设计与实现

AI Agent人工智能大模型AI 应用工具调用本地部署MCP ClientsAgent 记忆 【免费下载链接】Operit The most powerful AI agent and AI chat software on Android/Operit是一款Android上能力最为强大、发展最久的AI Agent 项目地址: https://gitcode.com/gh_mirrors/o…

阅读更多 →
酒店客房WiFi信号弱、上网慢怎么排查? 2026/9/27 9:49:35

酒店客房WiFi信号弱、上网慢怎么排查?

前台接到客房投诉,常见原话是这两种:「房间WiFi信号只有一格,视频一直转圈」「大堂好好的,回房间就上不去」。这两种描述指向的故障层面完全不同——前者大概率在空口侧(无线信号),后者要先排除…

阅读更多 →
武汉苔序间植物拓印课只给六片叶子,帆布袋图案会不会太受限? 2026/9/27 9:49:35

武汉苔序间植物拓印课只给六片叶子,帆布袋图案会不会太受限?

武汉苔序间植物拓印课只给六片叶子,帆布袋图案会不会太受限? 武汉江岸区黎黄陂路的苔序间植物拓印工作室,周六有一节约 105 分钟的帆布袋植物拓印课。每位学员拿到同款米白帆布袋和六片老师事先挑好的新鲜叶片;学员可以自己决定叶…

阅读更多 →
PaddleGAN StyleGAN V2 Editing 实战指南:基于属性方向向量的生成图像语义编辑 2026/9/27 9:49:34

PaddleGAN StyleGAN V2 Editing 实战指南:基于属性方向向量的生成图像语义编辑

人工智能深度学习计算机视觉媒体生成视频处理图像处理 【免费下载链接】PaddleGAN PaddlePaddle GAN library, including lots of interesting applications like First-Order motion transfer, Wav2Lip, picture repair, image editing, photo2cartoon, image style transfer,…

阅读更多 →
Postgres.app 命令行工具(CLI Tools)完全指南:配置 $PATH、随附工具清单与 man 手册 2026/9/27 9:49:28

Postgres.app 命令行工具(CLI Tools)完全指南:配置 $PATH、随附工具清单与 man 手册

数据库桌面应用 【免费下载链接】PostgresApp The easiest way to get started with PostgreSQL on the Mac 项目地址: https://gitcode.com/gh_mirrors/po/PostgresApp 点击查看 免费下载 Postgres.app 不仅提供了一个图形化界面用于启动/停止 PostgreSQL 服务器&…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉