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

MongoDB 部署指南:从 Linux 到 Docker 的全面讲解

一、MongoDB 简介

MongoDB 是一种 NoSQL 数据库,以文档模型存储数据,具备高性能、弹性扩展性和分布式架构等特点,非常适用于高并发和大数据量的场景。本文将从 Linux 和 Docker 环境开始讲解,帮助读者在不同环境下顺利部署 MongoDB。

二、在 Linux (CentOS) 上部署 MongoDB

2.1 安装 MongoDB

在 Linux 上安装 MongoDB 主要通过包管理工具 YUM 进行。以下步骤适用于 CentOS 7/8:

  1. 配置 MongoDB YUM 源

    cat <<EOF | sudo tee /etc/yum.repos.d/mongodb-org-6.0.repo
    [mongodb-org-6.0]
    name=MongoDB Repository
    baseurl=https://repo.mongodb.org/yum/redhat/\$releasever/mongodb-org/6.0/x86_64/
    gpgcheck=1
    enabled=1
    gpgkey=https://www.mongodb.org/static/pgp/server-6.0.asc
    EOF
    
  2. 安装 MongoDB

    sudo yum install -y mongodb-org
    
  3. 启动并设置开机自启动

    sudo systemctl start mongod
    sudo systemctl enable mongod
    
  4. 验证安装

    启动后可以使用以下命令检查 MongoDB 服务状态:

    sudo systemctl status mongod
    

    在终端输入 mongo 命令,进入 MongoDB shell,验证是否可以成功连接。

2.2 配置 MongoDB

/etc/mongod.conf 中可以进行基本配置:

  • 数据存储路径

    storage:dbPath: /var/lib/mongo
    
  • 网络配置

    修改绑定 IP 地址,允许外部访问:

    net:bindIp: 0.0.0.0port: 27017
    

完成配置后,重启 MongoDB:

sudo systemctl restart mongod

三、在 Docker 中部署 MongoDB

使用 Docker 部署 MongoDB 可以简化安装流程,并能方便地进行环境隔离。

3.1 拉取 MongoDB 镜像

docker pull mongo:6.0

3.2 启动 MongoDB 容器

通过以下命令启动 MongoDB 容器,挂载数据目录,并设置容器名称和网络端口:

docker run -d --name mongodb \-p 27017:27017 \-v /mydata/mongo:/data/db \-e MONGO_INITDB_ROOT_USERNAME=admin \-e MONGO_INITDB_ROOT_PASSWORD=admin123 \mongo:6.0

3.3 配置挂载 HTML 数据实时刷新

为了在 Docker 中实时挂载 HTML 等静态文件,可以通过 Docker 的挂载机制来完成:

  1. 创建挂载目录

    mkdir -p /mydata/html 
    
  2. 运行 MongoDB 并挂载 HTML 文件

    docker run -d --name mongodb \-p 27017:27017 \-v /mydata/html:/usr/share/nginx/html \mongo:6.0
    

这样,在 /mydata/html 中的内容会映射到 MongoDB 容器中,可以在更新数据时实时反映。

四、集群环境下的 MongoDB 部署

MongoDB 集群部署适用于高可用场景。主要部署方式包括副本集(Replica Set)和分片(Sharding)。

4.1 副本集(Replica Set)配置

副本集是 MongoDB 内置的高可用方案,通过多个节点实现数据复制,避免单点故障。每个副本集由一个主节点(Primary)和一个或多个从节点(Secondary)组成。

配置步骤:

假设需要搭建一个三节点副本集,其中 mongodb0 为主节点,mongodb1mongodb2 为从节点。

1. 安装 MongoDB 并配置 mongod.conf 文件

在每台服务器上进行 MongoDB 的安装。完成安装后,在每个节点的 mongod.conf 文件中设置副本集名称。

/etc/mongod.conf 中添加以下内容:

# 副本集配置
replication:replSetName: "rs0"   # 副本集名称,三台服务器的名称保持一致
2. 启动 MongoDB 实例

在每台服务器上启动 MongoDB 服务:

sudo systemctl start mongod
3. 初始化副本集

进入任意一台 MongoDB 节点(如 mongodb0)的 MongoDB Shell,并初始化副本集。

mongo --host mongodb0.example.net --port 27017

执行以下代码以初始化副本集:

rs.initiate({_id: "rs0",   // 副本集名称members: [{ _id: 0, host: "mongodb0.example.net:27017" },  // 主节点{ _id: 1, host: "mongodb1.example.net:27017" },  // 从节点1{ _id: 2, host: "mongodb2.example.net:27017" }   // 从节点2]
})
4. 验证副本集配置

执行以下命令,查看副本集状态:

rs.status()

在输出信息中可以看到副本集的各个节点状态,包括主节点和从节点的同步情况。至此,三节点副本集已完成配置,实现了数据冗余和高可用性。


4.2 分片集群(Sharding Cluster)配置

分片集群主要用于解决 MongoDB 在大数据量或高并发环境下的性能瓶颈。分片集群通过将数据拆分成块,并分布在不同的分片节点上,从而实现数据和负载的分布式管理。

分片集群通常包含三种角色:

  1. 路由(Router)节点:客户端连接入口,用于路由请求。
  2. 配置服务器(Config Server):存储分片信息。
  3. 分片服务器(Shard Server):存储数据并执行查询。
配置步骤:

假设我们有三台服务器用于路由节点和配置服务器,另外有三台用于存储分片。

1. 配置和启动配置服务器(Config Server)

在配置服务器上进行以下配置。在 /etc/mongod.conf 文件中指定 configsvr 模式和配置数据存储路径。

# 配置服务器配置
sharding:clusterRole: "configsvr"     # 声明该节点为配置服务器storage:dbPath: /var/lib/mongo/config  # 配置数据存储路径

启动配置服务器:

sudo systemctl start mongod
2. 配置和启动分片服务器(Shard Server)

在分片服务器上进行以下配置。在 /etc/mongod.conf 文件中指定 shardsvr 模式和分片数据存储路径。

# 分片服务器配置
sharding:clusterRole: "shardsvr"      # 声明该节点为分片服务器storage:dbPath: /var/lib/mongo/shard   # 分片数据存储路径

启动分片服务器:

sudo systemctl start mongod
3. 配置和启动路由节点(Router Node)

路由节点通过 mongos 服务充当客户端的路由器。以下配置需要连接到配置服务器。

mongos --configdb "rs0/mongodb0.example.net:27019,mongodb1.example.net:27019,mongodb2.example.net:27019" --bind_ip_all --port 27017

此命令会启动一个 mongos 实例,连接到上述三个配置服务器,使客户端可以通过 mongos 实例访问分片集群。

4. 启用分片和创建分片集合

使用 mongos 连接 MongoDB Shell,并启用数据库和集合的分片:

sh.enableSharding("myDatabase")   // 启用数据库的分片功能
sh.shardCollection("myDatabase.myCollection", { shardKey: 1 })  // 定义集合的分片键

分片键 shardKey 选择会影响分片分布和性能,应根据查询特点选择合适的字段作为分片键。

5. 验证分片集群配置

可以通过以下命令查看分片状态:

sh.status()

输出的分片信息将显示所有分片、分布在不同节点的数据块、路由节点和配置服务器信息,验证分片集群配置是否正确。

相关文章:

MongoDB 部署指南:从 Linux 到 Docker 的全面讲解

一、MongoDB 简介 MongoDB 是一种 NoSQL 数据库&#xff0c;以文档模型存储数据&#xff0c;具备高性能、弹性扩展性和分布式架构等特点&#xff0c;非常适用于高并发和大数据量的场景。本文将从 Linux 和 Docker 环境开始讲解&#xff0c;帮助读者在不同环境下顺利部署 Mongo…...

Java AQS 源码

前言 相关系列 《Java & AQS & 目录》&#xff08;持续更新&#xff09;《Java & AQS & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Java & AQS & 总结》&#xff08;学习总结/最新最准/持续更新&#xff09;《Java & …...

栈和队列(1)——栈

栈的基本概念 1. 栈的定义&#xff1a;只允许在一端进行插入或删除操作的线性表&#xff08;可以理解为操作受限的线性表&#xff09;。 2. 栈的特点&#xff1a;后进先出&#xff08;LIFO&#xff09;。 3. 栈的基本操作&#xff1a;初始化、销毁、进栈、出栈、读栈顶元素等…...

Java中的反射(Reflection)

先上两张图来系统的看一下反射的作用和具体的实现方法 接下来详细说一下反射的步骤以及之中使用的方法&#xff1a; 获取Class对象&#xff1a; 要使用反射&#xff0c;首先需要获得一个Class对象&#xff0c;该对象是反射的入口点。可以通过以下几种方式获取Class对象&#x…...

【IC验证】linux系统下基于QuestaSim的systemverilog仿真TCL命令

linux系统下基于QuestaSim的systemverilog仿真TCL命令 一.终端打开QuestaSim二.QuestaSim中TCL脚本指令1.仿真库的创建&#xff08;vlib&#xff09;-非必要2.编译命令&#xff08;vlog&#xff09;3.仿真命令&#xff08;vlog&#xff09;4.运行命令&#xff08;run&#xff0…...

Python图像处理库PIL,实现旋转缩放、剪切拼接以及滤波

文章目录 切割缩放和旋转拼接 PIL的Image类&#xff0c;提供了一些常用的图像处理方法。 切割缩放和旋转 PIL可以很方便地实现如下效果 代码如下 from PIL import Image path lena.jpg img Image.open(path) # 读取 img.resize((50, 50), resampleImage.Resampling.NEARE…...

xhr的readyState和status

XMLHttpRequest&#xff08;XHR&#xff09;对象中的readyState和status用于监控异步 HTTP 请求的状态。它们分别表示请求的当前阶段和服务器的响应状态。 readyState 用于判断请求所处的阶段&#xff0c;确保数据完全接收。 status 用于判断请求的结果状态&#xff08;如200表…...

Rust 力扣 - 238. 除自身以外数组的乘积

文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 这题主要有个关键点&#xff0c;就是元素能取0&#xff0c;然后我们分类讨论元素为0的数量 如果数组中存在至少两个元素为0&#xff0c;则每个元素的除自身以外的乘积为0如果数组中仅存在一个0&#xff0c;则为…...

【Vue框架】基础语法练习(1)

其实更多知识点已经在Vue.js官网十分清楚了&#xff0c;大家也可以去官网进行更细节的学习 https://cn.vuejs.org/ 说明&#xff1a;目前最新是Vue3版本的&#xff0c;但是Vue2已经深得人心&#xff0c;所以就是可以支持二者合用。它们最大的区别就是Vue3是组合式API&#xf…...

开源一款基于 JAVA 的仓库管理系统,支持三方物流和厂内物流,包含 PDA 和 WEB 端的源码

大家好&#xff0c;我是一颗甜苞谷&#xff0c;今天分享一款基于 JAVA 的仓库管理系统,支持三方物流和厂内物流,包含 PDA 和 WEB 端的源码。 前言 在当前的物流仓储行业&#xff0c;企业面临着信息化升级的迫切需求&#xff0c;但往往受限于高昂的软件采购和维护成本。现有的…...

开源一套基于若依的wms仓库管理系统,支持lodop和网页打印入库单、出库单的源码

大家好&#xff0c;我是一颗甜苞谷&#xff0c;今天分享一款基于若依的wms仓库管理系统&#xff0c;支持lodop和网页打印入库单、出库单的源码。 前言 在当今快速发展的商业环境中&#xff0c;库存管理对于企业来说至关重要。然而&#xff0c;许多企业仍然依赖于传统的、手动…...

HTML+JavaScript案例分享: 打造经典俄罗斯方块,详解实现全过程

在本文中,我们将深入探讨如何使用 JavaScript 实现经典的俄罗斯方块游戏。俄罗斯方块是一款广为人知的益智游戏,通过操纵各种形状的方块,使其在游戏区域内排列整齐,以消除完整的行来获得分数。 效果图如下: 一、游戏界面与布局 我们首先使用 HTML 和 CSS 来创建游戏的界面…...

【网页布局技术】项目五 使用CSS设置导航栏

《CSSDIV网页样式与布局案例教程》 徐琴 目录 任务一 制作简单纵向导航栏支撑知识点1&#xff0e;合理利用display:block属性2&#xff0e;利用margin-bottom设置间隔效果3&#xff0e;利用border设置特殊边框 任务二 制作简单横向导航栏任务三 制作带图片效果的横向导航栏任务…...

自学网络安全,网络安全入门学习路线,收藏这篇就够了

在当今高度数字化的时代&#xff0c;网络安全已经成为了一个至关重要的领域。随着网络威胁的不断演变和增长&#xff0c;对于专业网络安全人才的需求也在急剧上升。对于那些对网络安全充满热情并且渴望自学成才的人来说&#xff0c;制定一个系统、全面且高效的学习路线和规划是…...

React Query已过时?新一代请求工具横空出世

大家好&#xff01;今天我想和你们聊聊一个让我兴奋不已的话题 —— 分页列表请求策略。你们知道吗&#xff1f;这个策略真的帮了我大忙&#xff01;它不仅让我的代码更简洁&#xff0c;还大大提升了用户体验。说实话&#xff0c;每次用到这个功能&#xff0c;我都忍不住赞叹。…...

视频怎么进行格式转换?6款视频转换MP4格式的免费软件!

在数字时代&#xff0c;视频格式的多样性为我们提供了丰富的观看和编辑选择&#xff0c;但同时也带来了格式不兼容的困扰&#xff1a;MOV、AVI、WMV、MKV……这些格式多多少少都会遇到因不兼容而无法播放或下载分享的场景。当你想要将视频文件从一种格式转换为另一种格式&#…...

智能文档处理平台:免费体验智能化医疗信息提取

前提&#xff1a;医疗行业信息碎片化问题普遍&#xff0c;手工数据录入效率低且易错&#xff0c;导致数据管理难度大。本系统可帮助医疗机构在信息管理上迈向智能化&#xff0c;优化流程并提升效率。 系统概述&#xff1a; 思通数科推出的智能文档处理系统&#xff0c;专为解…...

Java 中 InputStream 的使用:try-with-resources 与传统方式的比较

在 Java 中&#xff0c;处理输入输出流时&#xff0c;确保资源的正确管理至关重要。特别是 InputStream 这样的流&#xff0c;一旦使用完成&#xff0c;必须正确关闭以释放资源。本文将对两种常见的资源管理方式进行比较&#xff1a;try-with-resources 语句和传统的 try-catch…...

【MATLAB源码-第271期】基于matlab的雷达发射回波模拟,包括匹配滤波,加窗旁瓣控制,以及MTD处理。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 雷达系统是一种广泛应用于目标探测和跟踪的技术&#xff0c;其核心在于发射电磁波并分析返回信号。本文将探讨雷达发射波形、回波信号的模拟、匹配滤波的过程、加窗控制旁瓣的策略以及慢时间MTD处理的整体系统框架。 一、雷…...

Linux系统编程——信号量

一、信号量的定义和原理 1、概念 原子操作&#xff1a;不可中断的一个或者一系列的操作&#xff0c;即一件事要么做要么不做。临界资源&#xff1a;不同进程能够看到的一份公共资源&#xff0c;一次只能被一个进程使用。PV操作&#xff1a;由于信号量只能进行两种操作等待和发…...

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…...

[ICLR 2022]How Much Can CLIP Benefit Vision-and-Language Tasks?

论文网址&#xff1a;pdf 英文是纯手打的&#xff01;论文原文的summarizing and paraphrasing。可能会出现难以避免的拼写错误和语法错误&#xff0c;若有发现欢迎评论指正&#xff01;文章偏向于笔记&#xff0c;谨慎食用 目录 1. 心得 2. 论文逐段精读 2.1. Abstract 2…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解

JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用&#xff0c;结合SQLite数据库实现联系人管理功能&#xff0c;并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能&#xff0c;同时可以最小化到系统…...

GruntJS-前端自动化任务运行器从入门到实战

Grunt 完全指南&#xff1a;从入门到实战 一、Grunt 是什么&#xff1f; Grunt是一个基于 Node.js 的前端自动化任务运行器&#xff0c;主要用于自动化执行项目开发中重复性高的任务&#xff0c;例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机&#xff08;无人驾驶飞行器&#xff0c;UAV&#xff09;技术的快速发展&#xff0c;其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统&#xff0c;无人机的“黑飞”&…...

CSS | transition 和 transform的用处和区别

省流总结&#xff1a; transform用于变换/变形&#xff0c;transition是动画控制器 transform 用来对元素进行变形&#xff0c;常见的操作如下&#xff0c;它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...

OD 算法题 B卷【正整数到Excel编号之间的转换】

文章目录 正整数到Excel编号之间的转换 正整数到Excel编号之间的转换 excel的列编号是这样的&#xff1a;a b c … z aa ab ac… az ba bb bc…yz za zb zc …zz aaa aab aac…; 分别代表以下的编号1 2 3 … 26 27 28 29… 52 53 54 55… 676 677 678 679 … 702 703 704 705;…...

消息队列系统设计与实践全解析

文章目录 &#x1f680; 消息队列系统设计与实践全解析&#x1f50d; 一、消息队列选型1.1 业务场景匹配矩阵1.2 吞吐量/延迟/可靠性权衡&#x1f4a1; 权衡决策框架 1.3 运维复杂度评估&#x1f527; 运维成本降低策略 &#x1f3d7;️ 二、典型架构设计2.1 分布式事务最终一致…...