使用docker——10分钟内 完成一个高可用的 MongoDB 副本集部署
实验目的
-
掌握 Docker 容器化部署 MongoDB 副本集 的方法
-
理解 主从同步、故障转移、数据一致性 等核心机制
-
熟悉 MongoDB 集群管理命令 和 运维监控技巧
🔧 实验环境
-
操作系统: Rocky Linux 9 / CentOS 7+
-
软件依赖:
-
Docker 20.10+
-
docker-compose 1.29+
-
-
硬件要求:
-
最低配置: 2核CPU / 4GB内存 / 20GB磁盘
-
推荐配置: 4核CPU / 8GB内存 (用于模拟多节点)
-
1. 环境准备
# 创建目录结构
mkdir -p mongo-com/{data/primary,data/secondary,data/arbiter,keys}
cd mongo-com# 生成密钥文件(容器内外权限一致)
openssl rand -base64 756 > keys/mongodb-keyfile
chmod 400 keys/mongodb-keyfile
chown 999:999 keys/mongodb-keyfile # MongoDB容器默认用户
2. 编写 docker-compose.yaml
version: '3.8'services:mongo-primary:image: mongo:6.0container_name: mongo-primarycommand: mongod --auth --keyFile /keys/mongodb-keyfile --replSet rs2 --bind_ip_all --oplogSize 1024ports:- "27017:27017"volumes:- ./data/primary:/data/db- ./keys:/keysenvironment:MONGO_INITDB_ROOT_USERNAME: adminMONGO_INITDB_ROOT_PASSWORD: admin123user: "999:999"healthcheck:test: mongosh -u admin -p admin123 --eval "db.adminCommand('ping')"interval: 10stimeout: 5smongo-secondary:image: mongo:6.0container_name: mongo-secondarycommand: mongod --auth --keyFile /keys/mongodb-keyfile --replSet rs2 --bind_ip_allports:- "27018:27017"volumes:- ./data/secondary:/data/db- ./keys:/keysenvironment:MONGO_INITDB_ROOT_USERNAME: adminMONGO_INITDB_ROOT_PASSWORD: admin123user: "999:999"depends_on:mongo-primary:condition: service_healthymongo-arbiter:image: mongo:6.0container_name: mongo-arbitercommand: mongod --auth --keyFile /keys/mongodb-keyfile --replSet rs2 --bind_ip_allvolumes:- ./keys:/keys- ./data/arbiter:/data/dbuser: "999:999"depends_on:mongo-primary:condition: service_healthy
3. 启动容器集群
# 启动服务(自动等待主节点健康)
docker-compose up -d
若报错如下,可从以下问题排除
(1)查看错误详情(关键步骤)
docker logs mongo-primary # 查看具体错误原因
(2)常见原因及解决方案
🔴 问题1:密钥文件权限错误
# 在宿主机检查密钥文件权限
ls -l keys/mongodb-keyfile
# 必须显示: -r-------- 1 999 999
修复命令:
chmod 400 keys/mongodb-keyfile
chown 999:999 keys/mongodb-keyfile
🔴 问题2:数据目录权限问题
# 检查数据目录所有权
ls -ld data/primary/
# 应显示: drwxr-xr-x 2 999 999
修复命令:
sudo chown -R 999:999 data/
sudo chmod -R 700 data/
🔴 问题3:端口冲突
# 检查27017端口占用
sudo netstat -tulnp | grep 27017
解决方案:
-
停止占用进程:
sudo systemctl stop mongod
-
或修改
docker-compose.yaml
中的端口映射(如27027:27017
)
3. 强制清理并重启
# 彻底清理旧容器
docker-compose down -v
sudo rm -rf data/primary/*
# 重新启动
docker-compose up -d
# 检查状态(所有容器应为healthy) watch -n 1 'docker-compose ps'
4. 初始化副本集(一键脚本)
docker exec mongo-primary mongosh -u admin -p admin123 --eval '
rs.initiate({_id: "rs2",members: [{ _id: 0, host: "mongo-primary:27017", priority: 2 },{ _id: 1, host: "mongo-secondary:27017", priority: 1 },{ _id: 2, host: "mongo-arbiter:27017", arbiterOnly: true }],settings: {heartbeatTimeoutSecs: 10,electionTimeoutMillis: 10000,chainingAllowed: false}
})'
# 等待10秒后检查状态 sleep 10 && docker exec mongo-primary mongosh -u admin -p admin123 --eval 'rs.status()'
5. 数据同步验证
# 主节点插入数据
docker exec mongo-primary mongosh -u admin -p admin123 --eval '
db.test.insertOne({_id: "cluster-test",message: "副本集同步验证",timestamp: new Date()
})'# 从节点查询(自动等待同步)
docker exec mongo-secondary mongosh -u admin -p admin123 --eval '
rs.secondaryOk();
db.test.find().readPref("secondary");'
6. 故障转移测试
# 模拟主节点宕机 docker pause mongo-primary# 观察选举(从节点窗口执行) docker logs -f mongo-secondary | grep -E "ELECT|stepdown"# 恢复原主节点 docker unpause mongo-primary# 验证角色切换 docker exec mongo-primary mongosh -u admin -p admin123 --eval 'rs.isMaster()'
✅ 验证要点
项目 | 预期结果 | 验证命令 |
---|---|---|
副本集状态 | 所有节点 health:1 | rs.status() |
主从角色 | 主节点 PRIMARY ,从节点 SECONDARY | rs.isMaster() |
数据同步 | 从节点能查询到主节点插入的数据 | db.test.find() |
故障转移 | 主节点宕机后从节点升主 | docker logs 观察选举日志 |
⚠️ 常见问题处理
-
容器启动失败:
# 检查日志 docker-compose logs mongo-primary# 常见修复 chown -R 999:999 data/ keys/
-
节点无法加入副本集:
# 强制重新配置 docker exec mongo-primary mongosh -u admin -p admin123 --eval ' rs.reconfig({_id:"rs2",members:[]},{force:true})'
-
认证失败:
# 确保密钥文件一致 docker exec mongo-primary cat /keys/mongodb-keyfile | md5sum
通过以上流程,您将在 10分钟内 完成一个高可用的 MongoDB 副本集部署。所有步骤已在全新 CentOS/Rocky Linux 机器上验证通过。
相关文章:
使用docker——10分钟内 完成一个高可用的 MongoDB 副本集部署
实验目的 掌握 Docker 容器化部署 MongoDB 副本集 的方法 理解 主从同步、故障转移、数据一致性 等核心机制 熟悉 MongoDB 集群管理命令 和 运维监控技巧 🔧 实验环境 操作系统: Rocky Linux 9 / CentOS 7 软件依赖: Docker 20.10 docker-compose 1.29 硬件要…...
信息化的编程未来发展
信息化与数字化与编程领域与AI的爆炸发展是最近十几年瞠目结舌的事情,列举一下相关词汇: C#、AI、C、Python、.NET、API 、IDE、asp、JavaScript网页端、Visua Studio、VR、Github、OpenGL-webGL-计算机图形学、面向对象 、类库、GIS、GPU计算与显卡、可…...
计算机视觉与深度学习 | EMD-KPCA-LSTM、EMD-LSTM、LSTM回归预测对比,多输入单输出(Matlab完整程序和数据)
以下是针对EMD-KPCA-LSTM、EMD-LSTM和LSTM回归预测对比的完整可运行MATLAB实现。包含数据生成、特征处理、模型构建和性能评估全流程,并提供关键代码注释和注意事项。 完整代码实现(含数据生成) %% 清理环境 clear; clc; close all; warning off;%% 生成模拟数据(正弦波+噪…...
Ollama 如何在显存资源有限的情况下合理分配给不同的服务?
在显存资源有限的情况下,合理分配显存给不同服务需要结合硬件特性、软件配置和模型优化技术。以下是几种有效的方法: 1. 使用 Ollama 自身的资源限制参数 Ollama 提供了一些命令行参数来限制单个模型的资源使用: --ram:限制模型…...
2025-05-19 学习记录--Python-简易用户登录系统 + 计算天数
合抱之木,生于毫末;九层之台,起于累土;千里之行,始于足下。💪🏻 一、简易用户登录系统 ⭐️ # 用户登录系统 # 用户名、密码、黑名单 users [{name: 小红, password: 123, status:True},{name…...
APP小程序抓包和下游代理
本文仅作学习/技术记录和交流,请勿进行非法活动,否则后果自负! 本文将主要围绕对小程序、APP的抓包方法,同时介绍下游代理。 在本文中我们将用到 Burpsuite、Yakit 和 Proxifier来完成。 小程序&APP抓包 对于小程序或APP抓…...
UE 材质几个输出向量节点
PixelNormalWS...
【八股战神篇】Java多线程高频面试题(JUC)
目录 专栏简介 一 如何创建线程? 延伸 1. 创建 Java 线程的本质 二 说说线程的生命周期? 延伸 1.描述一下线程的生命周期图 2.线程的优先级对线程执行有何影响? 3.如何确保三个线程按照特定顺序执行? 三 并发和并行的区…...
【esp32 mqtt】 连接亚马逊-加密传输信息
文章目录 1 加密文件1.1 服务端证书1.2 客户端CA证书1.3 客户端私钥1.4 三者协同工作的流程 2 亚马逊创建物品3 esp32 程序编写3.1 证书文件读取3.2 MQTT配置3.2.1 配置结构体3.2.2 初始化客户端3.2.3 注册事件3.2.4 开启mqtt3.2.5 示例 3.3 事件回调函数3.2.1 示例 3.4 接收到…...
用于判断主子关系的方法的实现(orm是efcore)
HasParentChildRelationship 方法:主要用于判断给定实体集合中是否存在主子关系,通过检查实体的导航属性来实现。CheckForDependencies 方法:是一个辅助方法,负责具体的依赖关系检查,包括对已访问实体的跟踪࿰…...
《Effective Python》第三章 循环和迭代器——在遍历参数时保持防御性
引言 本文基于《Effective Python: 125 Specific Ways to Write Better Python, 3rd Edition》一书的 Chapter 3: Loops and Iterators 中的 Item 21: Be Defensive when Iterating over Arguments。该条目深入探讨了在 Python 中处理迭代器(iterator)和…...
【python基础知识】Day30 模块和库的导入
学习python 学习python基础语法 处理任务需要用到的库 一、导入官方库的三种手段 1 标准导入:导入整个库 # 方式1:导入整个模块 import math# 导入库后,输出测试 print("方式1:使用 import math") print(f"圆周率…...
leetcode hot100刷题日记——4.盛最多水的容器
解答: 我的思路: class Solution{public:int maxArea(vector<int>& height){//遍历,我暴力找一下,时间超限// int vol0;// for(int i0;i<height.size()-1;i){// for(int ji1;j<height.size();j){// volmax(vol,…...
大二周周练翻译
翻译题 文章目录 翻译题[toc]中国茶道数字经济茶马古道中国父母现状电子商务长城大学生就业一带一路中国结 相遇的意义,是被你改变的那部分的我,代替你永远陪在我身边 点个赞呗! 中国茶道 China is a country with a time-honored civilizat…...
深度学习————模型保存与部署
第一部分:模型保存基础 什么是模型保存? 当你训练好一个深度学习模型后,它会拥有“学习到的参数”,这些参数(权重、偏置等)构成了模型的“知识”。如果不保存这些参数,那么训练好的模型在关闭…...
5G金融互联:迈向未来金融服务的极速与智能新时代
5G金融互联:迈向未来金融服务的极速与智能新时代 大家好,我是Echo_Wish,今天咱们聊聊一个大家都十分关心的话题:5G网络在金融服务中的应用。咱们平时可能觉得5G只是打个电话、刷个视频更流畅了,但在金融服务领域,5G的低延时、大带宽和高可靠性正在悄然改变整个游戏规则。…...
交易所开发:构建功能完备的金融基础设施全流程指南
交易所开发:构建功能完备的金融基础设施全流程指南 ——从技术架构到合规安全的系统性解决方案 一、开发流程:从需求分析到运维优化 开发一款功能完备的交易所需要遵循全生命周期管理理念,涵盖市场定位、技术实现、安全防护和持续迭代四大阶…...
Icecream Video Editor:简单易用的视频编辑软件,轻松打造专业视频
Icecream Video Editor 是一款简单易用的视频编辑软件,专为希望快速、高效编辑视频的用户设计。它提供了丰富的功能,包括视频剪辑、效果应用、音频处理和视频导出,满足用户在不同场景下的需求。无论是视频新手还是有一定基础的创作者…...
论文阅读--Logical quantum processor based on reconfigurable atom arrays
论文主要内容 研究背景与目标: 论文提出了一种基于可重构中性原子阵列的逻辑量子处理器,旨在通过量子纠错(QEC)和逻辑量子比特编码,解决物理量子比特的噪声限制问题。该处理器结合高保真度逻辑门操作、任意连接性和实时…...
安防综合管理系统EasyCVR视频融合平台安防知识:门禁系统与视频监控系统如何联动?
在现代安防体系中,视频监控与门禁系统是两大核心。前者实时记录画面,为安全事件追溯提供依据;后者精准管控人员出入。二者联动可提升安防智能化水平,实现门禁点图像抓拍与实时监视,在安全事件发生时快速整合信息&#…...
微机系统第二章-题目整理
80x86标志寄存器中ZF位等于1,说明( )。 A A.运算结果等于0 B. 运算结果大于0 C. 运算结果不等于0 D.运算结果溢出 8086CPU由哪两大部分组成?简述它们的主要功能。 总线接口部件BIU跟执行部件EU。 总线接口部件(BIU&…...
w~自动驾驶合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/12371169 #世界模型和DriveGPT这类大模型到底能给自动驾驶带来什么ne 以下分享大模型与自动驾驶结合的相关工作9篇论 1、ADAPT ADAPT: Action-aware Driving Caption Transformer(ICRA2023) AD…...
嵌入式学习的第二十三天-数据结构-树+哈希表+内核链表
一、树(一对多) 1.树的定义 树:n(n>0)个结点的有限集合。n 0 ,空树。 2.在任意一个非空树中, (1),有且仅有一个特定的根结点 (2),当n>1 时,其余结点可分为m个…...
互联网大厂Java求职面试:Spring AI与大模型交互的高级模式与自定义开发
互联网大厂Java求职面试:Spring AI与大模型交互的高级模式与自定义开发 在当今技术领域,随着AI和大模型技术的广泛应用,如何在复杂的系统架构中高效地集成这些技术成为了各大互联网公司关注的重点。本文将通过一场模拟的面试对话,…...
Ansible模块——主机名设置和用户/用户组管理
设置主机名 ansible.builtin.hostname: name:要设置的主机名 use:更新主机名的方式(默认会自动选择,不指定的话,物理机一般不会有问题,容器可能会有问题,一般是让它默认选择) syst…...
lowcoder数据库操作1:链接目标数据库
比如我使用的是PostgreSQL,要链接到数据库。 步骤1,Data Sources 步骤2, New data source 步骤3,选择PostgreSQL 步骤4,输入各种信息 命名,数据库所在的IP,端口,库名,用户密码。 步…...
R9打卡——RNN实现阿尔茨海默病诊断(优化特征选择版)
🍨 本文为🔗365天深度学习训练营中的学习记录博客 🍖 原作者:K同学啊 1.检查GPU import numpy as np import pandas as pd import torch from torch import nn import torch.nn.functional as F import seaborn as sns#设置GPU训…...
Label Studio:开源标注神器
目录 一、Label Studio 是什么? 二、核心功能大揭秘 2.1 多类型数据全兼容 2.2 个性化定制随心配 2.3 团队协作超给力 2.4 机器学习巧集成 三、上手实操超简单 3.1 安装部署不头疼 3.1.1 Docker安装 3.1.2 pip安装 3.1.3 Anaconda安装 3.2 快速开启标注…...
flow-两种SharingStarted策略的区别示例
一 代码示例 viewModel.kt:// 上游数据源 - 模拟温度传感器 private val temperatureSource flow {var temp 20while(true) {emit(temp)delay(1000)println("上游发射温度: $temp") // 日志观察发射} }// WhileSubscribed - 有订阅者才收集 val temperature1 tem…...
零基础设计模式——设计模式入门
第一部分:设计模式入门 欢迎来到设计模式的世界!别担心,这听起来可能很“高大上”,但我们会用最生活化的例子来帮助你理解。 1. 什么是设计模式? 想象一下,你是个大厨,每天都要做很多菜。有些…...
通过vcpkg交叉编译grpc:构建Arm64平台的Docker化开发环境
一、引言 在现代软件开发中,交叉编译是构建跨平台应用程序的关键技术。本文将详细介绍如何使用Docker容器和vcpkg包管理器为Arm64架构交叉编译gRPC库。这种方法特别适用于需要在x86开发机上为ARM服务器或嵌入式设备构建高性能RPC服务的场景。 二、配置Docker交叉编…...
Nginx基础知识
Nginx是什么? Nginx 是一款高性能的 Web 服务器、反向代理服务器和负载均衡器,以其高并发处理能力和低内存消耗著称。以下是 Nginx 的基础知识和常见配置示例: 1. 核心概念 • 配置文件位置:通常为 /etc/nginx/nginx.conf 或 /us…...
【计算机主板架构】ITX架构
一、引言 在计算机硬件的广阔领域中,主板架构犹如大厦的基石,对整个计算机系统的性能、功能和扩展性起着至关重要的作用。其中,ITX架构以其小巧、灵活和独特的设计理念,在特定的应用场景中脱颖而出。从家庭媒体中心到小型办公电脑…...
ubuntu 20.04 运行和编译LOAM_Velodyne
摘要:创建工作空间-->src下克隆代码(https://github.com/laboshinl/loam_velodyne)-->修改四处代码(找到src/loam_velodyne路径下的CMakeLists.txt文件,注释掉35行代码和将/LOAM/src/loam_velodyne/src/lib文件夹…...
云计算简介:从“水电”到“数字引擎”的技术革命
云计算简介:从“水电”到“数字引擎”的技术革命 在当今数字化浪潮中,云计算早已从一个技术概念演变为支撑现代社会运转的核心基础设施。无论是你手机里的天气预报、电商购物的推荐系统,还是企业内部的ERP系统,背后都离不开云计算…...
femap许可与多用户共享
随着电磁仿真技术的发展,Femap作为一款领先的工具,在多个领域中发挥着不可替代的作用。然而,对于许多团队和企业来说,如何高效、经济地管理和使用Femap许可证成为了一个亟待解决的问题。本文将探讨Femap许可与多用户共享的概念、优…...
spring中yml配置上下文与tomcat等外部容器不一致问题
结论:外部优先级大于内部 在 application.yml 中配置了: server:port: 8080servlet:context-path: /demo这表示你的 Spring Boot 应用的上下文路径(context-path)是 /demo,即访问你的服务时,URL 必须以 /d…...
网络I/O学习-poll(三)
一、为什么要用Poll 由于select参数太多,较于复杂,调用起来较为麻烦;poll对其进行了优化 二、poll机制 poll也是一个系统调用,每次调用都会将所有客户端的fd拷贝到内核空间,然后进行轮询,判断IO是否就绪…...
云原生攻防2(Docker基础补充)
Docker基础入门 容器介绍 Docker是什么 Docker是基于Linux内核实现,最早是采用了 LXC技术,后来Docker自己研发了runc技术运行容器。 它基于Google Go语言实现,采用客户端/服务端架构,使用API来管理和创建容器。 虚拟机 VS Docker Namespace 内核命名空间属于容器非常核…...
【C++模板与泛型编程】实例化
目录 一、模板实例化的基本概念 1.1 什么是模板实例化? 1.2 实例化的触发条件 1.3 实例化的类型 二、隐式实例化 2.1 隐式实例化的工作原理 2.2 类模板的隐式实例化 2.3 隐式实例化的局限性 三、显式实例化 3.1 显式实例化声明(extern templat…...
CI/CD 实践:实现可灰度、可监控、可回滚的现代部署体系
CI/CD 实践:实现可灰度、可监控、可回滚的现代部署体系 一、背景 随着微服务架构、云原生技术的普及,传统的手动部署方式已难以满足现代业务快速迭代、高可用的需求。CI/CD(持续集成/持续交付)作为现代 DevOps 的核心环节&#…...
后退的风景
后退的风景 前言回退的景色 前言 坐在高铁的窗边,这是一趟回程的旅途,所有的树木、铁塔、石碑向后涌去,一如从前。 所谓风景正是如此,无非是看到了一段触动内心的感受,这段感受可能是伤心,亦或是欣喜。这…...
腾讯云安装halo博客
腾讯云安装halo博客 如果网站已经配置好可以直接使用的,可以直接跳转到《6》进行1panel的安装, 如果跳过之后安装出现问题,可以看看前面步骤 从《6》开始的安装视频 我估计是网站默认放开的端口和他返代理应用的端口冲突了,重装…...
Excel宏和VBA的详细分步指南
Excel宏和VBA的详细分步指南 一、宏录制与代码分析(超详细版)1. 启用开发工具2. 录制宏 二、VBA核心语法(深入详解)1. 变量与数据类型2. 循环结构3. 条件判断2. Worksheet对象3. Range对象的高级操作 四、实用案例扩展1. 数据清洗…...
第十六届蓝桥杯复盘
文章目录 1.数位倍数2.IPv63.变换数组4.最大数字5.小说6.01串7.甘蔗8.原料采购 省赛过去一段时间了,现在复盘下,省赛报完名后一直没准备所以没打算参赛,直到比赛前两天才决定参加,赛前两天匆匆忙忙下载安装了比赛要用的编译器ecli…...
深度学习---模型预热(Model Warm-Up)
一、基本概念与核心定义 模型预热是指在机器学习模型正式训练或推理前,通过特定技术手段使模型参数、计算图或运行环境提前进入稳定状态的过程。其本质是通过预处理操作降低初始阶段的不稳定性,从而提升后续任务的效率、精度或性能。 核心目标…...
python:pymysql概念、基本操作和注入问题讲解
python:pymysql分享目录 一、概念二、数据准备三、安装pymysql四、pymysql使用(一)使用步骤(二)查询操作(三)增(四)改(五)删 五、关于pymysql注入…...
科普:极简的AI乱战江湖
本文无图。 大模型 2022年2月,文生图应用的鼻祖Midjourney上线。 2022年8月,开源版的Midjourney,也就是Stable Diffusion上线。 2022年11月30日,OpenAI正式发布ChatGPT-3.5。 此后,不断有【大模型】面世&…...
养生指南:解锁健康生活新方式
一、饮食:精准搭配,科学滋养 饮食以 “少加工、多天然” 为核心。早餐选择希腊酸奶搭配蓝莓与一把混合坚果,富含蛋白质与抗氧化成分;午餐用藜麦饭搭配香煎龙利鱼和彩椒炒芦笋,营养全面且低脂;晚餐则是山药…...
Dolphinscheduler执行工作流失败,后台报duplicate key错误
背景 现场童鞋发来一张图如下 我很懵逼,不知道出了啥问题,在聊天工具上聊了10m还不知道啥,干脆就搞个腾讯会议(在此感谢腾讯爸爸免费会议)。哦,现场临时搭建了dolphinscheduler,然后导入工作流…...