MongoDB 部署指南:从 Linux 到 Docker 的全面讲解
一、MongoDB 简介
MongoDB 是一种 NoSQL 数据库,以文档模型存储数据,具备高性能、弹性扩展性和分布式架构等特点,非常适用于高并发和大数据量的场景。本文将从 Linux 和 Docker 环境开始讲解,帮助读者在不同环境下顺利部署 MongoDB。
二、在 Linux (CentOS) 上部署 MongoDB
2.1 安装 MongoDB
在 Linux 上安装 MongoDB 主要通过包管理工具 YUM 进行。以下步骤适用于 CentOS 7/8:
-
配置 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
-
安装 MongoDB
sudo yum install -y mongodb-org
-
启动并设置开机自启动
sudo systemctl start mongod sudo systemctl enable mongod
-
验证安装
启动后可以使用以下命令检查 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 的挂载机制来完成:
-
创建挂载目录:
mkdir -p /mydata/html
-
运行 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
为主节点,mongodb1
和 mongodb2
为从节点。
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 在大数据量或高并发环境下的性能瓶颈。分片集群通过将数据拆分成块,并分布在不同的分片节点上,从而实现数据和负载的分布式管理。
分片集群通常包含三种角色:
- 路由(Router)节点:客户端连接入口,用于路由请求。
- 配置服务器(Config Server):存储分片信息。
- 分片服务器(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 数据库,以文档模型存储数据,具备高性能、弹性扩展性和分布式架构等特点,非常适用于高并发和大数据量的场景。本文将从 Linux 和 Docker 环境开始讲解,帮助读者在不同环境下顺利部署 Mongo…...
Java AQS 源码
前言 相关系列 《Java & AQS & 目录》(持续更新)《Java & AQS & 源码》(学习过程/多有漏误/仅作参考/不再更新)《Java & AQS & 总结》(学习总结/最新最准/持续更新)《Java & …...
栈和队列(1)——栈
栈的基本概念 1. 栈的定义:只允许在一端进行插入或删除操作的线性表(可以理解为操作受限的线性表)。 2. 栈的特点:后进先出(LIFO)。 3. 栈的基本操作:初始化、销毁、进栈、出栈、读栈顶元素等…...
Java中的反射(Reflection)
先上两张图来系统的看一下反射的作用和具体的实现方法 接下来详细说一下反射的步骤以及之中使用的方法: 获取Class对象: 要使用反射,首先需要获得一个Class对象,该对象是反射的入口点。可以通过以下几种方式获取Class对象&#x…...
【IC验证】linux系统下基于QuestaSim的systemverilog仿真TCL命令
linux系统下基于QuestaSim的systemverilog仿真TCL命令 一.终端打开QuestaSim二.QuestaSim中TCL脚本指令1.仿真库的创建(vlib)-非必要2.编译命令(vlog)3.仿真命令(vlog)4.运行命令(run࿰…...
Python图像处理库PIL,实现旋转缩放、剪切拼接以及滤波
文章目录 切割缩放和旋转拼接 PIL的Image类,提供了一些常用的图像处理方法。 切割缩放和旋转 PIL可以很方便地实现如下效果 代码如下 from PIL import Image path lena.jpg img Image.open(path) # 读取 img.resize((50, 50), resampleImage.Resampling.NEARE…...
xhr的readyState和status
XMLHttpRequest(XHR)对象中的readyState和status用于监控异步 HTTP 请求的状态。它们分别表示请求的当前阶段和服务器的响应状态。 readyState 用于判断请求所处的阶段,确保数据完全接收。 status 用于判断请求的结果状态(如200表…...
Rust 力扣 - 238. 除自身以外数组的乘积
文章目录 题目描述题解思路题解代码题解链接 题目描述 题解思路 这题主要有个关键点,就是元素能取0,然后我们分类讨论元素为0的数量 如果数组中存在至少两个元素为0,则每个元素的除自身以外的乘积为0如果数组中仅存在一个0,则为…...
【Vue框架】基础语法练习(1)
其实更多知识点已经在Vue.js官网十分清楚了,大家也可以去官网进行更细节的学习 https://cn.vuejs.org/ 说明:目前最新是Vue3版本的,但是Vue2已经深得人心,所以就是可以支持二者合用。它们最大的区别就是Vue3是组合式API…...
开源一款基于 JAVA 的仓库管理系统,支持三方物流和厂内物流,包含 PDA 和 WEB 端的源码
大家好,我是一颗甜苞谷,今天分享一款基于 JAVA 的仓库管理系统,支持三方物流和厂内物流,包含 PDA 和 WEB 端的源码。 前言 在当前的物流仓储行业,企业面临着信息化升级的迫切需求,但往往受限于高昂的软件采购和维护成本。现有的…...
开源一套基于若依的wms仓库管理系统,支持lodop和网页打印入库单、出库单的源码
大家好,我是一颗甜苞谷,今天分享一款基于若依的wms仓库管理系统,支持lodop和网页打印入库单、出库单的源码。 前言 在当今快速发展的商业环境中,库存管理对于企业来说至关重要。然而,许多企业仍然依赖于传统的、手动…...
HTML+JavaScript案例分享: 打造经典俄罗斯方块,详解实现全过程
在本文中,我们将深入探讨如何使用 JavaScript 实现经典的俄罗斯方块游戏。俄罗斯方块是一款广为人知的益智游戏,通过操纵各种形状的方块,使其在游戏区域内排列整齐,以消除完整的行来获得分数。 效果图如下: 一、游戏界面与布局 我们首先使用 HTML 和 CSS 来创建游戏的界面…...
【网页布局技术】项目五 使用CSS设置导航栏
《CSSDIV网页样式与布局案例教程》 徐琴 目录 任务一 制作简单纵向导航栏支撑知识点1.合理利用display:block属性2.利用margin-bottom设置间隔效果3.利用border设置特殊边框 任务二 制作简单横向导航栏任务三 制作带图片效果的横向导航栏任务…...
自学网络安全,网络安全入门学习路线,收藏这篇就够了
在当今高度数字化的时代,网络安全已经成为了一个至关重要的领域。随着网络威胁的不断演变和增长,对于专业网络安全人才的需求也在急剧上升。对于那些对网络安全充满热情并且渴望自学成才的人来说,制定一个系统、全面且高效的学习路线和规划是…...
React Query已过时?新一代请求工具横空出世
大家好!今天我想和你们聊聊一个让我兴奋不已的话题 —— 分页列表请求策略。你们知道吗?这个策略真的帮了我大忙!它不仅让我的代码更简洁,还大大提升了用户体验。说实话,每次用到这个功能,我都忍不住赞叹。…...
视频怎么进行格式转换?6款视频转换MP4格式的免费软件!
在数字时代,视频格式的多样性为我们提供了丰富的观看和编辑选择,但同时也带来了格式不兼容的困扰:MOV、AVI、WMV、MKV……这些格式多多少少都会遇到因不兼容而无法播放或下载分享的场景。当你想要将视频文件从一种格式转换为另一种格式&#…...
智能文档处理平台:免费体验智能化医疗信息提取
前提:医疗行业信息碎片化问题普遍,手工数据录入效率低且易错,导致数据管理难度大。本系统可帮助医疗机构在信息管理上迈向智能化,优化流程并提升效率。 系统概述: 思通数科推出的智能文档处理系统,专为解…...
Java 中 InputStream 的使用:try-with-resources 与传统方式的比较
在 Java 中,处理输入输出流时,确保资源的正确管理至关重要。特别是 InputStream 这样的流,一旦使用完成,必须正确关闭以释放资源。本文将对两种常见的资源管理方式进行比较:try-with-resources 语句和传统的 try-catch…...
【MATLAB源码-第271期】基于matlab的雷达发射回波模拟,包括匹配滤波,加窗旁瓣控制,以及MTD处理。
操作环境: MATLAB 2022a 1、算法描述 雷达系统是一种广泛应用于目标探测和跟踪的技术,其核心在于发射电磁波并分析返回信号。本文将探讨雷达发射波形、回波信号的模拟、匹配滤波的过程、加窗控制旁瓣的策略以及慢时间MTD处理的整体系统框架。 一、雷…...
Linux系统编程——信号量
一、信号量的定义和原理 1、概念 原子操作:不可中断的一个或者一系列的操作,即一件事要么做要么不做。临界资源:不同进程能够看到的一份公共资源,一次只能被一个进程使用。PV操作:由于信号量只能进行两种操作等待和发…...
Oracle索引问题汇总
一、oracle 数据库TIMESTAMP 时间字段,设置索引后,通过该字段进行排序,索引排序不生效问题 1. 记录下在工作中遇到的一次索引问题 问题描述: 数据库:oracle; 日志记录表中的一个创建时间(create…...
基于QT用工厂模式实现串口通信与网络通信激光器的控制
配置文件网络配置:IP+Port 串口配置:端口号+波特率 首先,我们需要创建一个配置文件 config.ini,内容如下: [SerialLaser] portName = COM1 baudRate = 9600[NetworkLaser] ipAddress = 192.168.1.1 port = 1234两类激光器的实现: #include <QCoreApplicat…...
【代码随想录Day58】图论Part09
dijkstra(堆优化版)精讲 题目链接/文章讲解:代码随想录 import java.util.*;class Edge {int to; // 邻接顶点int val; // 边的权重Edge(int to, int val) {this.to to;this.val val;} }class Pair<U, V> {public final U first; …...
_或者%关键字模糊匹配查出所有数据
1、问题 sql模糊匹配,如果页面输入_或者%,可以查出所有数据。 (1) SELECT * FROM test WHERE sfsc N and zdzwm like %%% (2) SELECT * FROM test WHERE sfsc N and zdzwm like %_% 2、解决方案 (1)mysql数据库 加转义字…...
【Python】转换得到图片的rgb565格式数据
使用方法:首先在代码同级目录创建input_images文件夹,然后将需要转换的图片放进去。 然后根据你的需要,修改代码最下面的crop_size、resize以及file_name。 最后点击运行,即可得到图片的rgb565格式数据 from PIL import Image, I…...
隨筆 20241024 Kafka中的ISR列表:分区副本的族谱
在分布式系统中,数据的一致性和可靠性至关重要。Apache Kafka作为一个强大的流处理平台,利用其分区和副本机制来确保这些特性。在Kafka中,ISR(In-Sync Replicas)列表是一个关键概念,它用来追踪与领导者副本…...
【python】爬虫
下载与批量下载 import requests #第三方库,没有下载的下载一下 pip install requests#爬虫下载图片 resrequests.get("url") print(res.content)#二进制字节流#写文件 with open("beauty.jpg","wb")as f:f.write(res.content)#批量…...
大语言模型数据类型与环境安装(llama3模型)
文章目录 前言一、代码获取一、环境安装二、大语言模型数据类型1、基本文本指令数据类型2、数学指令数据类型3、几何图形指令数据类型4、多模态指令数据类型5、翻译指令数据类型三、vscode配置四、相关知识内容1、理解softmax内容2、torch相关函数nn.Embedding函数torch.nn.fun…...
JS:列表操作
目录 1、列表截取2、列表数据包含3、列表筛选4、极值操作5、获取列表对象某一属性构建列表6、获取元素在列表中的下标7、列表去重 1、列表截取 列表截取:List.slice(start, end),左闭右开 var dataList [1,2,3,4,5,6] var resultList dataList.slice(0…...
ECharts 折线图 / 柱状图 ,通用配置标注示例
option {tooltip: { // 关于提示框(tooltip)的配置// 显示某一个去掉trigger: axis,显示一起显示 trigger: axistrigger: axis},legend: {top: bottom, // 显示标注位置// textStyle: {// color: "#000", // 设置图例文字颜…...
网站浏览图片怎么做/关键词查询的分析网站
Lazarus crack,功能丰富的 Delphi 开发环境 Lazarus为开发人员提供了一个功能丰富的 Delphi 开发环境,使他们能够创建功能齐全的跨平台应用程序,专为个人和商业用途而设计。 Lazarus 项目拥有超过 15 年的历史,包括一个用于 Free Pascal 的综…...
c 网站开发/免费技能培训在哪里报名
/*** * A:案例演示* 集合嵌套之ArrayList嵌套ArrayList* 案例:* 我们学科,学科又分为若个班级* 整个学科一个大集合* 若干个班级分为每一个小集合*/Testpublic void twoArrary() {ArrayList<ArrayList<Person>> list new ArrayList<>();ArrayList<Person…...
县建设局 协会网站/域名关键词排名查询
中新网1月17日电 据欧联网援引欧联通讯社报道,当地时间1月15日晚,一名搭乘意大利航空公司班机的30岁埃及男子,试图强行滞留意大利未果后被遣返。男子遭遣返登机后趁机舱关门之际跳机逃往机场起降区域,引发机场大乱被迫临时关闭&am…...
网站设计合同/百度双十一活动
我是linux 的服务器,navicat12的客户端, 开始链接的时候需要开服务器上得对外爆漏端口 3306,方法: 添加指定需要开放的端口: firewall-cmd --add-port123/tcp --permanent 重载入添加的端口: firewall-cmd …...
建设电影网站选服务器怎么选/中国网评中国网评
记录游戏引擎开发...
如何做网站淘宝客/培训机构招生方案模板
首先,是曾经的讲师LH大佬的模板 主要涉及了常用的文件头以及一些常用语句和函数的缩写 #include<cstdio> #include<iostream> #include<cstdlib> #include<iomanip> #include<cmath> #include<cstring> #include<string>…...