mongodb集群之分片集群

article/2025/8/7 5:49:49

目录

  • 1. 适用场景
  • 2. 集群搭建
    • 如何搭建
    • 搭建实例
      • Linux搭建实例(待定)
      • Windows搭建实例
        • 1.资源规划
        • 2. 配置conf文件
        • 3. 按顺序启动不同角色的mongodb实例
        • 4. 初始化config、shard集群信息
        • 5. 通过router进行分片配置

1. 适用场景

  • 数据量大影响性能

数据量大概达到千万级或亿级的时候,数据库相关的操作效率可能会下降,这时候可以考虑分片,减小压力

  • 部分数据迁移
    想要把当前数据库中某几个集合的一部分迁移出去时,可以借助分片的效果实现。这个需求一般优先考虑其他方法,因为搭建分片需要一点时间,而且事后需要恢复到原来的模式。所以建议只当成一种可选或备用方案,或者其他方案效率更低或者不可以用时可以考虑使用这个方法。

说明:上面仅为工作中遇到的场景,还有其他场景。

2. 集群搭建

如何搭建

1.资源规划
1)节点规划
官网介绍中mongodb分片式集群架构包含了router、config、shard三种不同类型的节点,他们之间的联系如下图:
 图片源:https://www.mongodb.com/zh-cn/docs/manual/sharding/
图片源:https://www.mongodb.com/zh-cn/docs/manual/sharding/

在官方文档中,给出了不同环境下节点个数的建议。对于正式环境,官方推荐方案如图,也就是说config、shard都要配置成副本集模式,且节点最好为3个以上,即推荐至少10个节点,其中,config为3个节点以上的副本集群,shard1为3个节点以上的副本集群,shard2为3个节点以上的副本集群,router至少1个。
在这里插入图片描述
对于测试的话,至少需要三个节点,即router、config、shards各一个节点。
在这里插入图片描述

说明:configs、shards如果只配置一个节点也必须配置成副本集,如果不配置成副本集无法启动对应实例为configs、shards。

关于配置几个分片,官方也给了建议:
在这里插入图片描述

2)服务器资源规划
跟副本集一样,考虑服务器、端口、相关文件位置(一般会需要数据、日志、配置、pid等文件,数据和配置是必须的,其他的根据自己的需求),方便后续操作和运维。

  • 服务器:如果是迁移用可以根据实际情况选择,如果是业务用,一般选择多个服务器,而不是同一台服务器
  • 端口:一般使用默认端口27017,但有的时候为了安全或者端口已经被占用的情况,就需要根据实际需求和情况另选
  1. 配置conf文件
  2. 按顺序启动不同角色的mongodb实例
  3. 初始化config、shard集群信息
  4. 通过router进行分片配置

搭建实例

Linux搭建实例(待定)

Windows搭建实例

1.资源规划

1)节点规划:一个router、一个config集群(3个节点)、两个分片集群(每个集群3个节点)
2)服务器资源规划
以单台服务器为例进行测试
在这里插入图片描述
对应物理文件结构如下面的图,分别用于对应mongo实例的数据、配置文件、日志文件位置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
因为每个shard和config都使用了3个节点的集群,所以节点数量比较多,配置也相对较多。

2. 配置conf文件

这一步既是区分是否是集群,也是区分是什么集群的关键。在分片模式,router、config、shard的配置稍有差别,具体如下:
shard1配置文件

#mongodb端口
port=37027#绑定ip,只有这个ip才可以访问上mongodb;0.0.0.0表示所有的都可以访问,如果要做安全管控可以限制ip
bind_ip=0.0.0.0# 日志文件的路径
logpath=D:\mysoftware\MongoDB\zone\ser1\log\mongodb37027.log# 数据文件的目录
dbpath=D:\mysoftware\MongoDB\zone\ser1\data0-1#日志以追加的方式存在
logappend=true# fork=true linux以后台方式启动,在window上没有用# 此参数较大比较好,单位是 MB,默认是磁盘可用空间的 5%
oplogSize=1024# 复制集的名称,同一个复制集的名称必须要相同
replSet=myreplace1

shard2只需要把replSet=myreplace1中的myreplace1换成对应副本集名称以及对应实例的端口、文件位置即可。
说明:这里对于充当shard的配置参数可以写在配置文件中,也可以在启动时加在启动命令上。
yml格式的配置:

sharding:
# 指定当前节点在分片集群中的角色(shardsvr代表分片节点)clusterRole: shardsvr

启动命令指定:

mongod.exe --shardsvr --config "D:\mysoftware\MongoDB\zone\ser1\data0-1\s1config1.conf"

非yml格式如何配置
说明:这个还没试过,不确定对不对,要验证一下。

sharding.clusterRole = shardsvr

config集群配置文件:

bind_ip=0.0.0.0
port=27027
dbpath=D:\mysoftware\MongoDB\zone\config\c1
logpath=D:\mysoftware\MongoDB\zone\config\log\config1.log
logappend=true
replSet=config# 这里加入configsvr参数配置,表名用于充当config
configsvr=trueoplogSize=1024

router配置文件:
router的配置中并没有dbpath,因为它只充当一个转发角色,并不实际存储数据,实际数据是来源于分片。

bind_ip=0.0.0.0
port=17017# mongos.log 需要提前在 los 中建好
logpath=D:\mysoftware\MongoDB\zone\router\log\mongos17017.log
logappend=true
#这里使用的是config的ip和端口,所以可以先配置config的,再配router,不容易混乱
configdb=config/localhost:27027,localhost:27028,localhost:27029
3. 按顺序启动不同角色的mongodb实例

启动顺序:config、shard、router
启动config:

mongod.exe  --config "D:\mysoftware\MongoDB\zone\config\c1\config1.conf"

启动shard:

mongod.exe --shardsvr --config "D:\mysoftware\MongoDB\zone\ser1\data0-1\s1config1.conf"

注意事项:如果配置文件中没有配置是否充当shard,需要加上–shardsvr参数

启动router:

mongos.exe  --config "D:\mysoftware\MongoDB\zone\router\17017.conf"

注意事项:启动router的时候使用的是mongos而不是mongod,否则报错:

Error parsing INI config file: unrecognised option ‘configdb‘
4. 初始化config、shard集群信息

shard1集群

mongosh.exe --port 37027
rs.initiate({_id : "myreplace1",members : [{_id : 0,host : "localhost:37027","priority":10},{_id : 1,host : "localhost7:37028"},{_id : 2,host : "localhost:37029"}]
});

shard2集群

mongosh.exe --port 47027
rs.initiate({_id : "myreplace2",members : [{_id : 0,host : "localhost:47027","priority":10},{_id : 1,host : "localhost:47028"},{_id : 2,host : "localhost7:47029"}]
});

config集群

mongosh.exe --port 27027
rs.initiate({_id : "config",members : [{_id : 0,host : "localhost:27027","priority":10},{_id : 1,host : "localhost:27028"},{_id : 2,host : "localhost:27029"}]
});
5. 通过router进行分片配置

进入router:

mongosh.exe --port 17017

添加分片1:

sh.addShard("myreplace1/localhost:37027,localhost:37028,localhost:37029")

添加分片2:

sh.addShard("myreplace2/localhost:47027,localhost:47028,localhost:47029")

说明:配置到spring boot中的话,直接配置router的信息就行,如果单独想用某个分片的,也可以配置对应分片的信息,都是连接的。

参考教程:
主要参考:https://www.cnblogs.com/niCong/p/17071290.html
这个主要参考通过conf文件配置实例角色:https://new-coder.com/pc/post/c48555c9362b


http://www.hkcw.cn/article/iBqSkBQDXc.shtml

相关文章

华为云Flexus+DeepSeek征文|基于华为云Dify平台打造个人知识库聊天机器人全流程指南

目录 前言 1 华为云Dify平台的一键部署 1.1 使用资源编排快速部署 1.2 获取访问入口并准备使用 2 初识Dify平台功能 2.1 登录平台与设置管理员账户 2.2 了解平台模块与功能 3 开通并配置DeepSeek大模型服务 3.1 在ModelArts Studio中启用大模型 3.2 获取模型服务API信…

EasyExcel复杂Excel导出

效果图展示 1、引入依赖 <!-- easyExcel --> <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>4.0.2</version> </dependency>2、实体类 import com.alibaba.excel.annotatio…

云服务器系统日志占满磁盘怎么办?

云服务器系统日志占满磁盘是常见问题&#xff0c;长期积累大量日志文件会导致磁盘空间不足&#xff0c;影响服务器稳定运行。下面是几种常用的清理和管理日志的方法&#xff1a; 解决系统日志占满磁盘的步骤 1. 查看磁盘使用情况和日志目录大小 df -h # 查看磁盘空间使用情况 …

vueflow

自定义节点&#xff0c;自定义线&#xff0c;具体细节还未完善&#xff0c;实现效果&#xff1a; 1.安装vueflow 2.目录如下 3. index.vue <script setup> import { ref } from vue import { VueFlow, useVueFlow } from vue-flow/core import { Background } from vue-…

2022 RoboCom 世界机器人开发者大赛-本科组(省赛)解题报告 | 珂学家

前言 题解 2022 RoboCom 世界机器人开发者大赛-本科组&#xff08;省赛&#xff09;。 感觉T5是最简单的&#xff0c;其他都不好做。 RC-u5 树与二分图 分值: 30分 思路: 容斥原理 树天然就是二分图&#xff0c;按深度d归类(偶数深度为S1&#xff0c;奇数深度为S2)&#x…

framework之慕课大巴

8.Android启动课程大纲_哔哩哔哩_bilibili

redis未授权(CVE-2022-0543)

概述 Redis 默认绑定在 0.0.0.0:6379&#xff0c;在未配置防火墙或访问控制的情况下会将服务暴露在公网上。若未设置访问密码&#xff08;默认通常为空&#xff09;&#xff0c;攻击者可直接未授权访问 Redis。利用 Redis 提供的 CONFIG 命令&#xff0c;攻击者可修改配置并将…

帕金森常见情况解读

一、身体出现的异常节奏​ 帕金森会让身体原本协调的 “舞步” 出现错乱。它是一种影响身体行动能力的状况&#xff0c;随着时间推进&#xff0c;就像老旧的时钟&#xff0c;齿轮转动不再顺畅&#xff0c;使得身体各个部位的配合逐渐失衡&#xff0c;打乱日常行动的节奏。​ …

[正点原子]ESP32S3 RGB屏幕移植LVGL

ESP32S3 RGB屏幕移植lvgl 简介准备工作移植过程创建文件加修改配置修改适配文件main函数lvgl的图形化配置 着重要注意的屏幕驱动的问题 效果展示 简介 最近入手了 正点原子ESP32开发版准备学习LVGL&#xff0c;该板子支持RGB屏幕RGB565&#xff0c;之前买Linux开发板的时候有一…

移动安全Android——客户端静态安全

一、反编译保护 测试工具 Jadx GitHub - skylot/jadx: Dex to Java decompiler PKID [下载]PKID-APP查壳工具-Android安全-看雪-安全社区|安全招聘|kanxue.com 测试流程 &#xff08;1&#xff09;通过Jadx对客户端APK文件进行反编译&#xff0c;观察是否进行代码混淆 &…

支持功能安全ASIL-B的矩阵管理芯片IS32LT3365,助力ADB大灯系统轻松实现功能安全等级

随着自动驾驶技术的快速发展&#xff0c;汽车前灯智能化也越来越高。自适应远光灯 (ADB) 作为一种智能照明系统&#xff0c;在提升驾驶安全性和舒适性方面发挥着重要作用。ADB 系统通过摄像头和传感器获取前方道路信息&#xff0c;例如来车的位置、距离和速度&#xff0c;并根据…

Python训练营打卡Day40

DAY 40 训练和测试的规范写法 知识点回顾&#xff1a; 1.彩色和灰度图片测试和训练的规范写法&#xff1a;封装在函数中 2.展平操作&#xff1a;除第一个维度batchsize外全部展平 3.dropout操作&#xff1a;训练阶段随机丢弃神经元&#xff0c;测试阶段eval模式关闭dropout 作…

晨控CK-FR03与汇川H5U系列PLC配置MODBUS TCP通讯连接操作手册

晨控CK-FR03与汇川H5U系列PLC配置MODBUS TCP通讯连接操作手册 CK-FR03-TCP是一款基于射频识别技术的高频RFID标签读卡器&#xff0c;读卡器工作频率为13.56MHZ&#xff0c;支持对I-CODE 2、I-CODE SLI等符合ISO15693国际标准协议格式标签的读取。 读卡器同时支持标准工业通讯协…

二叉树实验

引言 在数据结构的学习过程中&#xff0c;二叉树作为一种典型的非线性结构&#xff0c;其构造和操作方式具有高度的层次性和结构性。而递归正是处理这种结构最自然的方式之一。关于二叉树的基本结构如下图所示&#xff1a; 递归的本质是函数调用自身的过程&#xff0c;这恰好…

【空间光学系统与集成微纳光子学系统简介】

空间光学系统 空间光学系统指用于太空探测、遥感、通信等领域的光学仪器&#xff0c;通常具备高分辨率、轻量化、抗辐射等特性。主要应用包括&#xff1a; 天文观测&#xff1a;如哈勃望远镜、詹姆斯韦伯太空望远镜&#xff08;JWST&#xff09;&#xff0c;利用大口径主镜收集…

开发一款IIS自动检测修复工具

目录 实现的功能 技术栈与依赖 DLL 实现细节 变量 初始化操作 自定义cpu阈值 检测IIS应用程序池 获取自定义阈值 获取某个应用程序池的占用率 获取性能计数器实例名 Kill 并重新启动应用池 写入日志到 Log 目录&#xff0c;并显示在文本框中 实际运行效果 此工具可…

网络编程4-epoll

select底层原理 fd_set底层使用位图标记每个文件标识符有没有被使用&#xff0c;位图在c语言里靠数组实现。 select 流程 在用户态空间里&#xff08;栈、堆、数据段&#xff09;申请一个fd_set将fd_set从用户态拷贝到内核态&#xff08;在后面操作系统轮询会使用到&#xff09…

SOC-ESP32S3部分:19-ADC模数转换

飞书文档https://x509p6c8to.feishu.cn/wiki/XycAwmO6Niitdtka1RAcclYfnvf ESP32-S3 集成了两个 12 位 SAR ADC&#xff0c;共支持 20 个模拟通道输入。 SAR ADC 管脚通过 IO MUX 与 GPIO1 ~ GPIO20、RTC_GPIO1 ~ RTC_GPIO20、触摸传感器接口、UART 接口、SPI 接口、以及 USB…

默克微生物培养基选择指南

微生物学研究需要能在实验室提供各种不同种类的细菌、酵母或病毒。诸如发酵、蛋白质和疫苗生产的大规模过程需要大量处于生理活性状态的细菌。因此&#xff0c;针对各种应用需要有能提供适当的生化环境并保持微生物所有特征的合适的营养培养基。 任何微生物培养基都应包括营养…

移动安全Android——解决APP抓包证书无效问题

问题 通过Burpsuite和ProxyPin进行代理抓包Android APP的时候发现虽然已经正确添加了用户证书&#xff0c;但是还是会出现SSL握手错误&#xff0c;证书无效问题。这是因为Android 7 以上版本APP默认不信任用户证书&#xff0c;只信任系统证书&#xff0c;所以需要将用户证书移动…