整理mongodb文档:搭建分片集群

news2024/11/25 4:34:06

个人博客

整理mongodb文档:搭建分片集群

分片集群在MongoDB中的的使用并没有那么多,更多的还是副本集,所以本文就不讲解那么多,只是搭建一个最基本的分片集群,让大家有个了解。个人公众号,求关注。

文章概叙

本文主要搭建一个在本地的分片,以便大家了解分片的布局。

分片集群

相对于通过提供冗余以及增加数据可用性,为单台数据库服务器故障提供一定程度的容错能力的副本集。

分片集群是通过将系统数据集划分至多台机器,并根据需要添加服务器来提升容量,对高吞吐以及海量数据量的情况,将数据分散存储在多台服务器上,从而提高可扩展性和性能。

在分片集群中,数据被分成多个片段,每个片段被存储在不同的服务器上。客户端可以通过路由,将数据请求发送到正确的服务器上。路由是一个mongos进程,它维护着数据分片的位置和状态,并负责将数据请求路由到正确的服务器上。

分片集群的组成

在了解了分片集群的组成以及概念之后,再依次详细介绍下分片集群的各个组成成分。

Shard:每个分片包含被分片的数据集中的一个子集。每个分片可以被部署为副本集架构。

mongos:查询路由,在客户端应用程序和分片集群之间提供接口。

config server:用于存储集群和Shard节点的元数据,即各Shard节点中包含哪些数据的信息。

Shard Keys:定集合的文档在集群切片中的分布,一般我们使用哈希分片,分片键直接决定你的分片集群是否完善,且分片键是无法修改的,所以一定要设置好分片键。

如下图,当我们的数据进入到我们的程序中的时候,我们的mongos会根据配置好的分片集合,将数据根据分片键来将数据分配到不同的分片中。
在这里插入图片描述

分片集群搭建

既然知道了一个分片集群的组成部分,接下来便是搭建一个分片集群的时间,下面的例子会按照上面的设计图,搭建两个shard用于存放数据,搭建一个config server以及一个mongos 作为router

首先,搭建两个副本集,且需要用到–shardsvr 参数,表示 本集群中的数据库是可分片的。具体搭建可以看之前的博客,有关于副本集的搭建,这儿直接将指令发出来。

mongod
 --shardsvr
 --port 27017
 --dbpath ./s0r0
 --replSet r0/[localhost:27018,localhost:27019]
mongod
 --shardsvr
 --port 27018
 --dbpath ./s0r1
 --replSet r0/[localhost:27017,localhost:27019]
mongod
 --shardsvr
 --port 27019
 --dbpath ./s0r2
 --replSet r0/[localhost:27018,localhost:27017]
const config = {
    _id: 'r0',
    members: [
        { _id: 0, host: 'localhost:27017' },
        { _id: 1, host: 'localhost:27018' },
        { _id: 2, host: 'localhost:27019' }
    ]
}
rs.initiate(config)

依葫芦画瓢,将第二个副本集也成功的搭建起来,只不过这次用的端口号分别是28017,28018,28019,以及副本集名字叫做r1而已,这儿就不粘贴代码了,没啥区别。
在这里插入图片描述
在这里插入图片描述

在搭建完两个支持分片模式的副本集之后,我们需要搭建一个config server,依旧是需要搭建副本集的形式,这次我们使用29017,29018,29019的三个端口。在搭建的指令中,我们需要用到–configsvr 参数,表示该副本集作为配置服务器启动。

mongod
  --configsvr
  --port 29017
  --dbpath ./config0
  --replSet config/[localhost:29018,localhost:29019]
mongod
  --configsvr
  --port 29018
  --dbpath ./config1
  --replSet config/[localhost:29017,localhost:29019]
mongod
  --configsvr
  --port 29019
  --dbpath ./config2
  --replSet config/[localhost:29018,localhost:29017]
const config = {
    _id: 'config',
    members: [
        { _id: 0, host: 'localhost:29017' },
        { _id: 1, host: 'localhost:29018' },
        { _id: 2, host: 'localhost:29019' }
    ]
}
rs.initiate(config)
```![在这里插入图片描述](https://img-blog.csdnimg.cn/img_convert/ef5329e28bdcb2dc5e25b0996d48d719.png#pic_center)



搭建了config server 之后,就直接开始搭建我们的mongos了,这儿需要用到了mongos 作为路由,需要配置configdb参数,并设置为刚刚搭建的comfog server 集群,需要注意的是我们需要将集群的成员都设置进去。

```javascript
.\mongos
   --port 54543
   --configdb config/localhost:29017,localhost:29018,localhost:29019

在启动完路由之后,我们再进去到服务中,进入到admin库中,继续我们接下来的操作,因为现在只是将mongos与我们的config server 绑定起来,并没有将我们的shard 联系起来,所以需要用runCommand设置我们shard,但这些操作,都需要在我们的admin库中。

.\mongosh mongodb://localhost:54543

在这里插入图片描述

use admin

接着,我们需要使用addshard命令添加到分片集群的分片副本集。由于之前设置的r0以及r1两个都是副本集,所以我们需要将两个副本集都设置进来。并且由于是将所有的服务都堆积在了localhost中,所以需要指定allowLocal 为true,在生产模式下,是需要设置allowLocal为false的。

db.runCommand({addshard:"r0/localhost:27017,localhost:27018,localhost:27019",allowLocal:true})
db.runCommand({addshard:"r1/localhost:28017,localhost:28018,localhost:28019",allowLocal:true})

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

现在,已经将我们的shard跟mongos绑定上来了,接下来需要设置我们哪个库允许进行分片,总不能将所有的库都允许分片吧,因此我们设置shard库允许分片,请记住我们的操作依旧需要在admin库中。

db.runCommand({enablesharding:'shard'})

在这里插入图片描述

在设置完shard库允许分片之后,我们在设置集合允许分片,并设置她的分片键为hashed,注意,目前为止,在r0以及r1是看不到我们的shard库的,所以请不要紧张。

db.runCommand({shardcollection:‘shard.collection’,key:{name:‘hashed’}})
此时,也可以看到我们的r0以及r1已经成功的分片到了

在这里插入图片描述
在这里插入图片描述

接着,往里面插入两条数据做测试

db
.collection
.insertMany([
  {name:"1"},
  {name:'2'}
])

再接着,查看两个副本集中是否有数据

在这里插入图片描述

在这里插入图片描述

可以看到,当前的分片已经成功了。一个分片集群已经搭建起来了。而对于并没有设置了shardcollection但是又属于shard下的集合,由于没有配置分片键,所以会出现一股脑儿的塞数据的情况。

注意点

需要注意,在搭建分片集的时候,要使用副本集的形式搭建,这个是mongodb的硬性要求。
在mongos中配置分片集的时候,必须在admin库中配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1091680.html

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

相关文章

光储直流微电网MATLAB/Simulink仿真

微❤关注“电击小子程高兴的MATLAB小屋”获得资料(专享优惠) MATLAB代码:光储直流微电网MATLAB/Simulink仿真 仿真软件:MATLAB2018b 光储并网直流微电网simulink仿真模型,光伏采用mppt实现最大功率输出。 图1 整体仿…

力扣-448.找到所有数组中消失的数字

Idea 模拟 class Solution { public:vector<int> findDisappearedNumbers(vector<int>& nums) {int n nums.size();vector<int> a(n 1, 0);for(int i : nums) a[i];vector<int> ans;for(int i 1; i < n; i) if(!a[i]) ans.emplace_back(i);r…

【Java】jdk9为何要将String的底层实现由char[]改为byte[]

问题&#xff1a;从jdk9 String 的底层实现由 char[] 改为了 byte[] 答案&#xff1a;节省 String 占用 jvm 的内存空间 JDK1.8 String类型底层实现 基于 char[] 类型数组实现 JDK1.9开始 String类 底层实现 char[] 类型数组改为 byte[],下面的是JDK11 下一篇文章&#xff1a; …

超详细的顺序表(附源码)

文章目录 前言线性表顺序表顺序表的分类静态顺序表动态顺序表 动态顺序表的实现&#x1f6a9;结构&#x1f6a9;初始化&#x1f6a9;销毁&#x1f6a9;插入&#x1f6a9;删除&#x1f6a9;查找&#x1f4c3;源代码 前言 顺序表是线性表的一种&#xff0c;代码量对于前面的学习…

年底旺季,Shopee、Lazada如何通过测评补单技术打造产品权重收割流量

当前Shopee和Lazada平台的主要推广方式仍然以广告为主&#xff0c;毕竟这是平台的主要收入来源之一。然而&#xff0c;由于近年来大量卖家涌入东南亚市场&#xff0c;导致卖家之间的竞争日趋激烈。高额的广告投入并不能带来预期的效果&#xff0c;因此越来越多的卖家开始自学测…

RK3588 USB蓝牙调试

一.蓝牙基本概念 蓝牙技术是一种无线通信的方式&#xff0c;利用特定频率的波段&#xff08;2.4GHz-2.485GHz左右&#xff09;&#xff0c;进行电磁波传输。蓝牙传输原理是主从关系&#xff0c;一个主设备可以与7个蓝牙从设备配对。 二.蓝牙标准 蓝牙标准版本发展如下&#x…

Redis五大数据类型的底层设计

SDS 无论是 Redis 的 Key 还是 Value&#xff0c;其基础数据类型都是字符串。虽然 Redis是使用标准 C 语言开发的&#xff0c;但并没有直接使用 C 语言中传统的字符串表示&#xff0c;而是自定义了一 种字符串。这种字符串本身的结构比较简单&#xff0c;但功能却非常强大&…

使用paddleX体验

首先paddlex的网址链接是&#xff1a;飞桨AI Studio星河社区-人工智能学习与实训社区 (baidu.com) 进入paddlex以后的界面如下所示&#xff1a; 首先说明paddlex的作用是&#xff1a; PaddleX是PaddlePaddle深度学习框架的一个扩展库&#xff0c;专注于为深度学习任务提供强大…

Python PyInstaller安装和使用教程(详解版)

在创建了独立应用&#xff08;自包含该应用的依赖包&#xff09;之后&#xff0c;还可以使用 PyInstaller 将 Python 程序生成可直接运行的程序&#xff0c;这个程序就可以被分发到对应的 Windows 或 Mac OS X 平台上运行。 安装 PyInstalle Python 默认并不包含 PyInstaller…

GaN器件的工作原理

目录 AlGaN/GaNHEMT 器件工作原理&#xff08;常开-耗尽型器件&#xff09;常关 AlGaN/GaN 功率晶体管&#xff08;增强型器件&#xff09;HD-GIT与SP-HEMT AlGaN/GaNHEMT 器件工作原理&#xff08;常开-耗尽型器件&#xff09; 来源&#xff1a;毫米波GaN基功率器件及MMIC电路…

性能测试之性能测试指标详解

前言 刚开始&#xff0c;以为做性能测试&#xff0c;就是做些脚本、参数化、关联&#xff0c;压起来之后&#xff0c;再扔出一个结果。 但实际上不止这些内容&#xff0c;还要加上性能分析&#xff0c;关注调优之后响应时间有多大的提升&#xff0c;TPS 有多大的提高&#xf…

链路层2:交换机的MAC地址表和端口聚合

交换机的MAC地址表 对于网络交换机来说&#xff0c;MAC地址表是其能否正确转发数据包的关键&#xff0c;为此&#xff0c;协议标准RFC2285和RFC 2889中都对以太网交换机的MAC地址表和MAC地址学习进行专门的描述。MAC地址表显示了主机的MAC地址与以太网交换机端口映射关系&#…

基于JAYA优化的BP神经网络(分类应用) - 附代码

基于JAYA优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于JAYA优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.JAYA优化BP神经网络3.1 BP神经网络参数设置3.2 JAYA算法应用 4.测试结果&#xff1a;5.M…

接口自动化测试框架详解

接口自动化测试框架只需要编写yaml(excel)测试用例即可完全实现零代码落地实施自动化测试。 1、核心技术 1.1 热加载封装&#xff08;全网最早应用于自动化测试框架的封装技术&#xff09; 1.2 requests统一请求封装 1.3 接口关联封装以及接口关联封装改进 1.4 规范yaml测…

R语言——赋值(= ,<- ,<<-)

R语言 R语言——赋值&#xff08; &#xff0c;<- &#xff0c;<<-&#xff09; 文章目录 R语言一、 与 <- 的区别二、 <<- ,向上一环境层写入变量 R语言中" <- " 与 " " 都可以用来赋值&#xff0c;但R中建议使用" <- “…

图片如何制作gif动画?1分钟教会你快速制作gif

Gif动态格式图片是当下非常流行的&#xff0c;它包含了多帧图像循环播放产生了动态的效果。Gif动图能够很好的暴打自己内心的想法&#xff0c;传递信息。那么&#xff0c;这种gif动画图片是怎么制作的呢&#xff1f;很简单&#xff0c;通过使用gif动态图片制作&#xff08;http…

旅游景点咨询系统的设计与实现

旅游景点咨询系统的设计与实现 /*** file 旅游景点咨询系统的设计与实现* author jUicE_g2R(qq:3406291309) * * copyright 2023.10* COPYRIGHT 原创技术笔记&#xff1a;转载需获得博主本人同意&#xff0c;且需标明转载源** language …

K邻近算法(KNN,K-nearest Neighbors Algorithm)

文章目录 前言应用场景欧几里得距离&#xff08;欧氏距离&#xff09;两类、单一属性&#xff08;1D&#xff09;两类、两种属性&#xff08;2D&#xff09;两类、两种以上属性&#xff08;>3D&#xff09; Examples in R再来一个补充一下什么是变量 什么是变量&#xff1f;…

Windows网络系统架构

在介绍Windows网络体系架构之前&#xff0c;我首先介绍一下Windows中的两个重要编程规范——TDI&#xff0c;NDIS.&#xff0c;然后再介绍网络体系的架构。TDI&#xff0c;Transport Driver Interface&#xff0c;传输驱动程序接口。/Windows/System32/Drivers/Tdi.sys。在实现…

VSCode自定义代码块详解

第一步&#xff1a;点击文件-首选项-用户代码片段 第二步&#xff1a;选择代码块作用域的文件类型 类型一&#xff1a;全局作用域 这种类型的代码块是创建在vscode软件内部的文件。是跟随这当前安装的vscode这个软件的&#xff0c;不会随着项目的关闭而失效&#xff0c;会一直存…