mongodb集群之分片集群
目录
- 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/
在官方文档中,给出了不同环境下节点个数的建议。对于正式环境,官方推荐方案如图,也就是说config、shard都要配置成副本集模式,且节点最好为3个以上,即推荐至少10个节点,其中,config为3个节点以上的副本集群,shard1为3个节点以上的副本集群,shard2为3个节点以上的副本集群,router至少1个。
对于测试的话,至少需要三个节点,即router、config、shards各一个节点。
说明:configs、shards如果只配置一个节点也必须配置成副本集,如果不配置成副本集无法启动对应实例为configs、shards。
关于配置几个分片,官方也给了建议:
2)服务器资源规划
跟副本集一样,考虑服务器、端口、相关文件位置(一般会需要数据、日志、配置、pid等文件,数据和配置是必须的,其他的根据自己的需求),方便后续操作和运维。
- 服务器:如果是迁移用可以根据实际情况选择,如果是业务用,一般选择多个服务器,而不是同一台服务器
- 端口:一般使用默认端口27017,但有的时候为了安全或者端口已经被占用的情况,就需要根据实际需求和情况另选
- 配置conf文件
- 按顺序启动不同角色的mongodb实例
- 初始化config、shard集群信息
- 通过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
相关文章:

mongodb集群之分片集群
目录 1. 适用场景2. 集群搭建如何搭建搭建实例Linux搭建实例(待定)Windows搭建实例1.资源规划2. 配置conf文件3. 按顺序启动不同角色的mongodb实例4. 初始化config、shard集群信息5. 通过router进行分片配置 1. 适用场景 数据量大影响性能 数据量大概达到千万级或亿级的时候&…...

Starrocks Full GC日志分析
GC日志样例: [2025-06-03T07:36:06.1770800] GC(227) Pause Full (G1 Evacuation Pause) [2025-06-03T07:36:06.1960800] GC(227) Phase 1: Mark live objects [2025-06-03T07:36:06.9480800] GC(227) Cleaned string and symbol table, strings: 47009 processed,…...

飞算 JavaAI 赋能老项目重构:破旧立新的高效利器
许多企业的 Java 老项目面临着代码陈旧、架构落后、维护困难等问题。老项目重构势在必行,却又因庞大的代码量、复杂的业务逻辑让开发团队望而却步。 老项目重构困境重重 传统的 Java 老项目往往在长期的迭代和维护中积累了诸多问题。一方面,代码质量堪…...
RockyLinux9安装Docker
如何在RockyLinux9下安装Docker RockyLinux采用了全新的dnf来进行包管理,dnf支持yum别名,还没习惯的可以将dnf替换为yum 确保dnf最新 sudo dnf update -y安装dnf-plugins-core包 sudo dnf install -y dnf-plugins-core yum-utils添加Docker的官方仓库…...
RequestRateLimiterGatewayFilterFactory
一、功能说明 RequestRateLimiterGatewayFilterFactory 是 Spring Cloud Gateway 的流量控制组件,用于实现 API 请求速率限制,核心功能包括: 限制单位时间内的请求数量(如每秒10次)防止服务被突发流量击垮࿰…...
解决 xmlsec.InternalError: (-1, ‘lxml xmlsec libxml2 library version mismatch‘)
解决 xmlsec.InternalError: (-1, ‘lxml & xmlsec libxml2 library version mismatch’) 错误信息如下: Traceback (most recent call last):File "/home/mobsf/Mobile-Security-Framework-MobSF/manage.py", line 18, in <module>execute_f…...
【Linux基础知识系列】第九篇-Shell脚本入门
在Linux世界中,Shell脚本是自动化任务和简化操作的重要工具。它可以帮助用户编写一系列命令,自动执行重复的任务,从而提高工作效率。在本篇文章中,我们将介绍Shell脚本的基本概念、编写方法、常用命令和结构。通过这些内容&#x…...

typescript的Interface和Type
类型别名和接口非常相似,在大多数情况下你可以在它们之间自由选择。 几乎所有的 interface 功能都可以在 type 中使用,关键区别在于不能重新开放类型以添加新的属性,而接口始终是可扩展的。 // window.ts.transpileModule(src, {}); 这是调…...

java后端生成心电图-jfreechart
用jfreechart生成心电图 先上成功的图片 上代码 1.导入包 implementation org.jfree:jfreechart:1.5.4implementation org.jfree:jcommon:1.0.242.实现代码 对数据进行滤波 转换单位 package com.shinrun.infrastructure.util;import java.util.ArrayList; import java.ut…...

算法/机理模型演示平台搭建(二)——算法接口部署(FastApi)
算法/机理模型演示平台搭建(二)—— 算法接口部署(FastApi) 1. 项目结构2. 构建 Docker 镜像3. 运行 Docker 容器4. 访问 API 文档5. 调用 API1. 项目结构 app app/algorithms app/models Dockerfile FROM python:3.9-slimWORKDIR /codeCOPY ./requirements.txt /code…...

动态规划-647.回文子串-力扣(LeetCode)
一、题目解析 这里的子字符串是连续的,与之前的子序列不同,这里需要我们统计回文子串的数目。 二、算法原理 这里也有其他算法可以解决该问题,如中心扩展算法 时间复杂度O(N^2)/空间复杂度O(1),马拉车算法(具有局限性) 时间复杂…...
es 的字段类型(text和keyword)
Text 当一个字段是要被全文检索时,比如 Email 内容、产品描述,这些字段应该使用 text 类型。设置 text 类型以后,字段内容会被分析,在生成倒排索引之前,字符串会被分析器分词。text类型的字段不用于排序,很…...
Kotlin 中companion object {} 什么时候触发
在 Kotlin 中,companion object 的初始化触发时机是一个重要但容易被忽视的细节。以下是详细的解释: 1. 基本触发时机 companion object 的初始化发生在: 首次访问该类时(无论是访问伴生对象成员、创建类实例,还是通过…...

仿真每日一练 | Workbench中接触种类及选择方法简介
Workbench中给我们提供的接触类型主要包括以下几种👇 ◆ 1、摩擦 ◆ 2、无摩擦 ◆ 3、绑定 ◆ 4、不分离 ◆ 5、粗糙 ◆ 6、强制滑移 下面通过最常用的摩擦和绑定给大家展示两者的区别,同时文末也给大家介绍了几种接触的选择方法。首先先给大家介绍一下…...

Go语言中的rune和byte类型详解
1. rune类型 1.1. 基本概念 1. rune是Go语言的内建类型,它是int32的别名,即32位有符号整数; 2. 用于表示一个Unicode码点,全拼Unicode code point; 3. 可以表示任何UTF-8编码的字符; 1.2. 特点 1. 每…...
superior哥AI系列第6期:Transformer注意力机制:AI界的“注意力革命“
🎭 superior哥AI系列第6期:Transformer注意力机制:AI界的"注意力革命" 嘿!小伙伴们!👋 今天superior哥要带你们探索AI界最火的技术——Transformer!这个家伙可了不得,它不…...

【java面试】redis篇
redis篇 一、适用场景(一)缓存1、缓存穿透1.1 解决方案1:缓存空数据,查询返回的数据为空,将空结果缓存1.2 解决方案2:布隆过滤器 2、缓存击穿1.1 解决方案1:互斥锁1.2 解决方案2:逻辑…...

高效易用的 MAC 版 SVN 客户端:macSvn 使用体验
高效易用的 MAC 版 SVN 客户端:macSvn 使用体验 下载安装使用总结 最近有个项目要使用svn, 但是mac缺乏一款像 Windows 平台 TortoiseSVN 那样全面、高效且便捷的 SVN 客户端工具, 直到博主找到了该工具本文将结合实际使用体验,详细介绍 macSvn工具的核心…...
【搭建 Transformer】
搭建 Transformer 的基本步骤 Transformer 是一种基于自注意力机制的深度学习模型,广泛应用于自然语言处理任务。以下为搭建 Transformer 的关键步骤和代码示例。 自注意力机制 自注意力机制是 Transformer 的核心,计算输入序列中每个元素与其他元素的…...
自然图像数据集
目录 CIFAR-10 数据集CIFAR-100 数据集AFHQ 数据集FFHQ 数据集 CIFAR-10 数据集 简介: CIFAR-10 是一个经典的图像分类数据集,广泛用于机器学习领域的计算机视觉算法基准测试。它包含60000幅32x32的彩色图像,分为10个类,每类6000…...
Linux下使用nmcli连接网络
Linux下使用nmcli连接网络 介绍 在使用ubuntu系统的时候,有时候不方便使用桌面,使用ssh远程连接,可能需要使用nmcli命令来连接网络。本文将介绍如何使用nmcli命令连接网络。nmcli 是 NetworkManager 的命令行工具,用于管理网络连…...

HCIP(BGP综合实验)
一、实验拓扑 AS 划分: AS1:R1(环回 L0:172.16.0.1/32,L1:192.168.1.0/24)AS2:R2、R3、R4、R5、R6、R7(内部运行 OSPF,AS 号为 64512 和 64513 的联盟)AS3:R…...

Attention Is All You Need (Transformer) 以及Transformer pytorch实现
参考https://zhuanlan.zhihu.com/p/569527564 Attention Is All You Need (Transformer) 是当今深度学习初学者必读的一篇论文。 一. Attention Is All You Need (Transformer) 论文精读 1. 知识准备 机器翻译,就是将某种语言的一段文字翻译成另一段文字。 由…...

uniapp+vue2+uView项目学习知识点记录
持续更新中... 1、发送给朋友,分享到朋友圈功能开启 利用onShareAppMessage和onShareTimeline生命周期函数,在script中与data同级去写 // 发送给朋友 onShareAppMessage() {return {title: 清清前端, // 分享标题path: /pages/index/index, // 分享路…...

精美的软件下载页面HTML源码:现代UI与动画效果的完美结合
精美的软件下载页面HTML源码:现代UI与动画效果的完美结合 在数字化产品推广中,一个设计精良的下载页面不仅能提升品牌专业度,还能显著提高用户转化率。本文介绍的精美软件下载页面HTML源码,通过现代化UI设计与丰富的动画效果&…...

车载诊断架构 --- DTC消抖参数(Trip Counter DTCConfirmLimit )
我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…...

javaEE->IO:
文件: 操作系统中会把很多 硬件设备 和 软件资源 抽象成“文件”,统一进行管理。 大部分谈到的文件,都是指 硬盘的文件,文件就相当于是针对“硬盘”数据的一种抽象 硬盘: 1.机械硬盘:便宜 2.固态硬盘&…...

Oracle 用户/权限/角色管理
1. 用户 1.1. 用户的创建和删除 1.1.1. 创建用户 create user user identified {by password | externally} [ default tablespace tablespace ] [ temporary tablespace tablespace ] [ quota {integer [k | m ] | unlimited } on tablespace [ quota {integer [k | m ] | …...
使用免费wordpress成品网站模板需要注意点什么
在使用免费 WordPress 成品网站模板时,需要从版权、安全性、兼容性、功能限制等多个方面谨慎考量,避免后续出现问题。以下是具体需要注意的要点: 一、版权与授权问题 明确授权类型 免费模板可能分为「开源免费」「限个人使用」「禁止商业用…...
深入理解 JSX:React 的核心语法
1. 什么是 JSX? JSX(JavaScript And XML)是 React 中最核心的概念之一,也是区别于 Vue 的一个重要特征(尽管 Vue 现在也支持 JSX 语法)。JSX 是一种在 JavaScript 中编写 HTML 代码片段的语法协议…...