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/
图片源: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.pswp.cn/pingmian/82907.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DEEPSEEK帮写的STM32消息流函数,直接可用.已经测试

#include "main.h" #include "MessageBuffer.h"static RingBuffer msgQueue {0};// 初始化队列 void InitQueue(void) {msgQueue.head 0;msgQueue.tail 0;msgQueue.count 0; }// 检查队列状态 type_usart_queue_status GetQueueStatus(void) {if (msgQ…

华为欧拉系统中部署FTP服务与Filestash应用:实现高效文件管理和共享

华为欧拉系统中部署FTP服务与Filestash应用:实现高效文件管理和共享 前言一、相关服务介绍1.1 Huawei Cloud EulerOS介绍1.2 Filestash介绍1.3 华为云Flexus应用服务器L实例介绍二、本次实践介绍2.1 本次实践介绍2.2 本次环境规划三、检查云服务器环境3.1 登录华为云3.2 SSH远…

React---day5

4、React的组件化 组件的分类: 根据组件的定义方式,可以分为:函数组件(Functional Component )和类组件(Class Component);根据组件内部是否有状态需要维护,可以分成:无状态组件(Stateless Component )和…

测试策略:AI模型接口的单元测试与稳定性测试

测试策略:AI模型接口的单元测试与稳定性测试 在构建支持AI能力的系统中,开发者不仅要关注业务逻辑的正确性,也必须保障AI模型接口在各种环境下都能稳定运行。这就要求我们在开发阶段制定清晰的测试策略,从功能验证到性能保障,逐步推进系统可用性、可维护性与可扩展性的提…

UniApp 生产批次管理模块技术文档

UniApp 生产批次管理模块技术文档 1. 运行卡入站页面 (RunCardIn) 1.1 页面结构 <template><!-- 页面容器 --><view class"runCardIn" :style"{ paddingTop: padding }"><!-- 页头组件 --><pageHeader :title"$t(MENU:…

针对Helsinki-NLP/opus-mt-zh-en模型进行双向互翻的微调

引言  题目听起来有点怪怪的&#xff0c;但是实际上就是对Helsinki-NLP/opus-mt-en-es模型进行微调。但是这个模型是单向的&#xff0c;只支持中到英的翻译&#xff0c;反之则不行。这样的话&#xff0c;如果要做中英双向互翻就需要两个模型&#xff0c;那模型体积直接大了两倍…

Object转Map集合

对象与 Map 转换详解&#xff1a; Object.entries() 和 Object.fromEntries() 1&#xff0c;Object.fromEntries() 的主要用途就是将键值对集合&#xff08;如 Map&#xff09;转换为普通对象。 2&#xff0c;Object.entries() 返回一个二维数组&#xff0c;其中每个子数组包…

优先队列用法

第 5 行定义了一个队首是最大值的优先队列,第 10 行的输出如下: 27 - wuhan 21 - shanghai 11 - beijing 第 13 行定义了一个队首是最小值的优先队列,第 19 行的输出如下: 11 - beijing 21 - shanghai 27 - wuhan #include <bits/stdc.h> using namespace std; int…

Spring Boot3.4.1 集成redis

Spring Boot3.4.1 集成redis 第一步 引入依赖 <!-- redis 缓存操作 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> </dependency> <!-- pool 对象池 …

Replacing iptables with eBPF in Kubernetes with Cilium

source: https://archive.fosdem.org/2020/schedule/event/replacing_iptables_with_ebpf/attachments/slides/3622/export/events/attachments/replacing_iptables_with_ebpf/slides/3622/Cilium_FOSDEM_2020.pdf 使用Cilium&#xff0c;结合eBPF、Envoy、Istio和Hubble等技术…

英一真题阅读单词笔记 05年

2005 年 Text 1 第一段 序号 单词 音标 词义 1 fat [ft] a. 丰厚的&#xff0c;巨额的&#xff1b;肥胖的 2 pay [peɪ] n. 薪水 3 rise [raɪz] n. 上涨&#xff0c;增加&#xff1b;斜坡 4 pleasure [pleʒə(r)] n. 快乐&#xff1b;乐事 5 pleasure a…

FastAPI集成APsecheduler的BackgroundScheduler+mongodb(精简)

项目架构&#xff1a; FastAPI(folder) >app(folder) >core(folder) >models(folder) >routers(folder) >utils(folder) main.py(file) 1 utils文件夹下新建schedulers.py from apscheduler.schedulers.background import BackgroundScheduler from apschedu…

聊一聊接口测试中耗时请求如何合理安排?

目录 一、异步处理与轮询机制 轮询检查机制 二、 并行化测试执行 三、模拟与桩技术&#xff08;Mock/Stub&#xff09; 四、动态超时与重试策略 五、测试架构设计优化 分层测试策略 并行化执行 网络优化 六、测试用例分层管理 金字塔策略 七、 缓存与数据复用 响应…

深入详解DICOMweb:WADO与STOW-RS的技术解析与实现

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…

Splunk Validated Architecture (SVA):构建企业级可观测性与安全的基石

Splunk Validated Architecture (SVA) 是 Splunk 官方提供的一套经过严格测试、性能验证和最佳实践指导的参考架构蓝图。它并非单一固定方案&#xff0c;而是根据企业数据规模、性能需求、高可用性目标和合规要求&#xff0c;提供一系列可落地的部署模型。SVA 的核心价值在于为…

Armv7l或树莓派32位RPI 4B编译faiss

pip3 install faiss-cpu当然找不到预编译的包 手动下载 git clone https://github.com/facebookresearch/faiss.git cd faiss #能需要切换到特定版本标签&#xff0c;例如 v1.7.1&#xff0c;这个版本Cmake 3.18可以过&#xff0c;因为apt install安装的cmake只更新到这里&am…

C++之string的模拟实现

string 手写C字符串类类的基本结构与成员变量一、构造函数与析构函数二、赋值运算符重载三、迭代器支持四、内存管理与扩容机制五、字符串操作函数六、运算符重载总结 手写C字符串类 从零实现一个简易版std::string 类的基本结构与成员变量 namespace zzh { class string { …

修改Docker镜像源

配置文件位置&#xff1a; sudo vim /etc/docker/daemon.json Docker 或 containerd 的镜像加速器配置&#xff0c;旨在提高从 Docker Hub 拉取镜像的速度。 { "features": { "buildkit": true, "containerd-snapshotter": true }, …

服务器带宽线路的区别(GIA、CN2、BGP、CMI等)

服务器带宽线路的区别&#xff08;GIA、CN2、BGP、CMI等&#xff09; 一、BGP线路 1. 定义与技术特点 BGP&#xff08;Border Gateway Protocol&#xff0c;边界网关协议&#xff09;是一种用于不同自治系统&#xff08;AS&#xff09;之间交换路由信息的协议&#xff0c;属…

从0到1搭建AI绘画模型:Stable Diffusion微调全流程避坑指南

从0到1搭建AI绘画模型&#xff1a;Stable Diffusion微调全流程避坑指南 系统化学习人工智能网站&#xff08;收藏&#xff09;&#xff1a;https://www.captainbed.cn/flu 文章目录 从0到1搭建AI绘画模型&#xff1a;Stable Diffusion微调全流程避坑指南摘要引言一、数据集构…