4.MongoDB sharding Cluster 分片集群
- MongoDB分片集群的介绍:
- 是MongoDB提供的一种可水平扩展的数据存储解决方案。
- 当单个MongoDB服务器无法满足数据存储需求或吞吐量要求时,可以使用分片集群来分散数据量和查询负载。
- 分片集群的结构组成:
- 1.分片(shards):
- 真正存储数据的服务器,以chunk为单位存数据。每个分片是单个的一个MongDB实例,也可以是一个复制集,用于提供数据冗余和高可用性
- 2.查询路由(mongs):
- 数据路由,和客户端打交道的模块。
- 查询路由器(通常使用mongos进程实现)是分片集群的入口,它负责将应用程序的请求路由到正确的分片
- 3.配置服务器(config Server):
- 所有存、取数据的方式,所有shard节点的信息,分片功能一些配置信息。可以理解为真实数据的元数据。
- 1.分片(shards):
- 实验准备环境:
- 10个mongodb实例,端口为:38017-38026
- 1.shard节点:
- 对应的实例:
- shard节点1:38021-23(一主两从,其中一个节点为arbiter)
- shard节点2:38024-26(一主两从,其中一个节点为arbiter)
- 对应的实例:
- 2.config server:
- 3台构成复制集(一主两从)
- 对应实例端口:38018-38020
- 3.查询路由(mongos):
- 路由节点,一台服务器:38017
- 实验步骤:
- 1.配置shard分片集:
- 创建多实例目录:
- mkdir -p /mongodb/38021/conf /mongodb/38021/log /mongodb/38021/data
- mkdir -p /mongodb/38022/conf /mongodb/38022/log /mongodb/38022/data
- mkdir -p /mongodb/38023/conf /mongodb/38023/log /mongodb/38023/data
- mkdir -p /mongodb/38024/conf /mongodb/38024/log /mongodb/38024/data
- mkdir -p /mongodb/38025/conf /mongodb/38025/log /mongodb/38025/data
- mkdir -p /mongodb/38026/conf /mongodb/38026/log /mongodb/38026/data
- 修改配置文件:
- shard分片集1:
- cat > /mongodb/38021/conf/mongodb.conf<<EOF
- systemLog:
- destination: file
- path: /mongodb/38021/log/mongodb.log
- logAppend: true
- storage:
- journal:
- enabled: true
- dbPath: /mongodb/38021/data
- directoryPerDB: true
- #engine: wiredTiger
- wiredTiger:
- engineConfig:
- cacheSizeGB: 1
- directoryForIndexes: true
- collectionConfig:
- blockCompressor: zlib
- indexConfig:
- prefixCompression: true
- net:
- bindIp: 192.168.8.5,127.0.0.1
- port: 38021
- replication:
- oplogSizeMB: 2048
- replSetName: sh1
- sharding:
- clusterRole: shardsvr
- processManagement:
- fork: true
- EOF
- cp /mongodb/38021/conf/mongodb.conf /mongodb/38022/conf/
- cp /mongodb/38021/conf/mongodb.conf /mongodb/38023/conf/
- sed 's#38021#38022#g' /mongodb/38022/conf/mongodb.conf -i
- sed 's#38021#38023#g' /mongodb/38023/conf/mongodb.conf -i
- shard分片集1:
- shard 分片集2:
- cat > /mongodb/38024/conf/mongodb.conf<<EOF
- systemLog:
- destination: file
- path: /mongodb/38024/log/mongodb.log
- logAppend: true
- storage:
- journal:
- enabled: true
- dbPath: /mongodb/38024/data
- directoryPerDB: true
- wiredTiger:
- engineConfig:
- cacheSizeGB: 1
- directoryForIndexes: true
- collectionConfig:
- blockCompressor: zlib
- indexConfig:
- prefixCompression: true
- net:
- bindIp: 192.168.8.5,127.0.0.1
- port: 38024
- replication:
- oplogSizeMB: 2048
- replSetName: sh2
- sharding:
- clusterRole: shardsvr
- processManagement:
- fork: true
- EOF
- cp /mongodb/38024/conf/mongodb.conf /mongodb/38025/conf/
- cp /mongodb/38024/conf/mongodb.conf /mongodb/38026/conf/
- sed 's#38024#38025#g' /mongodb/38025/conf/mongodb.conf -i
- sed 's#38024#38026#g' /mongodb/38026/conf/mongodb.conf -i
- 启动所有节点,搭建复制集:
- mongod -f /mongodb/38021/conf/mongodb.conf
- mongod -f /mongodb/38022/conf/mongodb.conf
- mongod -f /mongodb/38023/conf/mongodb.conf
- mongod -f /mongodb/38024/conf/mongodb.conf
- mongod -f /mongodb/38025/conf/mongodb.conf
- mongod -f /mongodb/38026/conf/mongodb.conf
- 登录shard节点1的主服务器,搭建复制集:
- mongo --port 38021 admin
- config = {_id: 'sh1', members: [
- {_id: 0, host: '192.168.8.5:38021'},
- {_id: 1, host: '192.168.8.5:38022'},
- {_id: 2, host: '192.168.8.5:38023',"arbiterOnly":true}]
- }
- rs.initiate(config)
- 登录shard节点2的主服务器,搭建复制集:
- mongo --port 38024 admin
- config = {_id: 'sh2', members: [
- {_id: 0, host: '192.168.8.5:38024'},
- {_id: 1, host: '192.168.8.5:38025'},
- {_id: 2, host: '192.168.8.5:38026',"arbiterOnly":true}]
- }
- rs.initiate(config)
- 创建多实例目录:
- 至此,整个集群中用于存储用户数据的分片集群已经搭建好了,接下来我们来搭建config server层,它主要用于存储元数据(数据信息)
- config节点配置:
- mkdir -p /mongodb/38018/conf /mongodb/38018/log /mongodb/38018/data
- mkdir -p /mongodb/38019/conf /mongodb/38019/log /mongodb/38019/data
- mkdir -p /mongodb/38020/conf /mongodb/38020/log /mongodb/38020/data
- 修改配置文件:
- cat > /mongodb/38018/conf/mongodb.conf <<EOF
- systemLog:
- destination: file
- path: /mongodb/38018/log/mongodb.conf
- logAppend: true
- storage:
- journal:
- enabled: true
- dbPath: /mongodb/38018/data
- directoryPerDB: true
- #engine: wiredTiger
- wiredTiger:
- engineConfig:
- cacheSizeGB: 1
- directoryForIndexes: true
- collectionConfig:
- blockCompressor: zlib
- indexConfig:
- prefixCompression: true
- net:
- bindIp: 192.168.8.5,127.0.0.1
- port: 38018
- replication:
- oplogSizeMB: 2048
- replSetName: configReplSet
- sharding:
- clusterRole: configsvr
- processManagement:
- fork: true
- EOF
- cp /mongodb/38018/conf/mongodb.conf /mongodb/38019/conf/
- cp /mongodb/38018/conf/mongodb.conf /mongodb/38020/conf/
- sed 's#38018#38019#g' /mongodb/38019/conf/mongodb.conf -i
- sed 's#38018#38020#g' /mongodb/38020/conf/mongodb.conf -i
- 启动节点,并配置复制集:
- mongod -f /mongodb/38018/conf/mongodb.conf
- mongod -f /mongodb/38019/conf/mongodb.conf
- mongod -f /mongodb/38020/conf/mongodb.conf
- 登录主节点:
- mongo --port 38018 admin
- config = {_id: 'configReplSet', members: [
- {_id: 0, host: '192.168.8.5:38018'},
- {_id: 1, host: '192.168.8.5:38019'},
- {_id: 2, host: '192.168.8.5:38020'}]
- }
- rs.initiate(config)
- config节点配置:
- 至此config server节点已经配置完毕,接下来我们配置mongos节点(查询路由),它负责与客户端建立连接,确定数据应该分布在那个分片,让整个集群看起来像一个简单的服务器。
- mongos节点配置:
- 创建实例目录:
- mkdir -p /mongodb/38017/conf /mongodb/38017/log
- 修改配置文件:
- cat > /mongodb/38017/conf/mongos.conf << EOF
- systemLog:
- destination: file
- path: /mongodb/38017/log/mongos.log
- logAppend: true
- net:
- bindIp: 192.168.8.5,127.0.0.1
- port: 38017
- sharding:
- configDB: configReplSet/192.168.8.5:38018,192.168.8.5:38019,192.168.8.5:38020
- processManagement:
- fork: true
- EOF
- 启动mongos:
- mongos -f /mongodb/38017/conf/mongos.conf
- 至此我们整个分片集群搭建完毕,接下来对分片集群进行操作。
- 创建实例目录:
- mongos节点配置:
- 分片集群操作:
- 连接mongos节点:
- mongo 192.168.8.10:38017/admin
- 添加分片:
- db.runCommand( { addshard : "sh1/192.168.8.5:38021,192.168.8.5:38022,192.168.8.5:38023",name:"shard1"} )
- db.runCommand( { addshard : "sh2/192.168.8.5:38024,192.168.8.5:38025,192.168.8.5:38026",name:"shard2"} )
- 列出分片:
- db.runCommand( { listshards : 1 }
- 连接mongos节点:
- 分片方法:
- Hash分片:
- 对hehe库下的大表进行hash
- 1.对hehe开启分片功能:
- mongo --port 38017 admin
- use admin
- admin> db.runCommand( { enablesharding : "hehe" } )
- 2.对hehe库下的t10w表建立hash索引:
- use hehe
- > db.t10w.ensureIndex( { id: "hashed" } )
- 3.开启分片:
- use admin
- sh.shardCollection( "hehe.t10w", { id: "hashed" } )
- 4.录入10w行数据测试:
- use hehe
- for(i=1;i<100001;i++){ db.t10w.insert({"id":i,"name":"lisi","age":30,"date":new Date()}); }
- 5.验证,在打开两个终端,分别登录俩个不同的shard分片复制集中,对t10w表,进行行数查看:
- su - mongod
- mongo --port 38021
- use hehe
- db.t10w.count();
- 发现数据分别在两个shard节点的复制集中存入,而不是仅仅存入到了一个shard节点中,这就是hash分片算法起到的作用
- su - mongod
- mongo --port 38024
- use hehe
- db.t10w.count();
- 分片集群当中,常用到的操作命令:
- 判断是否shard集群
- mongo --port 38017 admin
- admin> db.runCommand({ isdbgrid : 1})
- 6、列出所有分片信息
- admin> db.runCommand({ listshards : 1})
- 7、列出开启分片的数据库
- admin> use config
- config> db.databases.find( { "partitioned": true } )
- 或者:
- config> db.databases.find() //列出所有数据库分片情况
- 8、查看分片的片键
- config> db.collections.find().pretty()
- {
- "_id" : "test.t100w",
- "lastmodEpoch" : ObjectId("58a599f19c898bbfb818b63c"),
- "lastmod" : ISODate("1970-02-19T17:02:47.296Z"),
- "dropped" : false,
- "key" : {
- "id" : "hashed"
- },
- "unique" : false
- }
- 9、查看分片的详细信息
- admin> db.printShardingStatus()
- 或
- admin> sh.status() *****
- 10、删除分片节点(谨慎)
- (1)确认blance是否在工作
- sh.getBalancerState()
- (2)删除shard2节点(谨慎)
- mongos> use admin
- mongos> db.runCommand( { removeShard: "shard2" } )
- 注意:删除操作一定会立即触发blancer。
- 判断是否shard集群
- Hash分片:
- 1.配置shard分片集:
相关文章:
4.MongoDB sharding Cluster 分片集群
MongoDB分片集群的介绍: 是MongoDB提供的一种可水平扩展的数据存储解决方案。 当单个MongoDB服务器无法满足数据存储需求或吞吐量要求时,可以使用分片集群来分散数据量和查询负载。分片集群的结构组成: 1.分片(shards)…...
PDF转图片工具
背景: 今天有个朋友找我:“我有个文件需要更改,但是文档是PDF的,需要你帮我改下内容,你是搞软件的,这个对你应该是轻车熟路了吧,帮我弄弄吧”,听到这话我本想反驳,我是开…...
Day 19:419. 甲板上的战舰
Leetcode 419. 甲板上的战舰 给你一个大小为 m x n 的矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 ‘X’ 或者是一个空位 ‘.’ ,返回在甲板 board 上放置的 战舰 的数量。 战舰 只能水平或者垂直放置在 board 上。换句话说ÿ…...
Web前端专科实习:技能提升、实践挑战与职业展望
Web前端专科实习:技能提升、实践挑战与职业展望 在数字化时代,Web前端技术作为连接用户与互联网世界的桥梁,其重要性日益凸显。作为一名Web前端专科实习生,我有幸在这个充满机遇和挑战的领域进行实践学习。接下来,我将…...
简单脉冲动画效果实现
简单脉冲动画效果实现 效果展示 CSS 知识点 CSS 变量的灵活使用CSS 动画使用 页面整体结构实现 <div class"pulse"><span style"--i: 1"></span><span style"--i: 2"></span><span style"--i: 3"…...
apache poi 插入“下一页分节符”并设置下一节纸张横向的一种方法
一、需求描述 我们知道,有时在word中需要同时存在不同的节,部分页面需要竖向、部分页面需要横向。本文就是用java调用apache poi来实现用代码生成上述效果。下图是本文实现的效果,供各位看官查阅,本文以一篇课文为例,…...
【React】useCallback和useMemo使用指南
useCallback和useMemo是React中两个用于优化性能的Hooks。以下是它们的使用指南,分点表示并归纳了关键信息: useCallback useCallback返回一个记忆化的回调函数,该回调函数只在它的依赖项发生改变时才会更新。这对于在组件渲染之间保持稳定的引用特别有用,可以防止不必要…...
XMind软件下载-详细安装教程视频
简介 XMind是一款实用的思维导图软件,简单易用、美观、功能强大,拥有高效的可视化思维模式,具备可扩展、跨平台、稳定性和性能,真正帮助用户提高生产率,促进有效沟通及协作。中文官方网站:http://www.x…...
一个小的画布Canvas页面,记录点的轨迹
Hello大家好,好久没有更新了,最近在忙一些其他的事,今天说一下画布canvas,下面是我的代码,实现了一个点从画布的(0,0)到(canvas.width,canvas.height)的一个实…...
docker-compose教程
1. docker-compose是什么? 1. 1 简介 compose、machine 和 swarm 是docker 原生提供的三大编排工具。 简称docker三剑客。Compose 项目是 Docker 官方的开源项目,定义和运行多个 Docker 容器的应用(Defining and running multi-container Do…...
结果出乎意料!MySQL和MariaDB谁快?MySQL 8.0比MySQL 5.6快吗?
MySQL和MariaDB哪个更快?MySQL 8.0的版本和早期MySQL 5.6的版本哪个更快?这儿有个第三方的测试报告回答了这两个大家关心的问题,姚远来和大家一起解读一下。https://smalldatum.blogspot.com/2024/04/sysbench-on-small-server-mariadb-and.h…...
Alienware外星人X17R2 原装Win11系统镜像下载 带SupportAssist OS Recovery一键恢复
装后恢复到您开箱的体验界面,包括所有原机所有驱动AWCC、Mydell、office、mcafee等所有预装软件。 最适合您电脑的系统,经厂家手调试最佳状态,性能与功耗直接拉满,体验最原汁原味的系统。 原厂系统下载网址:http://w…...
【NI国产替代】高速数据采集模块,最大采样率为 125 Msps,支持 FPGA 定制化
• 双通道高精度数据采集 • 支持 FPGA 定制化 • 双通道高精度采样率 最大采样率为 125 Msps12 位 ADC 分辨率 最大输入电压为 0.9 V -3 dB 带宽为 30 MHz 支持 FPGA 定制化 根据需求编程实现特定功能和性能通过定制 FPGA 实现硬件加速,提高系统的运算速度FPGA…...
【网络安全的神秘世界】2024.6.6 Docker镜像停服?解决最近Docker镜像无法拉取问题
🌝博客主页:泥菩萨 💖专栏:Linux探索之旅 | 网络安全的神秘世界 | 专接本 解决Docker镜像无法拉取问题 🙋♂️问题描述 常用镜像站:阿里云、科大、南大、上交等,全部挂掉 执行docker pull命…...
【Python入门与进阶】1基本输入和输出
基本输入输出 1.等号赋值 1.1 基本赋值 number_110number_1 1.2 多个赋值 number_2number_3number_420 number_2 number_3 number_4 1.3 多重赋值 number_5,number_6,number_730,35,40 number_5 number_6 number_7 1.4 下划线赋值 _50 _ 2.命名规则 注意:…...
CTF Show MISC做题笔记
MISCX 30 题目压缩包为misc2.rar,其中包含三个文件:misc1.zip, flag.txt, hint.txt。其中后两个文件是加密的。 先解压出misc1.zip, 发现其中包含两个文件:misc.png和music.doc。其中后面文件是加密的。 解压出misc.png,发现图片尾部有消息:flag{flag…...
【QT5】<总览二> QT信号槽、对象树及常用函数
文章目录 前言 一、QT信号与槽 1. 信号槽连接模型 2. 信号槽介绍 3. 自定义信号槽 二、QT的对象树 三、添加资源文件 四、样式表的使用 五、QSS文件的使用 六、常用函数与宏 前言 承接【QT5】<总览一> QT环境搭建、快捷键及编程规范。若存在版…...
Button按钮类
自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 按钮是GUI界面中应用最为广泛的控件,它常用于捕获用户生成的单击事件,其最明显的用途是触发绑定到一个处理函数。 wxPython类…...
代码随想录-二叉树 | 111 二叉树的最小深度
代码随想录-二叉树 | 111 二叉树的最小深度 LeetCode 111 二叉树的最小深度解题思路代码难点总结 LeetCode 111 二叉树的最小深度 题目链接 代码随想录 题目描述 给定一个二叉树,找出其最小深度。 最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 说…...
PCA降维算法
decomposition.h #pragma once #include <arrayfire.h>namespace decomposition {class PCA{public:af::array zero_centred(af::array...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
谷歌浏览器插件
项目中有时候会用到插件 sync-cookie-extension1.0.0:开发环境同步测试 cookie 至 localhost,便于本地请求服务携带 cookie 参考地址:https://juejin.cn/post/7139354571712757767 里面有源码下载下来,加在到扩展即可使用FeHelp…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
解决本地部署 SmolVLM2 大语言模型运行 flash-attn 报错
出现的问题 安装 flash-attn 会一直卡在 build 那一步或者运行报错 解决办法 是因为你安装的 flash-attn 版本没有对应上,所以报错,到 https://github.com/Dao-AILab/flash-attention/releases 下载对应版本,cu、torch、cp 的版本一定要对…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
HarmonyOS运动开发:如何用mpchart绘制运动配速图表
##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
C/C++ 中附加包含目录、附加库目录与附加依赖项详解
在 C/C 编程的编译和链接过程中,附加包含目录、附加库目录和附加依赖项是三个至关重要的设置,它们相互配合,确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中,这些概念容易让人混淆,但深入理解它们的作用和联…...
